mirror of
https://github.com/qitoqito/psyduck.git
synced 2026-01-12 12:40:44 +08:00
京东金融天天领京豆
This commit is contained in:
parent
b4dcea96a5
commit
1a5b9987c4
210
parse/jd/jd_task_chuxu.js
Normal file
210
parse/jd/jd_task_chuxu.js
Normal file
@ -0,0 +1,210 @@
|
||||
import {Template} from '../../template.js'
|
||||
import jsdom from "jsdom";
|
||||
|
||||
export class Main extends Template {
|
||||
constructor() {
|
||||
super()
|
||||
this.profile = {
|
||||
title: '京东金融天天领京豆',
|
||||
sync: 1,
|
||||
verify: 1,
|
||||
crontab: 3,
|
||||
headers: {
|
||||
referer: 'https://content.jr.jd.com/'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async prepare() {
|
||||
let ua = this.userAgents().jd
|
||||
let resourceLoader = new jsdom.ResourceLoader({
|
||||
userAgent: ua,
|
||||
"referer": "https://fc.jr.jd.com/",
|
||||
});
|
||||
let virtualConsole = new jsdom.VirtualConsole();
|
||||
this.jsConfig = {
|
||||
"url": "https://ms.jr.jd.com/",
|
||||
"referer": "https://fc.jr.jd.com/",
|
||||
"userAgent": ua,
|
||||
runScripts: "dangerously",
|
||||
resources: resourceLoader,
|
||||
includeNodeLocations: true,
|
||||
storageQuota: 10000000,
|
||||
pretendToBeVisual: true,
|
||||
virtualConsole
|
||||
}
|
||||
let JSDOM = jsdom.JSDOM
|
||||
let a = new JSDOM(`<body><script src="https://jrsecstatic.jdpay.com/jr-sec-dev-static/aar2-2.1.0.min.js"></script>`, this.jsConfig)
|
||||
await this.wait(2000)
|
||||
if (a.window.AAR2) {
|
||||
a.window.AAR2.init();
|
||||
this.crypto = {
|
||||
aar: new a.window.AAR2(),
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.log("jsdom没有获取到aar2")
|
||||
this.jump = 1
|
||||
}
|
||||
}
|
||||
|
||||
async main(p) {
|
||||
let user = p.data.user;
|
||||
let context = p.context;
|
||||
const aar = this.crypto.aar
|
||||
let nonce = aar.nonce()
|
||||
let signature = aar.sign(this.dumps({
|
||||
"channelCode": context.channelCode,
|
||||
}), nonce)
|
||||
let params = {
|
||||
"channelCode": context.channelCode,
|
||||
nonce,
|
||||
signature,
|
||||
}
|
||||
let query = await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw/generic/mission/h5/m/queryMission`,
|
||||
json: {
|
||||
"reqData": this.dumps(params),
|
||||
},
|
||||
user,
|
||||
algo: {
|
||||
expire: {
|
||||
"resultCode": 3,
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
let data = this.haskey(query, 'resultData.data')
|
||||
let status = 1
|
||||
if (data) {
|
||||
for (let i of data) {
|
||||
if (i.status == 2) {
|
||||
p.log("任务已完成:", i.name)
|
||||
}
|
||||
else {
|
||||
let doLink = i.doLink
|
||||
let pp = this.query(doLink, '&', 1)
|
||||
let T = aar.nonce()
|
||||
status = 0
|
||||
let batchGetTransLink = await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw2/generic/jrResource/h5/m/batchGetTransLink`,
|
||||
json: {
|
||||
"reqData": this.dumps({
|
||||
"parentUrlParam": i.doLink.split("?")[1],
|
||||
"linkList": []
|
||||
}),
|
||||
},
|
||||
user
|
||||
}
|
||||
)
|
||||
let signData = this.dumps(
|
||||
{"missionId": i.missionId, "PIN": p.info.pin}
|
||||
)
|
||||
let nonce4 = aar.nonce()
|
||||
let signature4 = aar.sign(signData, nonce4)
|
||||
let queryBrowsMissionExt = await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw2/generic/Mission/h5/m/queryBrowsMissionExt`,
|
||||
json: {
|
||||
"missionId": i.missionId,
|
||||
"channelCode": pp.channelCode,
|
||||
"nonce": nonce4,
|
||||
"signData": signData,
|
||||
"signature": signature4,
|
||||
"version": "2.2.1"
|
||||
},
|
||||
user,
|
||||
}
|
||||
)
|
||||
if (this.haskey(queryBrowsMissionExt, 'resultData.data.extendMap')) {
|
||||
p.log("正在浏览")
|
||||
let map = queryBrowsMissionExt.resultData.data.extendMap
|
||||
p.log(`等待${map.readTime}s中...`)
|
||||
await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw/generic/mission/h5/m/queryMissionReceiveAfterStatus`,
|
||||
json: {
|
||||
"reqData": this.dumps({
|
||||
missionId: i.missionId.toString(),
|
||||
"channelCode": pp.channelCode,
|
||||
})
|
||||
},
|
||||
user
|
||||
}
|
||||
)
|
||||
await this.wait(parseInt(map.readTime) * 1000)
|
||||
let n = JSON.stringify({
|
||||
missionId: i.missionId.toString(),
|
||||
readTime: map.readTime.toString(),
|
||||
PIN: p.info.pin
|
||||
})
|
||||
let signature2 = aar.sign(n, T)
|
||||
let finish = await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw/generic/mission/h5/m/finishReadMission`,
|
||||
json: {
|
||||
"reqData": this.dumps({
|
||||
missionId: i.missionId.toString(),
|
||||
readTime: map.readTime.toString(),
|
||||
nonce: T,
|
||||
signature: aar.sign(n, T),
|
||||
version: "2.2.1",
|
||||
"channelCode": pp.channelCode,
|
||||
})
|
||||
},
|
||||
user
|
||||
}
|
||||
)
|
||||
if (this.haskey(finish, 'resultData.code', '0000')) {
|
||||
let reward = await this.curl({
|
||||
'url': `https://ms.jr.jd.com/gw/generic/mission/h5/m/awardMission`,
|
||||
json: {
|
||||
"reqData": this.dumps({
|
||||
"channelCode": pp.channelCode,
|
||||
"missionId": i.missionId,
|
||||
"signature": aar.sign(this.dumps({"missionId": i.missionId,}, T)),
|
||||
"nonce": T
|
||||
}),
|
||||
},
|
||||
user,
|
||||
}
|
||||
)
|
||||
if (this.haskey(reward, 'resultData.success')) {
|
||||
if (i.awards[0].awardName == '京豆') {
|
||||
p.draw(i.awards[0].awardRealNum)
|
||||
}
|
||||
else {
|
||||
p.msg(`${i.awards[0].awardName}: ${i.awards[0].awardRealNum}`)
|
||||
}
|
||||
status = 1
|
||||
}
|
||||
else {
|
||||
p.log(reward)
|
||||
}
|
||||
await this.wait(2000)
|
||||
}
|
||||
else {
|
||||
p.log("浏览失败...")
|
||||
}
|
||||
}
|
||||
else {
|
||||
p.err("浏览失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
status = 0
|
||||
p.err("没有获取到数据")
|
||||
}
|
||||
if (status) {
|
||||
p.info.work = true
|
||||
}
|
||||
if (p.prize.length) {
|
||||
let sum = p.prize.reduce((v, k) => {
|
||||
v += parseInt(k)
|
||||
return v
|
||||
}, 0)
|
||||
p.msg(`获得京豆: ${sum}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ export class Main extends Template {
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.print("有可用券可以保价", p.user)
|
||||
this.msg("有可用券可以保价")
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user