shawenguan 1 年之前
父节点
当前提交
32752d1ddb
共有 3 个文件被更改,包括 175 次插入55 次删除
  1. 19 2
      Scripts/pingan/pinganHelper.js
  2. 25 7
      Scripts/pingan/pinganIkea.js
  3. 131 46
      Scripts/pingan/pinganSeckill.js

+ 19 - 2
Scripts/pingan/pinganHelper.js

@@ -150,9 +150,15 @@ function checkHandleRequest() {
             case '/brop/mop/cust/mopsf/uc/auth/lottery/sendCustomerOffer':
                 handleCustomerOffer();
                 break;
+            case '/credit/core/cust/ma/pabank/getSessionStatus':
+                break;
+            case '/core/cust/ma/online/pabank/ma/pm/others/eightPoint8/getMallGoods':
+                break;
             case '/credit/core/cust/ma/online/pabank/ma/pm/others/seckill/show':
                 handleSecKillData();
                 break;
+            case '/credit/core/cust/ma/online/pabank/ma/pm/others/eightPoint8/getPageInfo':
+                break;
             default:
                 if (path.indexOf('/kuaizhan/v2/5K2422/20230925/k84123/index.html') > -1) {
                     handleHomePage();
@@ -289,6 +295,11 @@ function handlePageConfig() {
         return;
     }
     let data = rspData.data;
+    let reqData = getRequestPlainData();
+    let partnerId = reqData.partnerId;
+    let pageId = reqData.pageId;
+    let tokenId = reqData.tokenId;
+    let innerId = reqData.innerId;
     if (data.reShow) {
 
     }
@@ -437,18 +448,24 @@ function handleSecKillData() {
     let actStatus = data.actStatus;
     let dictInfo = data.dictInfo;
     let stockInfo = data.stockInfo;
+    // 更改系统时间
     let nowDateStr = magicJS.formatDate(new Date(), 'yyyy-MM-dd');
     actStatus.systemTime = actStatus.systemTime.replace(nowDateStr, actStatus.seckillDate);
 
+    // 更改抢购结束时间
     let actInfoList = dictInfo.actInfoList;
     for (let i = 0; i < actInfoList.length; ++i) {
         let item = actInfoList[i];
         item.endTime = '23:59:59';
     }
 
-    gRetBody = rspData;
+    // 更改库存是否抢光
+    for (let i = 0; i < stockInfo.length; ++i) {
+        let item = stockInfo[i];
+        item.remain = true;
+    }
 
-    magicJS.logger.info(`######################handleSecKillData: ${actStatus.systemTime}`);
+    gRetBody = rspData;
 }
 
 

+ 25 - 7
Scripts/pingan/pinganIkea.js

@@ -64,12 +64,13 @@ let errCodeStrMap = {
     999999: "stockValidateText"
 };
 
-const gHost = 'b.pingan.com.cn';
 const gTeamId = `5K2422`;
 const gActivityId = `PK084123`;
 const gPageUrlFirstPath = '/kuaizhan/v2';
 const gPageUrlSuffix = `5K2422/20230925/k84123`;
-const gHomePageUrl = `https://b.pingan.com.cn/kuaizhan/v2/${gPageUrlSuffix}/index.html?paesuperbank=%7B%22dLinkId%22%3A%22M0P5EnN0addUoXCs240814104407%22%7D`;
+const gHost = 'rsb.pingan.com.cn';
+const gReferer = `https://b.pingan.com.cn/kuaizhan/v2/${gPageUrlSuffix}/index.html`;
+const gHomePageUrl = `${gReferer}?paesuperbank=%7B%22dLinkId%22%3A%22M0P5EnN0addUoXCs240814104407%22%7D`;
 
 const gWebUserAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.50(0x18003237) NetType/WIFI Language/zh_CN`;
 
@@ -84,7 +85,7 @@ let gTmpRequestSortId = 100 + Math.floor(Math.random() * 100);
 const gCommonHeaders = {
     'osVersion': `16.6.1`,
     'Accept-Encoding': `gzip, deflate, br`,
-    'Host': `rsb.pingan.com.cn`,
+    'Host': `${gHost}`,
     'X-App-Version': `6.23.0`,
     'phoneModel': `iPhone15,2`,
     'Connection': `keep-alive`,
@@ -92,7 +93,7 @@ const gCommonHeaders = {
     'Accept-Language': `zh-Hans-CN;q=1`,
     'nativeVersion': `6.23.0`,
     'User-Agent': `${gAppUserAgent}`,
-    'Referer': `https://b.pingan.com.cn/kuaizhan/v2/5K2422/20230925/k84123/index.html`,
+    'Referer': `${gReferer}`,
     'X-Aladdin-Version': `4.8.77`,
     'bank-mobile-brand': `Apple`,
     'x-o-spanid': `0`,
@@ -105,6 +106,7 @@ const gCommonHeaders = {
 };
 
 let gPageData = {};
+let gPageId = 'PK084123';
 
 // 忽略执行的本地领券状态
 let gIgnoreCouponGotStatus = false;
@@ -118,7 +120,7 @@ async function Main() {
     if (magicJS.isRequest) {
         checkHandleRequest();
     } else {
-        gCommonHeaders[`Cookie`] = magicJS.data.read(PingAnConstKey.Cookie, '');
+        updateHeaders();
         await tryGrabCoupon();
     }
     magicJS.notification.msg('');
@@ -213,11 +215,11 @@ function handleHeaders() {
             magicJS.data.write(PingAnConstKey.x_g_sid, x_g_sid);
         }
         let x_g_vid = headers['x-g-vid'];
-        if (x_g_sid) {
+        if (x_g_vid) {
             magicJS.data.write(PingAnConstKey.x_g_vid, x_g_vid);
         }
         let x_g_rid = headers['x-g-rid'];
-        if (x_g_sid) {
+        if (x_g_rid) {
             magicJS.data.write(PingAnConstKey.x_g_rid, x_g_rid);
         }
         if (headers['X-REQUEST-ID']) {
@@ -616,6 +618,22 @@ function isSameWeek(date1, date2) {
     }
 }
 
+function updateHeaders() {
+    gCommonHeaders[`Cookie`] = magicJS.data.read(PingAnConstKey.Cookie, '');
+    let x_g_sid = magicJS.data.read(PingAnConstKey.x_g_sid, null);
+    if (x_g_sid) {
+        gCommonHeaders[`x-g-sid`] = x_g_sid;
+    }
+    let x_g_vid = magicJS.data.read(PingAnConstKey.x_g_vid, null);
+    if (x_g_vid) {
+        gCommonHeaders['x-g-vid'] = x_g_vid;
+    }
+    let x_g_rid = magicJS.data.read(PingAnConstKey.x_g_rid, null);
+    if (x_g_rid) {
+        gCommonHeaders['x-g-rid'] = x_g_rid;
+    }
+}
+
 async function tryGrabCoupon() {
     gPageData = await checkGetPageData();
     let widgets = gPageData.widgets;

+ 131 - 46
Scripts/pingan/pinganSeckill.js

@@ -29,46 +29,15 @@ const PingAnConstKey = {
     x_g_rid: 'PingAnInnerWeb#x_g_rid',
     PageData: 'PingAnInnerWeb#PageData',
     PageActionId: 'PingAnInnerWeb#PageActionId',
+    SessionToken: 'PingAnInnerWeb#SessionToken',
 };
 
 let gRetBody;
 
-let errCodeStrMap = {
-    900111: "notStart",
-    900112: "notStart",
-    900113: "finish",
-    900109: "exceed",
-    910179: "nonLottery",
-    910204: "nonBindCard",
-    701001: "limitFlow",
-    700116: "nonBindWechat",
-    700118: "nonInterestWechat",
-    960002: "nonDayStock",
-    900537: "nonStock",
-    900139: "nonWhiteList",
-    900320: "riskList",
-    900130: "nonRules",
-    900982: "mutex",
-    950010: "nonDayTimes",
-    950710: "nonWeekTimes",
-    700119: "nonMonthTimes",
-    900144: "nonTimes",
-    950008: "nonDayPrizeTimes",
-    900745: "nonWeekPrizeTimes",
-    950009: "nonMonthPrizeTimes",
-    900143: "nonPrizeTimes",
-    600056: "timesCutDown",
-    780001: "nonBindAliPay",
-    900203: "notSendAble",
-    999999: "stockValidateText"
-};
-
-const gHost = 'b.pingan.com.cn';
-const gTeamId = `5K2422`;
-const gActivityId = `PK084123`;
-const gPageUrlFirstPath = '/kuaizhan/v2';
-const gPageUrlSuffix = `5K2422/20230925/k84123`;
-const gHomePageUrl = `https://b.pingan.com.cn/kuaizhan/v2/${gPageUrlSuffix}/index.html?paesuperbank=%7B%22dLinkId%22%3A%22M0P5EnN0addUoXCs240814104407%22%7D`;
+const gActivityId = `P145623`;
+const gHost = 'rmb.pingan.com.cn';
+const gReferer = `https://b.pingan.com.cn/creditcard/mk8point8/8point8.html`;
+const gHomePageUrl = `${gReferer}?enUmForShare=888888888888&innerid=KDAPP-96SS-HDY-1&activity_FlowId=m_P0P5qA0B23goyp209115&traceid=50030_adbBb7fYuMa#/`;
 
 const gWebUserAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.50(0x18003237) NetType/WIFI Language/zh_CN`;
 
@@ -83,22 +52,24 @@ let gTmpRequestSortId = 100 + Math.floor(Math.random() * 100);
 const gCommonHeaders = {
     'osVersion': `16.6.1`,
     'Accept-Encoding': `gzip, deflate, br`,
-    'Host': `rsb.pingan.com.cn`,
+    'Host': `${gHost}`,
     'X-App-Version': `6.23.0`,
+    'x_hdns': `124.196.28.130`,
     'phoneModel': `iPhone15,2`,
     'Connection': `keep-alive`,
     'bank-mobile-model': `iPhone15,2`,
-    'Accept-Language': `zh-Hans-CN;q=1`,
+    'Accept-Language': `zh-Hans;q=1`,
     'nativeVersion': `6.23.0`,
     'User-Agent': `${gAppUserAgent}`,
-    'Referer': `https://b.pingan.com.cn/kuaizhan/v2/5K2422/20230925/k84123/index.html`,
+    'Referer': `${gReferer}`,
     'X-Aladdin-Version': `4.8.77`,
-    'bank-mobile-brand': `Apple`,
+    'Content-Type': `application/x-www-form-urlencoded;charset=utf-8`,
     'x-o-spanid': `0`,
-    'Accept': `*/*`,
-    'x-g-sid': `iSb07mg4hmSUYbUg5izmW0`,
+    'bank-mobile-brand': `Apple`,
+    'Accept': `application/json`,
+    'x-g-sid': `jVOFX1jVgK6eAY3qU3Pvtg`,
     'x-g-vid': `53mWJHzK00401M5Vv+uR3w`,
-    'x-g-rid': `J3/I3jF+hI6xiREInsHZlg5dn320120r`,
+    'x-g-rid': `vdOcDov7jYO+dymIjQZAVM1a990Ve1250`,
     'X-REQUEST-ID': `${gDeviceId}-${gTmpRequsetTimeStamp}-${gTmpRequestSortId}`,
     'Cookie': ``
 };
@@ -108,7 +79,10 @@ let gPageData = {};
 // 忽略执行的本地领券状态
 let gIgnoreCouponGotStatus = false;
 // 忽略查询的领券状态
-let gIgnoreActivityStatus = false;;
+let gIgnoreActivityStatus = false;
+
+let gAppKey = 'A110493';
+let gPageId = 'P145623';
 
 async function Main() {
     if (magicJS.isStrictRequest) {
@@ -117,8 +91,9 @@ async function Main() {
     if (magicJS.isRequest) {
         checkHandleRequest();
     } else {
-        gCommonHeaders[`Cookie`] = magicJS.data.read(PingAnConstKey.Cookie, '');
-        await tryGrabCoupon();
+        updateHeaders();
+        magicJS.data.write(PingAnConstKey.SessionToken, '');
+        await trySecKill();
     }
     magicJS.notification.msg('');
     if (gRetBody) {
@@ -130,6 +105,116 @@ async function Main() {
     }
 }
 
+function checkHandleRequest() {
+}
+
+function updateHeaders() {
+    gCommonHeaders[`Cookie`] = magicJS.data.read(PingAnConstKey.Cookie, '');
+    let x_g_sid = magicJS.data.read(PingAnConstKey.x_g_sid, null);
+    if (x_g_sid) {
+        gCommonHeaders[`x-g-sid`] = x_g_sid;
+    }
+    let x_g_vid = magicJS.data.read(PingAnConstKey.x_g_vid, null);
+    if (x_g_vid) {
+        gCommonHeaders['x-g-vid'] = x_g_vid;
+    }
+    let x_g_rid = magicJS.data.read(PingAnConstKey.x_g_rid, null);
+    if (x_g_rid) {
+        gCommonHeaders['x-g-rid'] = x_g_rid;
+    }
+}
+
+function getToken() {
+    let currentDate = new Date();
+
+    // 获取 pageID
+    let pageID = gPageId;
+
+    // 处理 pageID
+    if (pageID) {
+        pageID = pageID.split("-").pop(); // 获取最后一个部分
+    }
+
+    // 获取当前日期和时间的各个组成部分
+    let year = currentDate.getFullYear().toString().substr(2); // 取年份的后两位
+    let month = (currentDate.getMonth() + 1).toString().padStart(2, '0'); // 月份,确保为两位
+    let day = currentDate.getDate().toString().padStart(2, '0'); // 日期,确保为两位
+    let hours = currentDate.getHours().toString().padStart(2, '0'); // 小时,确保为两位
+    let minutes = currentDate.getMinutes().toString().padStart(2, '0'); // 分钟,确保为两位
+    let seconds = currentDate.getSeconds().toString().padStart(2, '0'); // 秒,确保为两位
+    let milliseconds = currentDate.getMilliseconds().toString().padStart(3, '0'); // 毫秒,确保为三位
+    let randomPart = Math.random().toString().substr(2, 2); // 生成两位随机数
+
+    // 拼接并返回最终结果
+    return pageID + year + month + day + hours + minutes + seconds + milliseconds + randomPart;
+}
+
+function getSessionToken() {
+    let token = magicJS.data.read(PingAnConstKey.SessionToken, null);
+    if (!token || token.length == 0) {
+        token = getToken();
+        magicJS.data.write(PingAnConstKey.SessionToken, token);
+    }
+    return token;
+}
+
+function getLastToken(token) {
+    return token.substr(-5);
+}
+
+async function trySecKill() {
+    let execCount = 10;
+    let tipsText = '';
+    for (let i = 0; i < execCount; i++) {
+        let result = await doSecKill();
+        if (result && result.code == '000000') {
+            tipsText = `${result.body}`;
+            break;
+        } else {
+            tipsText = `秒杀领取失败!`;
+        }
+    }
+    magicJS.notification.appendNotifyInfo(tipsText);
+}
+
+async function doSecKill() {
+    let token = getSessionToken();
+    let lastToken = getLastToken(token);
+    let webTagInfoArr = [
+        'module=8point8',
+        `token=${token}`,
+        `lastToken=${lastToken}`,
+    ];
+    let reqData = {
+        serviceVersion: '1.0',
+        osType: '1',
+        channel: '1',
+        version: '1.5.0',
+        random: Math.random(),
+        webTagInfo: encodeURIComponent(webTagInfoArr.join(',')),
+        'addWebTagInfoList[]': encodeURIComponent('module=8point8'),
+    }
+    let url = `https://rmb.pingan.com.cn/credit/core/cust/ma/online/pabank/ma/pm/others/seckill/doKill`;
+    let headers = gCommonHeaders;
+    let options = {
+        url: url,
+        headers: headers,
+        body: `${magicJS.objToQueryStr(reqData)}`,
+    };
+    let result = await magicJS.http.post(options).then(response => {
+        try {
+            let rspData = response.body;
+            magicJS.logger.info(`rspData=${JSON.stringify(rspData)}`);
+            return rspData;
+        } catch (e) {
+            magicJS.logger.error(e);
+        }
+    }).catch(err => {
+        const msg = `请求商品秒杀异常\n${JSON.stringify(err)}`;
+        magicJS.logger.error(msg);
+    });
+    return result;
+}
 
 Main().catch((e) => magicJS.logger.log(`-\n ${e}`)).finally(() => magicJS.done());