diff --git a/lib/coupons/qualityShop.js b/lib/coupons/qualityShop.js index 636f2e63..ea84f1ac 100644 --- a/lib/coupons/qualityShop.js +++ b/lib/coupons/qualityShop.js @@ -29,7 +29,7 @@ async function getTemplateData() { async function grabCoupon(cookie) { const tmplData = await getTemplateData(cookie) const payload = await getPayload(tmplData.gundamId, tmplData.appJs) - const res = await fetch.post(`${HOST}/gundam/gundamGrabV3`, payload, { + const res = await fetch.post(`${HOST}/gundam/gundamGrabV4`, payload, { cookie, headers: { Origin: actUrl.origin, diff --git a/lib/coupons/takeAway.js b/lib/coupons/takeAway.js index 79fad1e8..7d8efd5d 100644 --- a/lib/coupons/takeAway.js +++ b/lib/coupons/takeAway.js @@ -30,7 +30,7 @@ async function getTemplateData(cookie) { async function grabCoupon(cookie) { const tmplData = await getTemplateData(cookie) const payload = await getPayload(tmplData.gundamId, tmplData.appJs) - const res = await fetch.post(`${HOST}/gundam/gundamGrabV3`, payload, { + const res = await fetch.post(`${HOST}/gundam/gundamGrabV4`, payload, { cookie, headers: { Origin: actUrl.origin, @@ -41,10 +41,10 @@ async function grabCoupon(cookie) { if (res.code == 0) return res.data if (res.code == 3) { - throw { code: ECODE.AUTH, api: 'gundamGrabV3', msg: res.msg || res.message } + throw { code: ECODE.AUTH, api: 'gundamGrabV4', msg: res.msg || res.message } } - throw { code: ECODE.API, api: 'gundamGrabV3', msg: res.msg || res.message } + throw { code: ECODE.API, api: 'gundamGrabV4', msg: res.msg || res.message } } export default { diff --git a/lib/payload.js b/lib/payload.js index 244d2575..fb9cd42e 100644 --- a/lib/payload.js +++ b/lib/payload.js @@ -1,12 +1,24 @@ import fetch from './fetch.js' +function parseInstanceID(moduleId) { + const regFloat = /(\d+\.\d+)/ + + return moduleId.match(regFloat)?.[1] ?? '' +} + function resolveMetadata(renderInfo, jsText) { try { - for (let id of renderInfo) { - const reg = new RegExp(`red-envelope-${id}.+?(?=isOtherToAPP)`) - const res = jsText.match(reg) + for (const id of renderInfo) { + const regRedMod = new RegExp(`red-envelope-${id}.+?(?=isOtherToAPP)`) + const res = jsText.match(regRedMod) - if (res) return eval(`({id:"${res[0]}})`) + if (res) { + const data = eval(`({moduleId:"${res[0]}})`) + + data.instanceID = data.instanceID ?? parseInstanceID(data.moduleId) + + return data + } } } catch (e) { return null @@ -49,12 +61,16 @@ async function getPayload(gundamId, appJs) { } return { - actualLatitude: '', - actualLongitude: '', + actualLatitude: 0, + actualLongitude: 0, + app: -1, + platform: 3, + couponAllConfigIdOrderString: data.expandCouponIds.keys.join(','), couponConfigIdOrderCommaString: data.priorityCouponIds.keys.join(','), - defaultGrabKey: data.HideRedBagChannelId.defaultKeys.join(',') || '', - grabKey: data.HideRedBagChannelId.keys.join(',') || '', gundamId: gundamId, + instanceId: data.instanceID, + h5Fingerprint: '', + rubikCouponKey: data.cubeToken || '', needTj: data.isStopTJCoupon } } diff --git a/test/payload.js b/test/payload.js index 11684306..543da720 100644 --- a/test/payload.js +++ b/test/payload.js @@ -36,11 +36,10 @@ test('获取 payload', async () => { return getPayload(gundamId, appJs).then((res) => expect(res).toMatchObject({ - actualLatitude: '', - actualLongitude: '', + actualLatitude: 0, + actualLongitude: 0, couponConfigIdOrderCommaString: expect.any(String), - defaultGrabKey: expect.any(String), - grabKey: expect.any(String), + couponAllConfigIdOrderString: expect.any(String), gundamId: gundamId, needTj: expect.any(Boolean) })