shawenguan 1 年間 前
コミット
76733a1815
1 ファイル変更48 行追加24 行削除
  1. 48 24
      Scripts/smzdm/smzdmHelper.js

+ 48 - 24
Scripts/smzdm/smzdmHelper.js

@@ -34,11 +34,12 @@ let pcUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
 let webUserAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1';
 
 let appVersion = '10.7.7';
-// appVersion = '10.4.1';
 let iosUserAgent = `smzdm ${appVersion} rv:146.5 (iPhone 14 Pro; iOS 16.6.1; zh_CN)/iphone_smzdmapp/${appVersion}`;
 let androidUserAgent = `smzdm_android_V${appVersion} rv:936 (MT2110;Android13;zh)smzdmapp`;
 let mixUserAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/smzdm ${appVersion} rv:146.5 (iPhone 14 Pro; iOS 16.6.1; zh_CN)/iphone_smzdmapp/${appVersion}/wkwebview/jsbv_1.0.0`;
 
+const smzdmSignKey = 'apr1$AwP!wRRT$gJ/q.X24poeBInlUJC';
+const smzdmSK = 'ierkM0OZZbsuBKLoAgQ6OJneLMXBQXmzX+LXkNTuKch8Ui2jGlahuFyWIzBiDq/L';
 
 async function Main() {
     if (magicJS.isRequest) {
@@ -80,7 +81,7 @@ magicJS.http.interceptors.request.use((config) => {
     if (!!currentCookie) {
         config.headers.Cookie = currentCookie;
         // 尝试将Cookie中的iOS相关信息去除
-        // config.headers.Cookie = config.headers.Cookie.replace("iphone", "android").replace("iPhone", "Android").replace("apk_partner_name=appstore", "apk_partner_name=android");
+        // config.headers.Cookie = getFixAndroidCookie();
 
         // magicJS.logger.info(`${config.headers.Cookie}`);
     }
@@ -157,11 +158,16 @@ async function getWebOrAppCookie() {
     }
 }
 
+function getFixAndroidCookie() {
+    return currentCookie.replace("iphone", "android")
+        .replace("iPhone", "Android")
+        .replace("apk_partner_name=appstore", "apk_partner_name=android");
+}
+
 function robotToken() {
     return new Promise(async (resolve, reject) => {
         const ts = Date.now();
-        const smzdmKey = 'apr1$AwP!wRRT$gJ/q.X24poeBInlUJC';
-        const preHash = `f=android&time=${ts}&v=${appVersion}&weixin=1&key=${smzdmKey}`;
+        const preHash = `f=android&time=${ts}&v=${appVersion}&weixin=1&key=${smzdmSignKey}`;
         const md5 = createWMd5();
         const sign = md5.hex_md5_32Upper(preHash);
         const data = {
@@ -171,7 +177,7 @@ function robotToken() {
             "time": ts,
             "sign": sign
         };
-        let androidCookie = currentCookie.replace("iphone", "android").replace("iPhone", "Android").replace("apk_partner_name=appstore", "apk_partner_name=android");
+        let androidCookie = getFixAndroidCookie();
         await magicJS.http.post({
                 url: "https://user-api.smzdm.com/robot/token",
                 headers: {
@@ -186,39 +192,51 @@ function robotToken() {
                 body: magicJS.objToQueryStr(data),
             }).then(resp => {
                 let obj = resp.body;
-                magicJS.logger.info(`robotTokenRet=${obj}`);
-                if (typeof obj === "string") {
+                if (typeof obj === 'string') {
                     obj = JSON.parse(obj);
                 }
-                resolve(obj);
+                if(obj.error_code == '0' && obj.data && obj.data.token){
+                    magicJS.logger.info("Android端获取token成功");
+                    resolve(obj.data.token);
+                }else{
+                    magicJS.logger.warning(`Android端获取token失败,接口响应异常:${JSON.stringify(obj)}`);
+                    resolve(null);
+                }
             }).catch((err) => {
-               magicJS.logger.error(`获取robotToken异常,${err}`);
-               reject(err);
+                magicJS.logger.error(`Android端获取token异常,${err}`);
+                reject(err);
             });
     });
 }
 
-function androidSignin(username) {
+function androidSignin(token) {
     return new Promise(async (resolve, reject) => {
-        const smzdmToken = currentCookie.slice(5);
-        const smzdmKey = 'apr1$AwP!wRRT$gJ/q.X24poeBInlUJC';
-        const outcome = Math.round(new Date().getTime() / 1000).toString();
-        const rawData = `f=android&sk=${username}&time=${outcome}000&token=${smzdmToken}&v=9.9.12&weixin=1&key=${smzdmKey}`;
-        let md5 = createWMd5();
-        let sign = md5.hex_md5_32Upper(rawData);
-        let androidCookie = currentCookie.replace("iphone", "android").replace("iPhone", "Android").replace("apk_partner_name=appstore", "apk_partner_name=android");
+        const ts = Date.now();
+        const preHash = `f=android&sk=${smzdmSK}&time=${ts}&token=${token}&v=${appVersion}&weixin=1&key=${smzdmSignKey}`;
+        const md5 = createWMd5();
+        const sign = md5.hex_md5_32Upper(preHash);
+        const data = {
+            "f": "android",
+            "v": appVersion,
+            "sk": smzdmSK,
+            "weixin": 1,
+            "time": ts,
+            "token": token,
+            "sign": sign
+        };
+        let androidCookie = getFixAndroidCookie();
         await magicJS.http.post({
             url: "https://user-api.smzdm.com/checkin",
             headers: {
-                'User-Agent': androidUserAgent,
                 'Accept-Language': 'zh-Hans-CN;q=1',
                 'Accept-Encoding': 'gzip, deflate, br',
                 'Connection': 'Keep-Alive',
                 'request_key': randomStr(18),
                 'Content-Type': 'application/x-www-form-urlencoded',
                 'Cookie': androidCookie,
+                'User-Agent': androidUserAgent,
             },
-            body: `sk=${username}&sign=${sign}&weixin=1&v=9.9.12&captcha=&f=android&token=${encodeURIComponent(smzdmToken)}&touchstone_event=&time=${outcome}000`,
+            body: magicJS.objToQueryStr(data, true),
         }).then(resp => {
             let obj = resp.body;
             if (typeof obj === "string") {
@@ -231,10 +249,13 @@ function androidSignin(username) {
                 magicJS.logger.info("Android端重复签到");
                 resolve([true, "Android端重复签到"]);
             } else {
-                magicJS.logger.warning(`Android端签到出现异常,接口返回数据不合法:${JSON.stringify(obj)}`);
+                magicJS.logger.warning(`Android端签到出现异常,接口响应异常:${JSON.stringify(obj)}`);
                 reject("Android端签到异常");
             }
-        })
+        }).catch((err) => {
+            magicJS.logger.error(`Android端签到异常,${err}`);
+            reject(err);
+        });
     });
 }
 
@@ -534,8 +555,11 @@ async function multiUsersSignIn() {
                 //     .catch((err) => {
                 //         subTitle = `Android端签到异常: ${err}`;
                 //     });
-                let tokenData = await robotToken();
-                magicJS.logger.info(`tokenData=${JSON.stringify(tokenData)}`);
+                let token = await robotToken();
+                magicJS.logger.info(`tokenData=${JSON.stringify(token)}`);
+                if(token){
+                    await androidSignin(token);
+                }
             }
 
             // // 日常任务