mirror of
https://github.com/qitoqito/psyduck.git
synced 2026-01-12 21:20:43 +08:00
507 lines
27 KiB
JavaScript
507 lines
27 KiB
JavaScript
// const Template = require('../../template');
|
|
import {Template} from "../../template.js";
|
|
import vm from 'vm'
|
|
|
|
export class Main extends Template {
|
|
constructor() {
|
|
super()
|
|
this.profile = {
|
|
title: "京东京享红包",
|
|
help: 't3',
|
|
verify: 1,
|
|
sync: 1,
|
|
prompt: {
|
|
shareUrl: '京享红包分享链接',
|
|
unionShareId: '可选项,自定义unionShareId,请确保该id是基于shareUrl生成'
|
|
},
|
|
readme: ["风控较严,算法经常变动,锁佣需谨慎,如订单一直异常,请停用此脚本", "默认获取前3个账号分享码"],
|
|
crontab: 1,
|
|
interval: 8000
|
|
}
|
|
}
|
|
|
|
async prepare() {
|
|
try {
|
|
let js = await this.curl('https://storage.360buyimg.com/webcontainer/js_security_v3_lite_0.1.5.js')
|
|
const script = new vm.Script(`
|
|
var window = {
|
|
document: {
|
|
cookie: ""
|
|
}
|
|
}
|
|
var document = window.document
|
|
var navigator = {};
|
|
window.navigator = navigator;
|
|
setTimeout=function(){};
|
|
var Element=function(){}
|
|
${js};
|
|
new ParamsSignLite();`);
|
|
const result = script.runInNewContext();
|
|
if (this.algo.version != result._version) {
|
|
this.msg("当前H5ST版本可能不是最新")
|
|
}
|
|
else if (this.algo.algos.MD5('1').toString("") != result._algos.MD5('1').toString()) {
|
|
this.msg("当前H5ST版本可能不是最新")
|
|
}
|
|
else {
|
|
// await this.field('shareUrl')
|
|
let shareUrl = this.random(await this.getField(
|
|
'shareUrl'
|
|
))
|
|
if (!shareUrl) {
|
|
return
|
|
}
|
|
let {ua, h5st} = await this.uuaa()
|
|
let cookie = ''
|
|
let jda = await this.curl({
|
|
url: shareUrl,
|
|
response: `all`,
|
|
headers: {
|
|
'user-agent': ua,
|
|
referer: null
|
|
},
|
|
cookie
|
|
}
|
|
)
|
|
let jdaUrl = this.match([/hrl\s*='([^\']+)'/, /hrl\s*="([^\"]+)"/], jda.content)
|
|
cookie = `${cookie};${jda.cookie}`
|
|
let scheme = await this.curl({
|
|
'url': jdaUrl + `&h5st=${h5st}`,
|
|
maxRedirects: 0,
|
|
scheme: 'http',
|
|
'response': `all`,
|
|
cookie,
|
|
ua,
|
|
referer: shareUrl
|
|
}
|
|
)
|
|
cookie = `${cookie};${scheme.cookie}`
|
|
let linkUrl = scheme.location
|
|
let actId = this.match(/active\/(\w+)/, linkUrl)
|
|
let unionActId = this.match(/unionActId=(\d+)/, linkUrl)
|
|
let d = this.match(/com\/(\w+)/, shareUrl)
|
|
let unionShareId = []
|
|
let client = ua.includes('Android') ? 'android' : 'apple'
|
|
if (this.profile.unionShareId) {
|
|
for (let shareId of this.profile.unionShareId.split("|")) {
|
|
unionShareId.push(shareId)
|
|
}
|
|
}
|
|
else {
|
|
for (let user of this.help) {
|
|
let shareUnion = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=shareUnionCoupon&appid=u_hongbao&_=1716943673297&loginType=2&body={"unionActId":"${unionActId}","actId":"${actId}","platform":5,"unionShareId":"","d":"${d}","supportPic":2}&client=${client}&clientVersion=1.1.0&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi&openudid=`,
|
|
algo: {
|
|
appId: 'c10dc',
|
|
store: cookie,
|
|
},
|
|
referer: linkUrl,
|
|
ua,
|
|
user
|
|
}
|
|
)
|
|
if (this.haskey(shareUnion, 'data.shareUrl')) {
|
|
let shareId = this.match(/s=(\w+)/, shareUnion.data.shareUrl)
|
|
this.log("获取账户", user, shareId)
|
|
unionShareId.push(shareId)
|
|
}
|
|
}
|
|
}
|
|
this.shareCode({
|
|
shareUrl,
|
|
d,
|
|
actId,
|
|
unionActId,
|
|
unionShareId
|
|
})
|
|
}
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
async main(p) {
|
|
let user = p.data.user
|
|
let context = p.context;
|
|
let algo = context.algo || {}
|
|
let gift = function(getCoupons) {
|
|
for (let i of this.haskey(getCoupons, 'data.couponList')) {
|
|
if (i.type == 1) {
|
|
p.msg(`获得[红包]🧧${i.discount}元`)
|
|
}
|
|
else if (i.type == 3) {
|
|
p.log(`获得[优惠券]🎟️满${i.quota}减${i.discount}`)
|
|
}
|
|
else if (i.type == 6) {
|
|
p.log(`获得[打折券]🎫满${i.quota}打${i.discount * 10}折`)
|
|
}
|
|
else {
|
|
p.log(`获得[未知]🎉${i.quota || ''} ${i.discount}`)
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
var {ua, h5st} = await this.uuaa()
|
|
var client = ua.includes('Android') ? 'android' : 'apple'
|
|
var store, actId, unionActId, d, linkUrl
|
|
let getCode = await this.shareId(context)
|
|
for (let code of getCode) {
|
|
store = ''
|
|
let url = `https://u.jd.com/${code.d}?s=${code.unionShareId}`
|
|
let jda = await this.curl({
|
|
url,
|
|
"response": "all",
|
|
"redirect": "follow",
|
|
"headers": {"user-agent": ua, "referer": ""},
|
|
user
|
|
})
|
|
store = jda.cookie
|
|
let jdaUrl = this.match([/hrl\s*='([^\']+)'/, /hrl\s*="([^\"]+)"/], jda.content)
|
|
let scheme = await this.curl({
|
|
'url': jdaUrl + `&h5st=${h5st}`,
|
|
maxRedirects: 0,
|
|
scheme: 'http',
|
|
'response': `all`,
|
|
user,
|
|
ua,
|
|
referer: url,
|
|
algo: {
|
|
store
|
|
}
|
|
}
|
|
)
|
|
linkUrl = scheme.location
|
|
let query = (this.query(linkUrl, '&', 'split'))
|
|
actId = this.match(/active\/(\w+)/, linkUrl)
|
|
var {
|
|
unionActId, d, utm_source, utm_medium, utm_campaign, utm_term
|
|
} = query
|
|
let __jdv = `123|${utm_source}|${utm_campaign}|${utm_medium}|${utm_term}|${new Date().getTime()}`
|
|
store = `${store};${scheme.cookie};__jdv=${encodeURIComponent(__jdv)}`
|
|
await this.curl({
|
|
url: linkUrl,
|
|
referer: url,
|
|
ua,
|
|
user,
|
|
algo: {store}
|
|
})
|
|
let getCoupons = await this.curl({
|
|
url: `https://api.m.jd.com/api`,
|
|
form: `functionId=getCoupons&appid=u_hongbao&loginType=2&body={"platform":5,"unionActId":"${unionActId}","actId":"${actId}","d":"${d}","unionShareId":"${code.unionShareId}","type":1,"qdPageId":"MO-J2011-1","mdClickId":"jxhongbao_ck","actType":1}&client=${client}&clientVersion=1.1.0&stk=appid,body,client,clientVersion,functionId`,
|
|
user,
|
|
algo: {
|
|
appId: 'c822a',
|
|
store,
|
|
token: false,
|
|
expire: {
|
|
"code": -2,
|
|
}
|
|
},
|
|
ua,
|
|
referer: linkUrl
|
|
}
|
|
)
|
|
let msg = this.haskey(getCoupons, 'msg')
|
|
if (msg.includes('领取成功')) {
|
|
gift.call(this, getCoupons)
|
|
}
|
|
else {
|
|
p.log("领取失败:", msg)
|
|
if (msg == '达到领取上限') {
|
|
break
|
|
}
|
|
if (msg == '活动未开始') {
|
|
this.jump = 1
|
|
return
|
|
}
|
|
if (msg.includes("用户未登录")) {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
let qry = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=queryFullGroupInfoMap&appid=u_hongbao&_=1716946027013&loginType=2&body={"actId":"${actId}","unionActId":"${unionActId}","platform":5,"d":"${d}","taskType":1,"prstate":0}&client=${client}&clientVersion=15.6.10&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi&openudid=&aid=&oaid=`,
|
|
user,
|
|
algo: {appId: '7b74b', store}
|
|
}
|
|
)
|
|
for (let i of this.haskey(qry, 'data.dayGroupData.groupInfo')) {
|
|
if (i.info) {
|
|
if (i.status == 1) {
|
|
p.log("正在运行:", i.info)
|
|
if (i.info.includes("点击") && i.taskTargetUrl) {
|
|
let query = this.query(i.taskTargetUrl, '&', 'split')
|
|
let goods = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=unionSearchRecommend&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"funName":"getSkuByMaterialId","page":{"pageNo":1,"pageSize":20},"param":{"materialId":12354,"sortName":null,"sortType":"","keyword":"","category1":null,"batchId":"","requestScene":1,"source":20200,"clientPageId":"union_activity_265222","packageName":""}}`,
|
|
user,
|
|
algo: {
|
|
appId: '66248',
|
|
store
|
|
}
|
|
}
|
|
)
|
|
let goodList = this.haskey(goods, 'result.goodsSynopsisList') || []
|
|
for (let z of goodList.slice(0, 6)) {
|
|
let couponUrl = this.haskey(z, `purchasePriceInfo.unionCouponList.0.couponLink`)
|
|
if (couponUrl) {
|
|
p.log("正在浏览:", z.skuName)
|
|
let free = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=getUnionFreeCoupon&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"couponUrl":"${couponUrl}","recommendCouponUrl":["${couponUrl}"],"skuPrice":${z.purchasePriceInfo.thresholdPrice},"pageId":${query.union_page_id},"pageType":5,"source":20221}`,
|
|
user,
|
|
algo: {
|
|
appI: '66248',
|
|
store
|
|
}
|
|
}
|
|
)
|
|
await this.wait(1000)
|
|
}
|
|
}
|
|
let complete = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=completeUnionTask&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"unionActTask":"${query.unionActTask}"}`,
|
|
// 'form':``,
|
|
user,
|
|
algo: {
|
|
appId: '66248', store
|
|
}
|
|
}
|
|
)
|
|
p.log(complete)
|
|
}
|
|
else if (this.haskey(i, ['adInfo.target_url', 'taskTargetUrl'])) {
|
|
let apStart = await this.curl({
|
|
'url': `https://api.m.jd.com/api`,
|
|
'form': `functionId=apStartTiming&appid=u_hongbao&_=1716946560092&loginType=2&body={"timerId":"${i.componentId}","uniqueId":"${i.taskId}","jumpUrl":"${encodeURIComponent(this.haskey(i, ['adInfo.target_url', 'taskTargetUrl']))}","jumpType":1}&client=${client}&clientVersion=15.6.10&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi&openudid=`,
|
|
user,
|
|
algo: {
|
|
appId: '0d977'
|
|
}
|
|
}
|
|
)
|
|
p.log(this.haskey(apStart, 'errMsg') || apStart)
|
|
if (this.match(/\d+秒/, i.info)) {
|
|
let ts = (this.match(/(\d+)秒/, i.info))
|
|
try {
|
|
let z = await this.curl({
|
|
url: 'https://api.m.jd.com/client.action',
|
|
form: `functionId=apResetTiming&body={"timerId":"${i.componentId}","uniqueId":"${i.taskId}"}&build=169498&client=${client}&clientVersion=13.2.8&d_brand=apple&d_model=iPhone13%2C3&ef=1`,
|
|
user,
|
|
algo: {
|
|
sign: true
|
|
}
|
|
})
|
|
p.log("等待", ts)
|
|
await this.wait(parseInt(ts) * 1000)
|
|
let y = await this.curl({
|
|
url: 'https://api.m.jd.com/client.action',
|
|
form: `functionId=apCheckTimingEnd&body={"timerId":"${i.componentId}","uniqueId":"${i.taskId}"}&build=169498&client=${client}&clientVersion=13.2.8&d_brand=apple&d_model=iPhone13%2C3&ef=1`,
|
|
user,
|
|
algo: {
|
|
sign: true
|
|
}
|
|
})
|
|
} catch (e) {
|
|
p.log("等待", ts)
|
|
await this.wait(parseInt(ts) * 1000)
|
|
let apsDoTask = await this.curl({
|
|
'url': `https://api.m.jd.com/api`,
|
|
'form': `functionId=apCheckTimingEnd&appid=activities_platform&_=1716946560092&loginType=2&body={"timerId":"${i.componentId}","uniqueId":"${i.taskId}"}&build=169498&client=${client}&clientVersion=13.2.8&d_brand=apple&d_model=iPhone13%2C3&ef=1`,
|
|
user,
|
|
algo: {
|
|
appId: '0d977'
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
await this.wait(1000)
|
|
}
|
|
else if (i.info.includes("分享")) {
|
|
let shareUnion = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=shareUnionCoupon&appid=u_hongbao&_=1716943673297&loginType=2&body={"unionActId":"${unionActId}","actId":"${actId}","platform":5,"unionShareId":"","d":"${d}","supportPic":2,"taskId":"${i.taskId}"}&client=${client}&clientVersion=15.6.10&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi&openudid=`,
|
|
user,
|
|
algo: {
|
|
appId: 'c10dc',
|
|
store
|
|
}
|
|
}
|
|
)
|
|
// p.log(shareUnion)/
|
|
let share = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=unionShare&appid=u_hongbao&_=1716949639549&loginType=2&body={"funName":"share","param":{"shareReq":[{"shareType":5,"plainUrl":"${this.haskey(shareUnion, 'data.shareUrl')}","command":1}]}}&client=${client}&clientVersion=15.6.10&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi`,
|
|
// 'form':``,
|
|
user,
|
|
algo: {
|
|
appId: '18813',
|
|
store
|
|
}
|
|
}
|
|
)
|
|
let getCoupons = await this.curl({
|
|
url: `https://api.m.jd.com/api`,
|
|
form: `functionId=getCoupons&appid=u_hongbao&_=1716912812082&loginType=2&body={"actId":"${actId}","unionActId":"${unionActId}","platform":5,"d":"${d}","unionShareId":"","type":8,"qdPageId":"MO-J2011-1","mdClickId":"jxhongbao_ck","actType":1,"taskId":"${i.taskId}","agreeState":0}&client=${client}&clientVersion=1.1.0&stk=appid,body,client,clientVersion,functionId`,
|
|
user,
|
|
algo: {
|
|
appId: 'c822a',
|
|
store,
|
|
token: false,
|
|
expire: {
|
|
"code": -2,
|
|
}
|
|
},
|
|
ua,
|
|
referer: linkUrl
|
|
}
|
|
)
|
|
let getCoupons2 = await this.curl({
|
|
url: `https://api.m.jd.com/api`,
|
|
form: `functionId=getCoupons&appid=u_hongbao&_=1716912812082&loginType=2&body={"actId":"${actId}","unionActId":"${unionActId}","platform":5,"d":"${d}","unionShareId":"","type":8,"qdPageId":"MO-J2011-1","mdClickId":"jxhongbao_ck","actType":1,"taskId":"${i.taskId}","agreeState":1}&client=${client}&clientVersion=1.1.0&stk=appid,body,client,clientVersion,functionId`,
|
|
user,
|
|
algo: {
|
|
appId: 'c822a',
|
|
store,
|
|
token: false,
|
|
expire: {
|
|
"code": -2,
|
|
}
|
|
},
|
|
ua,
|
|
referer: linkUrl
|
|
}
|
|
)
|
|
gift.call(this, getCoupons2)
|
|
}
|
|
else if (i.info.includes("点击")) {
|
|
let unionActTask = this.match(/unionActTask=([^\&]+)/, i.taskTargetUrl)
|
|
this.set({
|
|
referer: i.taskTargetUrl
|
|
})
|
|
let rec = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=unionSearchRecommend&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"funName":"getSkuByMaterialId","page":{"pageNo":1,"pageSize":20},"param":{"materialId":12354,"sortName":null,"sortType":"","keyword":"","category1":null,"batchId":"","requestScene":1,"source":20200,"clientPageId":"union_activity_265222","packageName":""}}`,
|
|
// 'form':``,
|
|
user,
|
|
algo: {
|
|
appId: '66248', store
|
|
}
|
|
}
|
|
)
|
|
let ik = 0
|
|
for (let i of this.random(this.haskey(rec, 'result.goodsSynopsisList') || [], 123)) {
|
|
if (this.haskey(i, 'purchasePriceInfo.unionCouponList.0.couponLink')) {
|
|
p.log("正在浏览:", i.skuName)
|
|
let getUnionActivity = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=getUnionActivity&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"id":"265222","qdPageId":"MO-J2011-1","mdClickId":"union_activity_paycoupon_expo","skuList":"","skuListSign":"","platform":3,"clientPageId":"union_activity","parentActivityId":"","parentCouponConfigId":""}`,
|
|
// 'form':``,
|
|
user,
|
|
}
|
|
)
|
|
let free = await this.curl({
|
|
url: `https://api.m.jd.com/api?functionId=getUnionFreeCoupon&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"couponUrl":"${i.purchasePriceInfo.unionCouponList[0].couponLink}","recommendCouponUrl":["${i.purchasePriceInfo.unionCouponList[0].couponLink}"],"skuPrice":${i.wlPrice},"pageId":265222,"pageType":5,"source":20221}`,
|
|
user,
|
|
algo: {
|
|
appId: '66248'
|
|
}
|
|
}
|
|
)
|
|
if (this.haskey(free, 'data')) {
|
|
ik++
|
|
}
|
|
if (ik>=5) {
|
|
break
|
|
}
|
|
await this.wait(1000)
|
|
}
|
|
}
|
|
let comp = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=completeUnionTask&appid=u_activity_h5&loginType=2&client=${client}&clientVersion=&body={"unionActTask":"${(unionActTask)}"}`,
|
|
// 'form':``,
|
|
user,
|
|
algo: {
|
|
appId: '66248'
|
|
}
|
|
}
|
|
)
|
|
p.log(comp)
|
|
}
|
|
}
|
|
else {
|
|
p.log("任务完成:", i.info)
|
|
}
|
|
}
|
|
}
|
|
qry = await this.curl({
|
|
'url': `https://api.m.jd.com/api?functionId=queryFullGroupInfoMap&appid=u_hongbao&_=1716946027013&loginType=2&body={"actId":"${actId}","unionActId":"${unionActId}","platform":5,"d":"${d}","taskType":1,"prstate":0}&client=${client}&clientVersion=15.6.10&osVersion=15.1.1&screen=390*844&d_brand=iPhone&d_model=iPhone&lang=zh-CN&networkType=wifi&openudid=&aid=&oaid=`,
|
|
user,
|
|
algo: {appId: '7b74b'}
|
|
}
|
|
)
|
|
let getCoupons = await this.curl({
|
|
url: `https://api.m.jd.com/api`,
|
|
form: `functionId=getCoupons&appid=u_hongbao&_=1716912812082&loginType=2&body={"actId":"${actId}","unionActId":"${unionActId}","platform":5,"d":"${d}","unionShareId":"","type":3,"qdPageId":"MO-J2011-1","mdClickId":"jxhongbao_ck","actType":1}&client=${client}&clientVersion=1.1.0&stk=appid,body,client,clientVersion,functionId`,
|
|
user,
|
|
algo: {
|
|
appId: 'c822a',
|
|
store,
|
|
token: false,
|
|
expire: {
|
|
"code": -2,
|
|
}
|
|
},
|
|
ua,
|
|
referer: linkUrl
|
|
}
|
|
)
|
|
gift.call(this, getCoupons)
|
|
if (this.haskey(getCoupons, 'data.couponList.0.discount')) {
|
|
p.info.work = true
|
|
}
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
async uuaa() {
|
|
let type = this.random(['weixin', 'wechat'])
|
|
let ua = this.userAgents()[type]
|
|
return {
|
|
ua,
|
|
h5st: this.algo.hashCode(ua)
|
|
}
|
|
}
|
|
|
|
async shareId(context) {
|
|
let code = []
|
|
for (let unionShareId of context.unionShareId) {
|
|
code.push({
|
|
d: context.d,
|
|
actId: context.actId,
|
|
unionActId: context.unionActId,
|
|
unionShareId
|
|
})
|
|
}
|
|
try {
|
|
if (this.syncStorage) {
|
|
let syncStorage = this.syncStorage
|
|
let range = syncStorage.range || 1
|
|
let rand = this.rand(1, range)
|
|
if (rand == 1) {
|
|
for (let unionShareId of syncStorage.unionShareId) {
|
|
code.push({
|
|
d: syncStorage.d,
|
|
actId: syncStorage.actId,
|
|
unionActId: syncStorage.unionActId,
|
|
unionShareId
|
|
})
|
|
}
|
|
let c1 = code.slice(0, 2)
|
|
let c2 = code.slice(2)
|
|
let c3 = this.random(c2, c2.length)[0]
|
|
code = [...c1, ...[c3]]
|
|
}
|
|
}
|
|
} catch (e) {
|
|
}
|
|
return code
|
|
}
|
|
}
|
|
|
|
|