|
|
@@ -0,0 +1,170 @@
|
|
|
+
|
|
|
+const lk = new ToolKit(`电信助手`, `Telecom`);
|
|
|
+
|
|
|
+const TelecomConstKey = {
|
|
|
+ // -----通用助手相关的-----
|
|
|
+ Mobile: 'lkTelecomMobile',
|
|
|
+ Password: 'lkTelecomPassword',
|
|
|
+ SignCount: 'lkTelecomSignCount',
|
|
|
+ Token: 'lkTelecomToken',
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+let telecomMobile = lk.getVal(TelecomConstKey.Mobile);
|
|
|
+let telecomPassword = lk.getVal(TelecomConstKey.Password);
|
|
|
+
|
|
|
+//公钥
|
|
|
+const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBkLT15ThVgz6/NOl6s8GNPofdWzWbCkWnkaAm7O2LjkM1H7dMvzkiqdxU02jamGRHLX/ZNMCXHnPcW/sDhiFCBN18qFvy8g6VYb9QtroI09e176s+ZCtiv7hbin2cCTj99iUpnEloZm19lwHyo69u5UMiPMpq0/XKBO8lYhN/gwIDAQAB';
|
|
|
+//私钥
|
|
|
+const privateKey = '';
|
|
|
+
|
|
|
+const GCommoTelecomHeads = {
|
|
|
+ "Accept": "application/json",
|
|
|
+ "Content-Type": "application/json; charset=UTF-8",
|
|
|
+ "Connection": "Keep-Alive",
|
|
|
+ "Accept-Encoding": "gzip",
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+if (!lk.isExecComm) {
|
|
|
+ if (lk.isRequest()) {
|
|
|
+ checkHandleRequest();
|
|
|
+ if (retBody) {
|
|
|
+ lk.done({ body: JSON.stringify(retBody) });
|
|
|
+ } else {
|
|
|
+ lk.done();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ all();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function checkHandleRequest() {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function getSignCount() {
|
|
|
+ let SignCount = lk.getVal(TelecomConstKey.SignCount);
|
|
|
+ let td = lk.formatDate(new Date(), 'yyyyMMdd');
|
|
|
+ if (SignCount) {
|
|
|
+ let [date, num] = SignCount.split('_');
|
|
|
+ if (date == td && num) {
|
|
|
+ return Number(num);
|
|
|
+ } else {
|
|
|
+ lk.setVal(TelecomConstKey.SignCount, `${td}_0`);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ lk.setVal(TelecomConstKey.SignCount, `${td}_0`);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function all() {
|
|
|
+ if (!lk.isEmpty(telecomMobile) || !lk.isEmpty(telecomPassword)) {
|
|
|
+ lk.log('⚠️ 请配置手机号(lkTelecomMobile)和密码(lkTelecomPassword)');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ await doLogin();
|
|
|
+ lk.msg('');
|
|
|
+ lk.done();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//RSA加密
|
|
|
+function encryptRSA(data, key = publicKey) {
|
|
|
+ let JSEncrypt = createJSEncrypt();
|
|
|
+ let encryptor = new JSEncrypt()
|
|
|
+ encryptor.setPublicKey(key)
|
|
|
+ // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
|
|
|
+ return encryptor.encrypt(data)
|
|
|
+}
|
|
|
+
|
|
|
+//rea解密
|
|
|
+function decryptRSA(data, key = privateKey) {
|
|
|
+ let JSEncrypt = createJSEncrypt();
|
|
|
+ let encryptor = new JSEncrypt()
|
|
|
+ encryptor.setPrivateKey(key)
|
|
|
+ // 如果是对象/数组的话,需要先JSON.stringify转换成字符串
|
|
|
+ return encryptor.decrypt(data)
|
|
|
+}
|
|
|
+
|
|
|
+function transPhone(phoneNum) {
|
|
|
+ let result = '';
|
|
|
+ let ArrPhone = phoneNum.toString().split('');
|
|
|
+ for (let i = 0; i < 11; i++) {
|
|
|
+ result = `${result}` + String.fromCharCode(ArrPhone[i].charCodeAt(0) + 2 & 65535);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+async function doLogin(){
|
|
|
+ if (getSignCount() > 10) {
|
|
|
+ lk.appendNotifyInfo('⚠️ 当日登录已超过10次! 请明天再试');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let timestamp = lk.formatDate(new Date(),'yyyyMMddHHmm00')
|
|
|
+ let loginStr = `iPhone 14 16.6.1${telecomMobile}${telecomMobile}${timestamp}${telecomPassword}0$$$0.`;
|
|
|
+ let body = {
|
|
|
+ content: {
|
|
|
+ fieldData: {
|
|
|
+ accountType: '',
|
|
|
+ authentication: telecomPassword,
|
|
|
+ deviceUid: `3${telecomMobile}`,
|
|
|
+ isChinatelecom: '0',
|
|
|
+ loginAuthCipherAsymmertric: encryptRSA(loginStr),
|
|
|
+ loginType: "4",
|
|
|
+ phoneNum: transPhone(telecomMobile),
|
|
|
+ systemVersion: "16.6.1",
|
|
|
+ },
|
|
|
+ attach: "iPhone",
|
|
|
+ },
|
|
|
+ headerInfos: {
|
|
|
+ clientType: '#9.6.1#channel50#iPhone 14 Pro#',
|
|
|
+ code: 'userLoginNormal',
|
|
|
+ shopId: '20002',
|
|
|
+ source: '110003',
|
|
|
+ sourcePassword: 'Sid98s',
|
|
|
+ timestamp: timestamp,
|
|
|
+ userLoginName: telecomMobile,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lk.log('--- request body:');
|
|
|
+ lk.log(JSON.stringify(body));
|
|
|
+
|
|
|
+ let reqData = {
|
|
|
+ url: "https://appgologin.189.cn:9031/login/client/userLoginNormal",
|
|
|
+ headers: GCommoTelecomHeads,
|
|
|
+ body: JSON.stringify(body),
|
|
|
+ };
|
|
|
+ lk.post(reqData, async (error, _response, data) => {
|
|
|
+ let ret;
|
|
|
+ try {
|
|
|
+ if (error) {
|
|
|
+ lk.log(`请求发生错误`);
|
|
|
+ lk.execFail();
|
|
|
+ } else {
|
|
|
+ lk.log('--- response body:');
|
|
|
+ lk.log(data);
|
|
|
+ let info = JSON.parse(data);
|
|
|
+ let loginInfo = info.responseData.data.loginSuccessResult;
|
|
|
+ if (loginInfo && loginInfo.token) {
|
|
|
+ lk.setVal(TelecomConstKey.Token, loginInfo.token);
|
|
|
+ }else{
|
|
|
+ let errMsg = data.responseData.resultDesc || data.headerInfos.reason;
|
|
|
+ if(errMsg){
|
|
|
+ lk.appendNotifyInfo(`⚠️ ${errMsg}`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ lk.log(`请求发生错误`);
|
|
|
+ lk.logErr(e);
|
|
|
+ lk.execFail();
|
|
|
+ } finally {
|
|
|
+ resolve(ret);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|