shawenguan 2 years ago
parent
commit
02493ac3f8
1 changed files with 170 additions and 0 deletions
  1. 170 0
      Scripts/telecom/telecom.js

+ 170 - 0
Scripts/telecom/telecom.js

@@ -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);
+        }
+    });
+}