|
|
@@ -2,6 +2,8 @@
|
|
|
平安银行宜家礼品卡优惠券
|
|
|
https://b.pingan.com.cn/kuaizhan/v2/5K2422/20230925/k84123/index.html?paesuperbank=%7B%22dLinkId%22%3A%22M0P5EnN0addUoXCs240814104407%22%7D
|
|
|
|
|
|
+pahkebank://
|
|
|
+
|
|
|
[Script]
|
|
|
# > 平安银行宜家礼品卡优惠券
|
|
|
^https?:\/\/b\.pingan\.com\.cn url script-request-body https://git.jojo21.top/shawenguan/Quantumult-X/raw/master/Scripts/pingan/pinganIkea.js
|
|
|
@@ -21,6 +23,10 @@ const magicJS = MagicJS(scriptName, "INFO");
|
|
|
const PingAnIKEAConstKey = {
|
|
|
// 基础数据
|
|
|
Cookie: 'PingAnIKEACookie',
|
|
|
+ DeviceId: 'PingAnIKEADeviceId',
|
|
|
+ x_g_sid: 'PingAnIKEA#x_g_sid',
|
|
|
+ x_g_vid: 'PingAnIKEA#x_g_vid',
|
|
|
+ x_g_rid: 'PingAnIKEA#x_g_rid',
|
|
|
};
|
|
|
|
|
|
let gRetBody;
|
|
|
@@ -54,29 +60,44 @@ let errCodeStrMap = {
|
|
|
900203: "notSendAble",
|
|
|
999999: "stockValidateText"
|
|
|
};
|
|
|
+
|
|
|
const gHost = 'b.pingan.com.cn';
|
|
|
const gHomePageUrl = `https://b.pingan.com.cn/kuaizhan/v2/5K2422/20230925/k84123/index.html?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`;
|
|
|
|
|
|
-let gDeviceId = 'AUUID_918d439ffcef935c2fd84d3a3e593b6523c916fc';
|
|
|
+let gDeviceId = magicJS.data.read(PingAnIKEAConstKey.DeviceId, 'AUUID_918d439ffcef935c2fd84d3a3e593b6523c916fc');
|
|
|
|
|
|
const gAppUserAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS 16_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 iphone 14 pro AladdinHybrid/4.8.77 (PAEBank 6.23.0) AladdinBridge/3.0.0 subContracting/AppStore deviceId/${gDeviceId} UnionPay/1.0 PABANK deviceType/1 networkState/WIFI KiwiBridge/1.0.0 device-dpr/3 device-dr/852*393 AppStyle/BZ bz-navbarHeight/309 dzTab-navbarHeight/327 pageActionId/1F908E50`;
|
|
|
|
|
|
+let gTmpRequsetTimeStamp = Date.now();
|
|
|
+let gTmpRequestSortId = 100;
|
|
|
+
|
|
|
const gCommonHeaders = {
|
|
|
- 'Cookie': ``,
|
|
|
- 'Sec-Fetch-Mode': `navigate`,
|
|
|
- 'Connection': `keep-alive`,
|
|
|
- 'Accept': `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`,
|
|
|
+ 'osVersion': `16.6.1`,
|
|
|
'Accept-Encoding': `gzip, deflate, br`,
|
|
|
- 'Host': `b.pingan.com.cn`,
|
|
|
+ 'Host': `rsb.pingan.com.cn`,
|
|
|
+ 'X-App-Version': `6.23.0`,
|
|
|
+ 'phoneModel': `iPhone15,2`,
|
|
|
+ 'Connection': `keep-alive`,
|
|
|
+ 'bank-mobile-model': `iPhone15,2`,
|
|
|
+ 'Accept-Language': `zh-Hans-CN;q=1`,
|
|
|
+ 'nativeVersion': `6.23.0`,
|
|
|
'User-Agent': `${gAppUserAgent}`,
|
|
|
- 'Sec-Fetch-Site': `none`,
|
|
|
- 'Accept-Language': `zh-CN,zh-Hans;q=0.9`,
|
|
|
- 'Sec-Fetch-Dest': `document`,
|
|
|
- // 'If-Modified-Since': `Thu, 18 Jul 2024 11:10:01 GMT`
|
|
|
+ 'Referer': `https://b.pingan.com.cn/kuaizhan/v2/5K2422/20230925/k84123/index.html`,
|
|
|
+ 'X-Aladdin-Version': `4.8.77`,
|
|
|
+ 'bank-mobile-brand': `Apple`,
|
|
|
+ 'x-o-spanid': `0`,
|
|
|
+ 'Accept': `*/*`,
|
|
|
+ 'x-g-sid': `iSb07mg4hmSUYbUg5izmW0`,
|
|
|
+ 'x-g-vid': `53mWJHzK00401M5Vv+uR3w`,
|
|
|
+ 'x-g-rid': `J3/I3jF+hI6xiREInsHZlg5dn320120r`,
|
|
|
+ 'X-REQUEST-ID': `${gDeviceId}-${gTmpRequsetTimeStamp}-${gTmpRequestSortId}`,
|
|
|
+ 'Cookie': ``
|
|
|
};
|
|
|
|
|
|
+let gPageData = {};
|
|
|
+
|
|
|
async function Main() {
|
|
|
if (magicJS.isStrictRequest) {
|
|
|
magicJS.checkRecordRequestBody();
|
|
|
@@ -86,7 +107,7 @@ async function Main() {
|
|
|
magicJS.notification.msg('');
|
|
|
} else {
|
|
|
gCommonHeaders[`Cookie`] = magicJS.data.read(PingAnIKEAConstKey.Cookie, '');
|
|
|
- let pageData = await getPageData();
|
|
|
+ await tryGrabCoupon();
|
|
|
}
|
|
|
if (gRetBody) {
|
|
|
magicJS.done({
|
|
|
@@ -161,9 +182,32 @@ function getQueryPlainData() {
|
|
|
return params;
|
|
|
}
|
|
|
|
|
|
+function getXRequestId() {
|
|
|
+ gTmpRequestSortId++;
|
|
|
+ return `${gDeviceId}-${gTmpRequsetTimeStamp}-${gTmpRequestSortId}`
|
|
|
+}
|
|
|
+
|
|
|
function handleHeaders() {
|
|
|
if ($request && $request.method != 'OPTIONS') {
|
|
|
- let newCookieStr = $request.headers['Cookie'];
|
|
|
+ let headers = $request.headers;
|
|
|
+ let x_g_sid = headers['x-g-sid'];
|
|
|
+ if (x_g_sid) {
|
|
|
+ magicJS.data.write(PingAnIKEAConstKey.x_g_sid, x_g_sid);
|
|
|
+ }
|
|
|
+ let x_g_vid = headers['x-g-vid'];
|
|
|
+ if (x_g_sid) {
|
|
|
+ magicJS.data.write(PingAnIKEAConstKey.x_g_vid, x_g_vid);
|
|
|
+ }
|
|
|
+ let x_g_rid = headers['x-g-rid'];
|
|
|
+ if (x_g_sid) {
|
|
|
+ magicJS.data.write(PingAnIKEAConstKey.x_g_rid, x_g_rid);
|
|
|
+ }
|
|
|
+ if (headers['X-REQUEST-ID']) {
|
|
|
+ let tmpArr = headers['X-REQUEST-ID'].split('-');
|
|
|
+ magicJS.data.write(PingAnIKEAConstKey.DeviceId, tmpArr[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ let newCookieStr = headers['Cookie'];
|
|
|
if (newCookieStr) {
|
|
|
let oldCookieStr = magicJS.data.read(PingAnIKEAConstKey.Cookie, null);
|
|
|
magicJS.logger.info(`oldCookieStr=${oldCookieStr}`);
|
|
|
@@ -274,6 +318,87 @@ async function getPageData() {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+async function tryGrabCoupon() {
|
|
|
+ gPageData = await getPageData();
|
|
|
+ let widgets = gPageData.widgets;
|
|
|
+ // 天天88
|
|
|
+ let path88 = ['pwm-kuaizhan-section', 'pwm-mkt-offer'];
|
|
|
+ // 五折限量购
|
|
|
+ let path55 = ['pwm-kuaizhan-simple-rule', 'pwm-kuaizhan-section', 'pwm-mkt-offer'];
|
|
|
+ // 9.25折限量购
|
|
|
+ let path925 = ['pwm-kuaizhan-section-split', 'pwm-kuaizhan-section', 'pwm-mkt-offer'];
|
|
|
+
|
|
|
+ let items925 = seekWidgets(widgets, path925);
|
|
|
+ for (let i = 0; i < items925.length; i++) {
|
|
|
+ const item = items925[i];
|
|
|
+ const config = item.config;
|
|
|
+ await queryCustomerActivityStatus(config.activityCode, config.activityValue);
|
|
|
+ }
|
|
|
+ let items88 = seekWidgets(widgets, path88);
|
|
|
+ for (let i = 0; i < items88.length; i++) {
|
|
|
+ const item = items88[i];
|
|
|
+ const config = item.config;
|
|
|
+ await queryCustomerActivityStatus(config.activityCode, config.activityValue);
|
|
|
+ }
|
|
|
+ let items55 = seekWidgets(widgets, path55);
|
|
|
+ for (let i = 0; i < items55.length; i++) {
|
|
|
+ const item = items55[i];
|
|
|
+ const config = item.config;
|
|
|
+ await queryCustomerActivityStatus(config.activityCode, config.activityValue);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function seekWidgets(widgets, namePaths, layer = 0) {
|
|
|
+ let retLst = [];
|
|
|
+ let name = namePaths[layer];
|
|
|
+ if (namePaths.length == layer + 1) {
|
|
|
+ for (let i = 0; i < widgets.length; i++) {
|
|
|
+ const widget = widgets[i];
|
|
|
+ if (widget.name == name) {
|
|
|
+ retLst.push(widget);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (let i = 0; i < widgets.length; i++) {
|
|
|
+ const widget = widgets[i];
|
|
|
+ if (widget.name == name) {
|
|
|
+ retLst = retLst.concat(seekWidgets(widget.widgets, namePaths, layer + 1));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return retLst;
|
|
|
+}
|
|
|
+
|
|
|
+async function queryCustomerActivityStatus(activityCode, activityValue, channelSource = 'KOUDAI', taskProVal = '') {
|
|
|
+ let reqData = {
|
|
|
+ activityCode: activityCode,
|
|
|
+ activityValue: activityValue,
|
|
|
+ channelSource: channelSource,
|
|
|
+ taskProVal: taskProVal,
|
|
|
+ };
|
|
|
+ let url = `https://rsb.pingan.com.cn/brop/mop/cust/mopsf/uc/auth/lottery/queryCustomerActivityStatus?${magicJS.objToQueryStr(reqData)}`;
|
|
|
+ let headers = gCommonHeaders;
|
|
|
+ let options = {
|
|
|
+ url: url,
|
|
|
+ headers: headers,
|
|
|
+ body: ``,
|
|
|
+ };
|
|
|
+
|
|
|
+ let result = await magicJS.http.get(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());
|
|
|
|
|
|
//---SyncByPyScript---MagicJS3-start
|