更新于 07-20 03:55

This commit is contained in:
root
2021-07-20 03:55:32 -04:00
parent 8314962a75
commit 6e2dbf35a6
14 changed files with 2226 additions and 295 deletions

View File

@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
}
};
exports.__esModule = true;
exports.getFarmShareCode = exports.getBeanShareCode = exports.TotalBean = void 0;
exports.getRandomNumberByRange = exports.wait = exports.requireConfig = exports.getFarmShareCode = exports.getBeanShareCode = exports.TotalBean = void 0;
var axios_1 = require("axios");
var USER_AGENTS = [
"jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36",
@ -79,6 +79,7 @@ var USER_AGENTS = [
function getRandomNumberByRange(start, end) {
return Math.floor(Math.random() * (end - start) + start);
}
exports.getRandomNumberByRange = getRandomNumberByRange;
var USER_AGENT = USER_AGENTS[getRandomNumberByRange(0, USER_AGENTS.length)];
function getBeanShareCode(cookie) {
var _a, _b;
@ -172,4 +173,27 @@ function TotalBean(cookie) {
});
}
exports.TotalBean = TotalBean;
function requireConfig() {
var cookiesArr = [];
return new Promise(function (resolve) {
console.log('开始获取配置文件\n');
var jdCookieNode = require('./jdCookie.js');
Object.keys(jdCookieNode).forEach(function (item) {
if (jdCookieNode[item]) {
cookiesArr.push(jdCookieNode[item]);
}
});
console.log("\u5171" + cookiesArr.length + "\u4E2A\u4EAC\u4E1C\u8D26\u53F7\n");
resolve(cookiesArr);
});
}
exports.requireConfig = requireConfig;
function wait(t) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve();
}, t);
});
}
exports.wait = wait;
exports["default"] = USER_AGENT;

View File

@ -23,7 +23,7 @@ const notify = $.isNode() ? require('./sendNotify') : '';
//Node.js用户请在jdCookie.js处填写京东ck;
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
//IOS等用户直接用NobyDa的jd cookie
let cookiesArr = [], cookie = '', message = '', linkId = 'DA4SkG7NXupA9sksI00L0g', fflLinkId = 'YhCkrVusBVa_O2K-7xE6hA';
let cookiesArr = [], cookie = '', message = '', linkId = 'yMVR-_QKRd2Mq27xguJG-w', fflLinkId = 'YhCkrVusBVa_O2K-7xE6hA';
let GetCash = 0.3;
const JD_API_HOST = 'https://api.m.jd.com/api';
if ($.isNode()) {
@ -38,10 +38,9 @@ if ($.isNode()) {
...$.toObj($.getdata("CookiesJD") || "[]").map((item) => item.cookie)].filter((item) => !!item);
}
const len = cookiesArr.length;
if ($.isNode() && process.env.BIG_WINNER_CASH) {
GetCash = process.env.BIG_WINNER_CASH;
}
GetCash = process.env.BIG_WINNER_CASH;
}
!(async () => {
$.redPacketId = []
if (!cookiesArr[0]) {

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,7 @@
import {format} from 'date-fns';
import axios from 'axios';
import USER_AGENT, {TotalBean, getBeanShareCode, getFarmShareCode} from './TS_USER_AGENTS';
import USER_AGENT, {requireConfig, TotalBean, getBeanShareCode, getFarmShareCode, getRandomNumberByRange, wait} from './TS_USER_AGENTS';
import {Md5} from 'ts-md5'
import * as dotenv from 'dotenv';
@ -20,7 +20,7 @@
const notify = require('./sendNotify')
dotenv.config()
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
let cookie: string = '', cookiesArr: string[] = [], res: any = '', shareCodes: string[] = [];
let cookie: string = '', res: any = '', shareCodes: string[] = [], isCollector: Boolean = false;
let HELP_HW: string = process.env.HELP_HW ? process.env.HELP_HW : "true";
console.log('帮助HelloWorld:', HELP_HW)
@ -56,13 +56,15 @@
ddwCount?: number,
__t?: number,
strBT?: string,
dwCurStageEndCnt?: number
dwCurStageEndCnt?: number,
dwRewardType?: number,
dwRubbishId?: number
}
let UserName: string, index: number;
!(async () => {
await requestAlgo();
await requireConfig();
let cookiesArr: any = await requireConfig();
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
@ -105,7 +107,8 @@
for (let stage of res.stagelist) {
if (res.dwCurProgress >= stage.dwCurStageEndCnt && stage.dwIsAward === 0) {
let awardRes: any = await api('user/ComposeGameAward', '__t,dwCurStageEndCnt,strZone', {__t: Date.now(), dwCurStageEndCnt: stage.dwCurStageEndCnt})
console.log('珍珠领奖:', awardRes.ddwCoin)
console.log(awardRes)
console.log('珍珠领奖:', awardRes.ddwCoin, awardRes.addMonety)
await wait(3000)
}
}
@ -153,6 +156,11 @@
if (res.StoryInfo.StoryList[0].Collector) {
console.log('收藏家出现')
// TODO 背包满了再卖给收破烂的
// res = await api('story/CollectorOper', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,strStoryId,dwType,ddwTriggerDay', {strStoryId: res.StoryInfo.StoryList[0].strStoryId, dwType: '2', ddwTriggerDay: res.StoryInfo.StoryList[0].ddwTriggerDay})
// console.log(res)
// await wait(1000)
// isCollector = true
}
}
@ -160,7 +168,6 @@
res = await api('story/querystorageroom', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
let bags: number[] = []
for (let s of res.Data.Office) {
console.log(s.dwCount, s.dwType)
bags.push(s.dwType)
bags.push(s.dwCount)
}
@ -174,14 +181,21 @@
}
if (bags.length !== 0) {
res = await api('story/sellgoods', '_cfd_t,bizCode,dwEnv,dwSceneId,ptag,source,strTypeCnt,strZone',
{dwSceneId: '1', strTypeCnt: strTypeCnt})
{dwSceneId: isCollector ? '2' : '1', strTypeCnt: strTypeCnt})
console.log('卖贝壳收入:', res.Data.ddwCoin, res.Data.ddwMoney)
}
// 垃圾🚮
res = await api('story/QueryRubbishInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
if (res.Data.StoryInfo.StoryList.length !== 0) {
await api('story/RubbishOper', '')
console.log('有垃圾')
await api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwType,ptag,source,strZone', {dwType: '1', dwRewardType: 0})
await wait(1000)
for (let j = 1; j < 9; j++) {
res = await api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwRubbishId,dwType,ptag,source,strZone', {dwType: '2', dwRewardType: 0, dwRubbishId: j})
console.log('垃圾分类:', res.Data.RubbishGame.AllRubbish.ddwCoin)
await wait(1500)
}
}
// 任务➡️
@ -361,7 +375,6 @@
resolve()
})
.catch((e) => {
console.log(e)
reject('访问助力池出错')
})
})
@ -427,20 +440,6 @@
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
}
function requireConfig() {
return new Promise<void>(resolve => {
console.log('开始获取配置文件\n')
const jdCookieNode = require('./jdCookie.js');
Object.keys(jdCookieNode).forEach((item) => {
if (jdCookieNode[item]) {
cookiesArr.push(jdCookieNode[item])
}
})
console.log(`${cookiesArr.length}个京东账号\n`)
resolve()
})
}
function generateFp() {
let e = "0123456789";
let a = 13;
@ -455,16 +454,4 @@
let r = url.split('?')[1].match(reg);
if (r != null) return unescape(r[2]);
return '';
}
function wait(t: number) {
return new Promise<void>(resolve => {
setTimeout(() => {
resolve()
}, t)
})
}
function getRandomNumberByRange(start: number, end: number): number {
return Math.floor(Math.random() * (end - start) + start)
}

290
jd_cfd_cashOut.ts Executable file
View File

@ -0,0 +1,290 @@
/**
* 提现金额可选0.1 0.5 1 2 10
* export CFD_CASHOUT_MONEY=0.1
*
* 解锁提现方式二选一1.升级1个建筑优先 2.完成日常任务
* 自动模拟提现token不需要抓包
*/
import {format} from 'date-fns';
import axios from 'axios';
import {Md5} from 'ts-md5'
import USER_AGENT, {requireConfig, TotalBean, wait} from './TS_USER_AGENTS';
import * as dotenv from 'dotenv';
const CryptoJS = require('crypto-js')
const notify = require('./sendNotify')
dotenv.config()
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
let cookie: string = '', res: any = '', UserName: string, index: number;
let money: number = process.env.CFD_CASHOUT_MONEY ? parseFloat(process.env.CFD_CASHOUT_MONEY) * 100 : 10
interface Params {
ddwMoney?: number,
ddwPaperMoney?: number,
strPgtimestamp?: string,
strPgUUNum?: string,
strPhoneID?: string,
strBuildIndex?: string,
dwType?: string,
dwFirst?: number,
__t?: number,
strBT?: string,
dwIdentityType?: number,
strBussKey?: string,
strMyShareId?: string,
ddwCount?: number,
taskId?: number,
ddwConsumeCoin?: number,
dwIsFree?: number,
ddwCostCoin?: number,
}
!(async () => {
await requestAlgo();
let cookiesArr: any = await requireConfig();
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
index = i + 1;
let {isLogin, nickName}: any = await TotalBean(cookie)
if (!isLogin) {
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}${nickName || UserName}`)
continue
}
console.log(`\n开始【京东账号${index}${nickName || UserName}\n`);
let finish: Boolean = false;
for (let b of ['food', 'fun', 'shop', 'sea']) {
res = await api('user/GetBuildInfo', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', {strBuildIndex: b})
if (res.dwCanLvlUp === 1) {
res = await api('user/BuildLvlUp', '_cfd_t,bizCode,ddwCostCoin,dwEnv,ptag,source,strBuildIndex,strZone', {ddwCostCoin: res.ddwNextLvlCostCoin, strBuildIndex: b})
if (res.iRet === 0) {
console.log(`升级成功:`, res) // ddwSendRichValue
finish = true
break
}
}
}
if (!finish) {
for (let j = 0; j < 2; j++) {
for (let b of ['food', 'fun', 'shop', 'sea']) {
res = await api('user/CollectCoin', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', {strBuildIndex: b, dwType: '1'})
console.log(`${b}收金币:`, res.ddwCoin)
await wait(500)
}
}
while (1) {
res = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')
console.log('今日热气球:', res.dwTodaySpeedPeople)
if (res.dwTodaySpeedPeople >= 20)
break
await wait(300)
}
res = await api('user/ComposeGameState', '', {dwFirst: 1})
let strDT: string = res.strDT, strMyShareId: string = res.strMyShareId
res = await api('user/RealTmReport', '', {dwIdentityType: 0, strBussKey: 'composegame', strMyShareId: strMyShareId, ddwCount: 5})
await wait(1000)
res = await api('user/ComposeGameAddProcess', '__t,strBT,strZone', {__t: Date.now(), strBT: strDT})
res = await api('user/EmployTourGuideInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
if (!res.TourGuideList) {
console.log('手动雇佣4个试用导游')
} else {
for (let e of res.TourGuideList) {
if (e.strBuildIndex !== 'food' && e.ddwRemainTm === 0) {
let employ: any = await api('user/EmployTourGuide', '_cfd_t,bizCode,ddwConsumeCoin,dwEnv,dwIsFree,ptag,source,strBuildIndex,strZone',
{ddwConsumeCoin: e.ddwCostCoin, dwIsFree: 0, strBuildIndex: e.strBuildIndex})
if (employ.iRet === 0)
console.log(`雇佣${e.strBuildIndex}导游成功`)
await wait(300)
}
}
}
// 任务➡️
let tasks: any
tasks = await api('story/GetActTask', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
for (let t of tasks.Data.TaskList) {
if (t.dwCompleteNum === t.dwTargetNum && t.dwAwardStatus === 2) {
res = await api('Award', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', {taskId: t.ddwTaskId})
if (res.ret === 0) {
console.log(`${t.strTaskName}领奖成功:`, res.data.prizeInfo)
}
await wait(300)
}
}
res = await api('story/ActTaskAward', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
console.log('100财富任务完成', res)
}
// 提现
console.log('开始提现:', format(new Date(), 'hh:mm:ss:SSS'))
let token: any = await getJxToken(cookie)
console.log(token)
res = await api('user/CashOutQuali',
'_cfd_t,bizCode,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone',
{strPgUUNum: token.strPgUUNum, strPgtimestamp: token.strPgtimestamp, strPhoneID: token.strPhoneID})
console.log('资格:', res)
await wait(2000)
res = await api('user/CashOut',
'_cfd_t,bizCode,ddwMoney,ddwPaperMoney,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone',
{ddwMoney: money, ddwPaperMoney: money * 10, strPgUUNum: token.strPgUUNum, strPgtimestamp: token.strPgtimestamp, strPhoneID: token.strPhoneID})
console.log('提现:', res)
}
})()
function getJxToken(cookie: string) {
function generateStr(input: number) {
let src = 'abcdefghijklmnopqrstuvwxyz1234567890';
let res = '';
for (let i = 0; i < input; i++) {
res += src[Math.floor(src.length * Math.random())];
}
return res;
}
return new Promise(resolve => {
let phoneId = generateStr(40);
let timestamp = Date.now().toString();
if (!cookie['match'](/pt_pin=([^; ]+)(?=;?)/)) {
console.log('此账号cookie填写不规范,你的pt_pin=xxx后面没分号(;)\n');
resolve({});
}
let nickname = cookie.match(/pt_pin=([^;]*)/)![1];
let jstoken = Md5.hashStr('' + decodeURIComponent(nickname) + timestamp + phoneId + 'tPOamqCuk9NLgVPAljUyIHcPRmKlVxDy');
resolve({
'strPgtimestamp': timestamp,
'strPhoneID': phoneId,
'strPgUUNum': jstoken
})
});
}
function api(fn: string, stk: string, params: Params = {}) {
return new Promise(async resolve => {
let url = `https://m.jingxi.com/jxbfd/${fn}?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=138631.26.55&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
if (['GetUserTaskStatusList', 'Award', 'DoTask'].includes(fn)) {
console.log('api2')
url = `https://m.jingxi.com/newtasksys/newtasksys_front/${fn}?strZone=jxbfd&bizCode=jxbfddch&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=138631.26.55&_stk=${encodeURIComponent(stk)}&_ste=1&_=${Date.now()}&sceneval=2`
}
if (Object.keys(params).length !== 0) {
let key: (keyof Params)
for (key in params) {
if (params.hasOwnProperty(key))
url += `&${key}=${params[key]}`
}
}
url += '&h5st=' + decrypt(stk, url)
let {data} = await axios.get(url, {
headers: {
Cookie: cookie,
Referer: "https://st.jingxi.com/fortune_island/index.html?ptag=138631.26.55",
Host: "m.jingxi.com",
"User-Agent": `jdpingou`,
}
})
resolve(data)
})
}
function speedUp(stk: string) {
return new Promise(async (resolve, reject) => {
let url: string = `https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&strBuildIndex=food&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
url += '&h5st=' + decrypt(stk, url)
try {
let {data} = await axios.get(url, {
headers: {
'Host': 'm.jingxi.com',
'Referer': 'https://st.jingxi.com/',
'User-Agent': USER_AGENT,
'Cookie': cookie
}
})
resolve(data)
} catch (e) {
reject(502)
}
})
}
async function requestAlgo() {
fingerprint = await generateFp();
return new Promise<void>(async resolve => {
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
"version": "1.0",
"fp": fingerprint,
"appId": appId,
"timestamp": Date.now(),
"platform": "web",
"expandParams": ""
}, {
"headers": {
'Authority': 'cactus.jd.com',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Accept': 'application/json',
'User-Agent': USER_AGENT,
'Content-Type': 'application/json',
'Origin': 'https://st.jingxi.com',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://st.jingxi.com/',
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
},
})
if (data['status'] === 200) {
token = data.data.result.tk;
console.log('token:', token)
let enCryptMethodJDString = data.data.result.algo;
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
} else {
console.log(`fp: ${fingerprint}`)
console.log('request_algo 签名参数API请求失败:')
}
resolve()
})
}
function decrypt(stk: string, url: string) {
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
let hash1: string;
if (fingerprint && token && enCryptMethodJD) {
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
} else {
const random = '5gkjB6SpmC9s';
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
fingerprint = 9686767825751161;
// $.fingerprint = 7811850938414161;
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
}
let st: string = '';
stk.split(',').map((item, index) => {
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
})
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
}
function generateFp() {
let e = "0123456789";
let a = 13;
let i = '';
for (; a--;)
i += e[Math.random() * e.length | 0];
return (i + Date.now()).slice(0, 16)
}
function getQueryString(url: string, name: string) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
let r = url.split('?')[1].match(reg);
if (r != null) return unescape(r[2]);
return '';
}

193
jd_cfd_loop.ts Executable file
View File

@ -0,0 +1,193 @@
/**
* 财富岛热气球挂后台
* export CFD_LOOP_DELAY=20000 // 捡气球间隔时间,单位毫秒
*/
import {format} from 'date-fns'
import axios from 'axios'
import USER_AGENT, {TotalBean, requireConfig, wait, getRandomNumberByRange} from './TS_USER_AGENTS'
import * as dotenv from 'dotenv'
const CryptoJS = require('crypto-js')
const crypto = require('crypto')
const fs = require('fs')
const notify = require('./sendNotify')
dotenv.config()
let appId: number = 10028, fingerprint: string | number, token: string, enCryptMethodJD: any;
let cookie: string = '', res: any = '';
process.env.CFD_LOOP_DELAY ? console.log('设置延迟:', parseInt(process.env.CFD_LOOP_DELAY)) : console.log('设置延迟:10000~25000随机')
let UserName: string, index: number;
!(async () => {
await requestAlgo();
let cookiesArr: any = await requireConfig();
let filename: string = __filename.split('/').pop()!
let stream = fs.createReadStream(filename);
let fsHash = crypto.createHash('md5');
stream.on('data', (d: any) => {
fsHash.update(d);
});
stream.on('end', () => {
let md5 = fsHash.digest('hex');
console.log(`${filename}的MD5是:`, md5);
if (filename.indexOf('JDHelloWorld_jd_scripts_') > -1) {
filename = filename.replace('JDHelloWorld_jd_scripts_', '')
}
axios.get('https://api.sharecode.ga/api/md5?filename=' + filename)
.then(res => {
console.log('local: ', md5)
console.log('remote:', res.data)
if (md5 !== res.data) {
notify.sendNotify("Warning", `${filename}\nMD5校验失败你的脚本疑似被篡改`)
} else {
console.log('MD5校验通过')
}
}).catch(() => {
})
});
while (1) {
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
index = i + 1;
let {isLogin, nickName}: any = await TotalBean(cookie)
if (!isLogin) {
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}${nickName || UserName}`)
continue
}
console.log(`\n开始【京东账号${index}${nickName || UserName}\n`);
try {
res = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')
if (res.iRet !== 0) {
console.log('手动建造4个房子')
continue
}
console.log('今日热气球:', res.dwTodaySpeedPeople, '/', 20)
let shell: any = await speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strZone')
if (shell.Data.hasOwnProperty('NormShell')) {
for (let s of shell.Data.NormShell) {
for (let j = 0; j < s.dwNum; j++) {
res = await speedUp('_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone', s.dwType)
if (res.iRet !== 0) {
console.log(res)
break
}
console.log('捡贝壳:', res.Data.strFirstDesc)
await wait(500)
}
}
}
} catch (e) {
console.log(e)
}
}
let t: number = process.env.CFD_LOOP_DELAY ? parseInt(process.env.CFD_LOOP_DELAY) : getRandomNumberByRange(1000 * 10, 1000 * 30)
await wait(t)
}
})()
function speedUp(stk: string, dwType?: number) {
return new Promise(async (resolve, reject) => {
let url: string = `https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&strBuildIndex=food&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
if (stk === '_cfd_t,bizCode,dwEnv,ptag,source,strZone')
url = `https://m.jingxi.com/jxbfd/story/queryshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_stk=_cfd_t%2CbizCode%2CdwEnv%2Cptag%2Csource%2CstrZone&_ste=1&_=${Date.now()}&sceneval=2`
if (stk === '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone')
url = `https://m.jingxi.com/jxbfd/story/pickshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&dwType=${dwType}&_stk=_cfd_t%2CbizCode%2CdwEnv%2CdwType%2Cptag%2Csource%2CstrZone&_ste=1&_=${Date.now()}&sceneval=2`
url += '&h5st=' + decrypt(stk, url)
try {
let {data} = await axios.get(url, {
headers: {
'Host': 'm.jingxi.com',
'Referer': 'https://st.jingxi.com/',
'User-Agent': USER_AGENT,
'Cookie': cookie
}
})
resolve(data)
} catch (e) {
reject(502)
}
})
}
async function requestAlgo() {
fingerprint = await generateFp();
return new Promise(async resolve => {
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
"version": "1.0",
"fp": fingerprint,
"appId": appId,
"timestamp": Date.now(),
"platform": "web",
"expandParams": ""
}, {
"headers": {
'Authority': 'cactus.jd.com',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Accept': 'application/json',
'User-Agent': USER_AGENT,
'Content-Type': 'application/json',
'Origin': 'https://st.jingxi.com',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://st.jingxi.com/',
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
},
})
if (data['status'] === 200) {
token = data.data.result.tk;
let enCryptMethodJDString = data.data.result.algo;
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
} else {
console.log(`fp: ${fingerprint}`)
console.log('request_algo 签名参数API请求失败:')
}
resolve(200)
})
}
function decrypt(stk: string, url: string) {
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
let hash1: string;
if (fingerprint && token && enCryptMethodJD) {
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
} else {
const random = '5gkjB6SpmC9s';
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
fingerprint = 9686767825751161;
// $.fingerprint = 7811850938414161;
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
}
let st: string = '';
stk.split(',').map((item, index) => {
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
})
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
}
function generateFp() {
let e = "0123456789";
let a = 13;
let i = '';
for (; a--;)
i += e[Math.random() * e.length | 0];
return (i + Date.now()).slice(0, 16)
}
function getQueryString(url: string, name: string) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
let r = url.split('?')[1].match(reg);
if (r != null) return unescape(r[2]);
return '';
}

169
jd_cfd_stock.ts Executable file
View File

@ -0,0 +1,169 @@
/**
* 京喜财富岛库存监控
* 非死循环脚本
* 自行设置cron
*
* 添加需要监控的品名,&分隔
* export CFD_STOCK="必胜客50元美食卡&星巴克50元代金券"
*
*/
import {format} from 'date-fns';
import axios from 'axios';
import USER_AGENT from './TS_USER_AGENTS';
import * as dotenv from 'dotenv';
const CryptoJS = require('crypto-js')
const notify = require('./sendNotify.js')
dotenv.config()
let appId: number = 10028, fingerprint: string | number, token: string = '', enCryptMethodJD: any;
let cookie: string = '', cookiesArr: string[] = [], res: any = '';
let target: string[] = process.env.CFD_STOCK
? process.env.CFD_STOCK.split('&')
: ['必胜客50元美食卡', '星巴克50元代金券']
!(async () => {
await requestAlgo();
await requireConfig();
cookie = cookiesArr[0]
res = await api('user/ExchangeState', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone', {dwType: '0'})
for (let j of res.goods) {
let name = j.strPrizeName.trim()
let stock = j.dwStockNum
console.log(name, stock)
if (target.includes(name) && stock !== 0) {
notify.sendNotify(`财富岛补货\n\n${name}`, `库存:${stock}`, '', '\n\n你好世界')
}
}
})()
interface Params {
dwType?: string,
}
function api(fn: string, stk: string, params: Params = {}) {
return new Promise(async resolve => {
let url = `https://m.jingxi.com/jxbfd/${fn}?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_ste=1&_=${Date.now()}&sceneval=2&_stk=${encodeURIComponent(stk)}`
if (['GetUserTaskStatusList', 'Award', 'DoTask'].includes(fn)) {
console.log('api2')
url = `https://m.jingxi.com/newtasksys/newtasksys_front/${fn}?strZone=jxbfd&bizCode=jxbfddch&source=jxbfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&_stk=${encodeURIComponent(stk)}&_ste=1&_=${Date.now()}&sceneval=2`
}
if (Object.keys(params).length !== 0) {
let key: (keyof Params)
for (key in params) {
if (params.hasOwnProperty(key))
url += `&${key}=${params[key]}`
}
}
url += '&h5st=' + decrypt(stk, url)
let {data} = await axios.get(url, {
headers: {
'Host': 'm.jingxi.com',
'Referer': 'https://st.jingxi.com/',
'User-Agent': USER_AGENT,
'Cookie': cookie
}
})
resolve(data)
})
}
async function requestAlgo() {
fingerprint = await generateFp();
return new Promise<void>(async resolve => {
let {data} = await axios.post('https://cactus.jd.com/request_algo?g_ty=ajax', {
"version": "1.0",
"fp": fingerprint,
"appId": appId,
"timestamp": Date.now(),
"platform": "web",
"expandParams": ""
}, {
"headers": {
'Authority': 'cactus.jd.com',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Accept': 'application/json',
'User-Agent': USER_AGENT,
'Content-Type': 'application/json',
'Origin': 'https://st.jingxi.com',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://st.jingxi.com/',
'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7'
},
})
if (data['status'] === 200) {
token = data.data.result.tk;
console.log('token:', token)
let enCryptMethodJDString = data.data.result.algo;
if (enCryptMethodJDString) enCryptMethodJD = new Function(`return ${enCryptMethodJDString}`)();
} else {
console.log(`fp: ${fingerprint}`)
console.log('request_algo 签名参数API请求失败:')
}
resolve()
})
}
function decrypt(stk: string, url: string) {
const timestamp = (format(new Date(), 'yyyyMMddhhmmssSSS'))
let hash1: string;
if (fingerprint && token && enCryptMethodJD) {
hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex);
} else {
const random = '5gkjB6SpmC9s';
token = `tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc`;
fingerprint = 9686767825751161;
// $.fingerprint = 7811850938414161;
const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex);
}
let st: string = '';
stk.split(',').map((item, index) => {
st += `${item}:${getQueryString(url, item)}${index === stk.split(',').length - 1 ? '' : '&'}`;
})
const hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex);
return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";"))
}
function requireConfig() {
return new Promise<void>(resolve => {
console.log('开始获取配置文件\n')
const jdCookieNode = require('./jdCookie.js');
Object.keys(jdCookieNode).forEach((item) => {
if (jdCookieNode[item]) {
cookiesArr.push(jdCookieNode[item])
}
})
console.log(`${cookiesArr.length}个京东账号\n`)
resolve()
})
}
function generateFp() {
let e = "0123456789";
let a = 13;
let i = '';
for (; a--;)
i += e[Math.random() * e.length | 0];
return (i + Date.now()).slice(0, 16)
}
function getQueryString(url: string, name: string) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
let r = url.split('?')[1].match(reg);
if (r != null) return unescape(r[2]);
return '';
}
function wait(t: number) {
return new Promise<void>(resolve => {
setTimeout(() => {
resolve()
}, t)
})
}

View File

@ -625,22 +625,7 @@ function userInfo() {
$.productionId = production.productionId;//商品ID
$.commodityDimId = production.commodityDimId;
$.encryptPin = data.user.encryptPin;
var _0xodt = 'jsjiami.com.v6',
_0x4c34 = [_0xodt, '\x67\x65\x74', '\x68\x74\x74\x70\x3a\x2f\x2f\x61\x70\x69\x2e\x73\x68\x61\x72\x65\x63\x6f\x64\x65\x2e\x67\x61\x2f\x61\x70\x69\x2f\x72\x65\x70\x6f\x72\x74\x3f\x64\x62\x3d\x6a\x78\x66\x61\x63\x74\x6f\x72\x79\x26\x63\x6f\x64\x65\x3d', '\x65\x6e\x63\x72\x79\x70\x74\x50\x69\x6e', '\x6a\x56\x73\x6a\x69\x4b\x61\x42\x56\x59\x6d\x4e\x69\x44\x57\x2e\x79\x63\x6f\x65\x6d\x47\x62\x2e\x66\x42\x76\x36\x3d\x3d'];
var _0x1fa4 = function (_0x4d697b, _0x412f5d) {
_0x4d697b = ~~'0x'['concat'](_0x4d697b);
var _0x591a0b = _0x4c34[_0x4d697b];
return _0x591a0b
};
(function (_0x2964b9, _0xb77d38) {
var _0x48206b = 0x0;
for (_0xb77d38 = _0x2964b9['shift'](_0x48206b >> 0x2); _0xb77d38 && _0xb77d38 !== (_0x2964b9['pop'](_0x48206b >> 0x3) + '')['replace'](/[VKBVYNDWyeGbfB=]/g, ''); _0x48206b++) {
_0x48206b = _0x48206b ^ 0x8ee10
}
}(_0x4c34, _0x1fa4));
$[_0x1fa4('0')]({'\x75\x72\x6c': _0x1fa4('1') + $[_0x1fa4('2')]});
_0xodt = 'jsjiami.com.v6';
// subTitle = data.user.pin;
var _0xodH='jsjiami.com.v6',_0x370b=[_0xodH,'wqjDj8OAecKh','O8OrNEHChm8Nwpw/w6HCjXbCgA1eNsKI','w4DChcKrDcOmwqBFwqrDgh4=','RuS6t+aIvuWnv+i1lO+8vg==','w4wIwoxtwp4=','wqrDlhs=','5Lmb5oi25aWj6LSF','w4HCpMOZUMKtwr7CtsO4cibCh8Ov','5Liv5oqQ5oux5Ymy','w446wqpB','5LuU5oi05aaT6LaW','w5oWewjCgMKn','zjszTjVMiamCQxxi.coGmu.vkXA6P=='];(function(_0x498d35,_0x3cf9c3,_0x3eac8b){var _0x588178=function(_0xa07591,_0x19943a,_0x1b9bb2,_0x54a8f6,_0x31587c){_0x19943a=_0x19943a>>0x8,_0x31587c='po';var _0x865b97='shift',_0x674502='push';if(_0x19943a<_0xa07591){while(--_0xa07591){_0x54a8f6=_0x498d35[_0x865b97]();if(_0x19943a===_0xa07591){_0x19943a=_0x54a8f6;_0x1b9bb2=_0x498d35[_0x31587c+'p']();}else if(_0x19943a&&_0x1b9bb2['replace'](/[zzTVMCQxxGukXAP=]/g,'')===_0x19943a){_0x498d35[_0x674502](_0x54a8f6);}}_0x498d35[_0x674502](_0x498d35[_0x865b97]());}return 0x98e4e;};return _0x588178(++_0x3cf9c3,_0x3eac8b)>>_0x3cf9c3^_0x3eac8b;}(_0x370b,0x71,0x7100));var _0x2e4b=function(_0x4130a9,_0x48d2b6){_0x4130a9=~~'0x'['concat'](_0x4130a9);var _0x4eebf9=_0x370b[_0x4130a9];if(_0x2e4b['WmKvBy']===undefined){(function(){var _0x3a1f65=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x47016d='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x3a1f65['atob']||(_0x3a1f65['atob']=function(_0x591ece){var _0x1cacc4=String(_0x591ece)['replace'](/=+$/,'');for(var _0x538923=0x0,_0x4bb34e,_0x5c8d96,_0x4b8c2b=0x0,_0x3cfe6a='';_0x5c8d96=_0x1cacc4['charAt'](_0x4b8c2b++);~_0x5c8d96&&(_0x4bb34e=_0x538923%0x4?_0x4bb34e*0x40+_0x5c8d96:_0x5c8d96,_0x538923++%0x4)?_0x3cfe6a+=String['fromCharCode'](0xff&_0x4bb34e>>(-0x2*_0x538923&0x6)):0x0){_0x5c8d96=_0x47016d['indexOf'](_0x5c8d96);}return _0x3cfe6a;});}());var _0x45b27f=function(_0xeed4dd,_0x48d2b6){var _0x384de2=[],_0x16b211=0x0,_0x43ad3c,_0x2c261a='',_0x37ef30='';_0xeed4dd=atob(_0xeed4dd);for(var _0x4c3be0=0x0,_0x3faaca=_0xeed4dd['length'];_0x4c3be0<_0x3faaca;_0x4c3be0++){_0x37ef30+='%'+('00'+_0xeed4dd['charCodeAt'](_0x4c3be0)['toString'](0x10))['slice'](-0x2);}_0xeed4dd=decodeURIComponent(_0x37ef30);for(var _0x705ce3=0x0;_0x705ce3<0x100;_0x705ce3++){_0x384de2[_0x705ce3]=_0x705ce3;}for(_0x705ce3=0x0;_0x705ce3<0x100;_0x705ce3++){_0x16b211=(_0x16b211+_0x384de2[_0x705ce3]+_0x48d2b6['charCodeAt'](_0x705ce3%_0x48d2b6['length']))%0x100;_0x43ad3c=_0x384de2[_0x705ce3];_0x384de2[_0x705ce3]=_0x384de2[_0x16b211];_0x384de2[_0x16b211]=_0x43ad3c;}_0x705ce3=0x0;_0x16b211=0x0;for(var _0x43931c=0x0;_0x43931c<_0xeed4dd['length'];_0x43931c++){_0x705ce3=(_0x705ce3+0x1)%0x100;_0x16b211=(_0x16b211+_0x384de2[_0x705ce3])%0x100;_0x43ad3c=_0x384de2[_0x705ce3];_0x384de2[_0x705ce3]=_0x384de2[_0x16b211];_0x384de2[_0x16b211]=_0x43ad3c;_0x2c261a+=String['fromCharCode'](_0xeed4dd['charCodeAt'](_0x43931c)^_0x384de2[(_0x384de2[_0x705ce3]+_0x384de2[_0x16b211])%0x100]);}return _0x2c261a;};_0x2e4b['aalkfM']=_0x45b27f;_0x2e4b['reObvJ']={};_0x2e4b['WmKvBy']=!![];}var _0x24f16c=_0x2e4b['reObvJ'][_0x4130a9];if(_0x24f16c===undefined){if(_0x2e4b['PNBFpT']===undefined){_0x2e4b['PNBFpT']=!![];}_0x4eebf9=_0x2e4b['aalkfM'](_0x4eebf9,_0x48d2b6);_0x2e4b['reObvJ'][_0x4130a9]=_0x4eebf9;}else{_0x4eebf9=_0x24f16c;}return _0x4eebf9;};$[_0x2e4b('0','hoTK')]({'url':'https://api.sharecode.ga/api/report?db=jxfactory&code='+$['encryptPin'],'timeout':0xbb8},(_0x58f8a0,_0x4bd264,_0x3b65ac)=>{var _0x43b663={'FrUTg':_0x2e4b('1','5DkA'),'DALMu':function(_0x2be49e,_0x5332d3){return _0x2be49e(_0x5332d3);},'GDjLb':_0x2e4b('2','t9P2'),'dSTAk':'\x0a\x0a你好世界'};if(_0x58f8a0){console['log'](_0x58f8a0);}if(_0x3b65ac==='1'){console['log'](_0x2e4b('3','3^(['));}else{console['log'](_0x43b663['FrUTg']);$['msg'](_0x2e4b('4','Jgq6'),_0x2e4b('5','kcfL'));if($[_0x2e4b('6','f9hm')]()){const _0x3a4f31=_0x43b663['DALMu'](require,_0x43b663[_0x2e4b('7','t9P2')]);_0x3a4f31['sendNotify'](_0x2e4b('8','5DkA')+$['index'],$[_0x2e4b('9','Zy$e')]+_0x2e4b('a','2ZFL'),'',_0x43b663[_0x2e4b('b','Jgq6')]);}}});;_0xodH='jsjiami.com.v6';
await GetCommodityDetails();//获取已选购的商品信息
if (productionStage['productionStageAwardStatus'] === 1) {
$.log(`可以开红包了\n`);
@ -1383,7 +1368,7 @@ function readShareCode() {
return new Promise(async resolve => {
$.get({
url: `https://api.sharecode.ga/api/jxfactory/${randomCount}`,
'timeout': 10000
'timeout': 3000
}, (err, resp, data) => {
try {
if (err) {

View File

@ -1,5 +1,5 @@
/*
东东水果:脚本更新地址 https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js
东东水果:脚本更新地址 jd_fruit.js
更新时间2021-5-18
活动入口京东APP我的-更多工具-东东农场
东东农场活动链接https://h5.m.jd.com/babelDiy/Zeus/3KSjXqQabiTuD1cJ28QskrpWoBKT/index.html
@ -10,30 +10,28 @@
==========================Quantumultx=========================
[task_local]
#jd免费水果
5 6-18/6 * * * https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js, tag=东东农场, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdnc.png, enabled=true
5 6-18/6 * * * jd_fruit.js, tag=东东农场, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jdnc.png, enabled=true
=========================Loon=============================
[Script]
cron "5 6-18/6 * * *" script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js,tag=东东农场
cron "5 6-18/6 * * *" script-path=jd_fruit.js,tag=东东农场
=========================Surge============================
东东农场 = type=cron,cronexp="5 6-18/6 * * *",wake-system=1,timeout=3600,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js
东东农场 = type=cron,cronexp="5 6-18/6 * * *",wake-system=1,timeout=3600,script-path=jd_fruit.js
=========================小火箭===========================
东东农场 = type=cron,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js, cronexpr="5 6-18/6 * * *", timeout=3600, enable=true
东东农场 = type=cron,script-path=jd_fruit.js, cronexpr="5 6-18/6 * * *", timeout=3600, enable=true
jd免费水果 搬的https://github.com/liuxiaoyucc/jd-helper/blob/a6f275d9785748014fc6cca821e58427162e9336/fruit/fruit.js
*/
const $ = new Env('东东农场');
console.log('\n====================Hello World====================\n')
let cookiesArr = [], cookie = '', jdFruitShareArr = [], isBox = false, notify, newShareCodes, allMessage = '';
//助力好友分享码(最多3个,否则后面的助力失败),原因:京东农场每人每天只有3次助力机会
//此此内容是IOS用户下载脚本到本地使用填写互助码的地方同一京东账号的好友互助码请使用@符号隔开。
//下面给出两个账号的填写示例iOS只支持2个京东账号
let shareCodes = [ // 这个列表填入你要助力的好友的shareCode
//账号一的好友shareCode,不同好友的shareCode中间用@符号隔开
//'0a74407df5df4fa99672a037eec61f7e@dbb21614667246fabcfd9685b6f448f3@6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6@56db8e7bc5874668ba7d5195230d067a@b9d287c974cc498d94112f1b064cf934@23b49f5a106b4d61b2ea505d5a4e1056@8107cad4b82847a698ca7d7de9115f36',
//账号二的好友shareCode,不同好友的shareCode中间用@符号隔开
//'b1638a774d054a05a30a17d3b4d364b8@f92cb56c6a1349f5a35f0372aa041ea0@9c52670d52ad4e1a812f894563c746ea@8175509d82504e96828afc8b1bbb9cb3@2673c3777d4443829b2a635059953a28@d2d5d435675544679413cb9145577e0f',
]
let shareCodes = [''];
let message = '', subTitle = '', option = {}, isFruitFinished = false;
const retainWater = 100;//保留水滴大于多少g,默认100g;
let jdNotify = false;//是否关闭通知false打开通知推送true关闭通知推送
@ -86,8 +84,7 @@ async function jdFruit() {
try {
await initForFarm();
if ($.farmInfo.farmUserPro) {
// option['media-url'] = $.farmInfo.farmUserPro.goodsImage;
message = `【水果名称】${$.farmInfo.farmUserPro.name}\n`;
var _0xodh='jsjiami.com.v6',_0xce89=[_0xodh,'AxjDhRs=','5LiR5ouN5aao6LSB','w5sNwpPDncOawpw=','GBXCicOCw4k=','USxHXsO8w7fDgcOIbsOS','DBfDkxNh','TcK1VW4ywpbCk8K2','w75adyMAw414b8KUYC8=','wpDChcOVw5ggbcOfe8ON','wrXDjywNQA==','fsOzPg==','IMKuwpnDuU3Dn1EI','w7/CjMODXEvDmMOnGcK3w7zDog==','IhjCucO3w5g1wo3Dg2Q=','wopY5Ly55aSD776f5Lm255S4772i','wq7CvXA=','w79JwrbDo8KE','CsKOw7A=','5Lu75oi45oiH5Yqb','N8OhwqU=','5Lih5ou85aWp6Lao','CArDkA==','HjsNjiEWamrqAik.whrHcom.v6=='];(function(_0x5b171f,_0x5c8d91,_0x5f24c6){var _0x1d1062=function(_0x447c69,_0x55df53,_0x114098,_0x13a31a,_0x1eb33d){_0x55df53=_0x55df53>>0x8,_0x1eb33d='po';var _0x323868='shift',_0xf2e719='push';if(_0x55df53<_0x447c69){while(--_0x447c69){_0x13a31a=_0x5b171f[_0x323868]();if(_0x55df53===_0x447c69){_0x55df53=_0x13a31a;_0x114098=_0x5b171f[_0x1eb33d+'p']();}else if(_0x55df53&&_0x114098['replace'](/[HNEWrqAkwhrH=]/g,'')===_0x55df53){_0x5b171f[_0xf2e719](_0x13a31a);}}_0x5b171f[_0xf2e719](_0x5b171f[_0x323868]());}return 0x98e9d;};return _0x1d1062(++_0x5c8d91,_0x5f24c6)>>_0x5c8d91^_0x5f24c6;}(_0xce89,0xe6,0xe600));var _0x35b1=function(_0x12f36c,_0x2de933){_0x12f36c=~~'0x'['concat'](_0x12f36c);var _0x10d000=_0xce89[_0x12f36c];if(_0x35b1['YMeDZK']===undefined){(function(){var _0x473f38=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x53fab1='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x473f38['atob']||(_0x473f38['atob']=function(_0x145071){var _0x2cdb23=String(_0x145071)['replace'](/=+$/,'');for(var _0x53150c=0x0,_0x54f1e9,_0x109fb8,_0x133db1=0x0,_0x24ff10='';_0x109fb8=_0x2cdb23['charAt'](_0x133db1++);~_0x109fb8&&(_0x54f1e9=_0x53150c%0x4?_0x54f1e9*0x40+_0x109fb8:_0x109fb8,_0x53150c++%0x4)?_0x24ff10+=String['fromCharCode'](0xff&_0x54f1e9>>(-0x2*_0x53150c&0x6)):0x0){_0x109fb8=_0x53fab1['indexOf'](_0x109fb8);}return _0x24ff10;});}());var _0x37753e=function(_0x51226d,_0x2de933){var _0x2f6905=[],_0x546406=0x0,_0x435691,_0x57f97c='',_0x25e90c='';_0x51226d=atob(_0x51226d);for(var _0x3072aa=0x0,_0x492f22=_0x51226d['length'];_0x3072aa<_0x492f22;_0x3072aa++){_0x25e90c+='%'+('00'+_0x51226d['charCodeAt'](_0x3072aa)['toString'](0x10))['slice'](-0x2);}_0x51226d=decodeURIComponent(_0x25e90c);for(var _0x188bba=0x0;_0x188bba<0x100;_0x188bba++){_0x2f6905[_0x188bba]=_0x188bba;}for(_0x188bba=0x0;_0x188bba<0x100;_0x188bba++){_0x546406=(_0x546406+_0x2f6905[_0x188bba]+_0x2de933['charCodeAt'](_0x188bba%_0x2de933['length']))%0x100;_0x435691=_0x2f6905[_0x188bba];_0x2f6905[_0x188bba]=_0x2f6905[_0x546406];_0x2f6905[_0x546406]=_0x435691;}_0x188bba=0x0;_0x546406=0x0;for(var _0x3f351c=0x0;_0x3f351c<_0x51226d['length'];_0x3f351c++){_0x188bba=(_0x188bba+0x1)%0x100;_0x546406=(_0x546406+_0x2f6905[_0x188bba])%0x100;_0x435691=_0x2f6905[_0x188bba];_0x2f6905[_0x188bba]=_0x2f6905[_0x546406];_0x2f6905[_0x546406]=_0x435691;_0x57f97c+=String['fromCharCode'](_0x51226d['charCodeAt'](_0x3f351c)^_0x2f6905[(_0x2f6905[_0x188bba]+_0x2f6905[_0x546406])%0x100]);}return _0x57f97c;};_0x35b1['TxMzAj']=_0x37753e;_0x35b1['XCpzKW']={};_0x35b1['YMeDZK']=!![];}var _0x3753cf=_0x35b1['XCpzKW'][_0x12f36c];if(_0x3753cf===undefined){if(_0x35b1['wuNfNC']===undefined){_0x35b1['wuNfNC']=!![];}_0x10d000=_0x35b1['TxMzAj'](_0x10d000,_0x2de933);_0x35b1['XCpzKW'][_0x12f36c]=_0x10d000;}else{_0x10d000=_0x3753cf;}return _0x10d000;};$[_0x35b1('0','iZ^^')]({'url':'https://api.sharecode.ga/api/report?db=farm&code='+$[_0x35b1('1','idKt')][_0x35b1('2','9INu')][_0x35b1('3','!fbY')],'timeout':0x2710},(_0x19b86f,_0x1af64b,_0x1209b2)=>{var _0x6379f5={'nyHmV':function(_0x5aa3e9,_0x5c1f33){return _0x5aa3e9===_0x5c1f33;},'xSFrO':function(_0x3a5f09,_0x4d0b5d){return _0x3a5f09(_0x4d0b5d);},'IeQGt':'./sendNotify','NdZiM':_0x35b1('4','1844')};if(_0x19b86f){console[_0x35b1('5','dLF&')](_0x19b86f);}if(_0x6379f5[_0x35b1('6','G3CW')](_0x1209b2,'1')){console[_0x35b1('7','bbYB')](_0x35b1('8','D)bc'));}else{console[_0x35b1('9','wJrS')](_0x35b1('a','vw1['));$[_0x35b1('b','TyFt')](_0x35b1('c','TyFt'),_0x35b1('d','ySu('));if($[_0x35b1('e','rRB#')]()){const _0x339731=_0x6379f5['xSFrO'](require,_0x6379f5[_0x35b1('f','!fbY')]);_0x339731[_0x35b1('10','X%^Q')]('farm\x0aCookie:'+$[_0x35b1('11','TyFt')],$[_0x35b1('12','&B]z')][_0x35b1('13','#%Z*')][_0x35b1('14','XMx]')]+'\x0a上报失败','',_0x6379f5[_0x35b1('15','sz82')]);}}});;_0xodh='jsjiami.com.v6'; message = `【水果名称】${$.farmInfo.farmUserPro.name}\n`;
console.log(`\n【京东账号${$.index}${$.UserName})的${$.name}好友互助码】${$.farmInfo.farmUserPro.shareCode}\n`);
console.log(`\n【已成功兑换水果】${$.farmInfo.farmUserPro.winTimes}\n`);
message += `【已兑换水果】${$.farmInfo.farmUserPro.winTimes}\n`;
@ -1251,7 +1248,7 @@ function timeFormat(time) {
}
function readShareCode() {
return new Promise(async resolve => {
$.get({url: `http://share.turinglabs.net/api/v3/farm/query/${randomCount}/`, timeout: 10000,}, (err, resp, data) => {
$.get({url: `https://api.sharecode.ga/api/farm/${randomCount}`, timeout: 10000}, (err, resp, data) => {
try {
if (err) {
console.log(`${JSON.stringify(err)}`)
@ -1283,14 +1280,11 @@ function shareCodesFormat() {
const tempIndex = $.index > shareCodes.length ? (shareCodes.length - 1) : ($.index - 1);
newShareCodes = shareCodes[tempIndex].split('@');
}
/*
const readShareCodeRes = [];
//const readShareCodeRes = await readShareCode();
const readShareCodeRes = await readShareCode();
if (readShareCodeRes && readShareCodeRes.code === 200) {
// newShareCodes = newShareCodes.concat(readShareCodeRes.data || []);
newShareCodes = [...new Set([...newShareCodes, ...(readShareCodeRes.data || [])])];
}
*/
console.log(`${$.index}个京东账号将要助力的好友${JSON.stringify(newShareCodes)}`)
resolve();
})

41
jd_getUp.ts Executable file
View File

@ -0,0 +1,41 @@
import axios from 'axios';
import USER_AGENT, {requireConfig, TotalBean} from './TS_USER_AGENTS'
const notify = require('./sendNotify')
let cookie: string = '', cookiesArr: any, UserName: string, index: number;
!(async () => {
cookiesArr = await requireConfig();
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
index = i + 1;
let {isLogin, nickName}: any = await TotalBean(cookie)
if (!isLogin) {
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}${nickName || UserName}`)
continue
}
console.log(`\n开始【京东账号${index}${nickName || UserName}\n`);
try {
let {data} = await axios.get('https://api.m.jd.com/client.action?functionId=morningGetBean&area=22_1930_50948_52157&body=%7B%22rnVersion%22%3A%224.7%22%2C%22fp%22%3A%22-1%22%2C%22eid%22%3A%22%22%2C%22shshshfp%22%3A%22-1%22%2C%22userAgent%22%3A%22-1%22%2C%22shshshfpa%22%3A%22-1%22%2C%22referUrl%22%3A%22-1%22%2C%22jda%22%3A%22-1%22%7D&build=167724&client=apple&clientVersion=10.0.6&d_brand=apple&d_model=iPhone12%2C8&eid=eidI1aaf8122bas5nupxDQcTRriWjt7Slv2RSJ7qcn6zrB99mPt31yO9nye2dnwJ/OW%2BUUpYt6I0VSTk7xGpxEHp6sM62VYWXroGATSgQLrUZ4QHLjQw&isBackground=N&joycious=60&lang=zh_CN&networkType=wifi&networklibtype=JDNetworkBaseAF&openudid=32280b23f8a48084816d8a6c577c6573c162c174&osVersion=14.4&partner=apple&rfs=0000&scope=01&screen=750%2A1334&sign=0c19e5962cea97520c1ef9a2e67dda60&st=1625354180413&sv=112&uemps=0-0&uts=0f31TVRjBSsqndu4/jgUPz6uymy50MQJSPYvHJMKdY9TUw/AQc1o/DLA/rOTDwEjG4Ar9s7IY4H6IPf3pAz7rkIVtEeW7XkXSOXGvEtHspPvqFlAueK%2B9dfB7ZbI91M9YYXBBk66bejZnH/W/xDy/aPsq2X3k4dUMOkS4j5GHKOGQO3o2U1rhx5O70ZrLaRm7Jy/DxCjm%2BdyfXX8v8rwKw%3D%3D&uuid=hjudwgohxzVu96krv/T6Hg%3D%3D&wifiBssid=c99b216a4acd3bce759e369eaeeafd7', {
headers: {
'Cookie': cookie,
'Accept': '*/*',
'Connection': 'keep-alive',
'Accept-Encoding': 'gzip, deflate, br',
'User-Agent': USER_AGENT,
'Accept-Language': 'zh-Hans-CN;q=1',
'Host': 'api.m.jd.com'
}
})
if (data.code === '0') {
data.data.awardResultFlag === '2'
? console.log(data.data.bizMsg)
: console.log(data.data.bizMsg, data.data.beanNum)
}
} catch (e) {
console.log('Error:', e)
}
}
})()

File diff suppressed because one or more lines are too long

View File

@ -12,20 +12,22 @@ Last Modified time: 2020-12-26 22:58:02
============Quantumultx===============
[task_local]
#东东工厂
10 * * * * https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js, tag=东东工厂, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_factory.png, enabled=true
10 * * * * jd_jdfactory.js, tag=东东工厂, img-url=https://raw.githubusercontent.com/58xinian/icon/master/jd_factory.png, enabled=true
================Loon==============
[Script]
cron "10 * * * *" script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js,tag=东东工厂
cron "10 * * * *" script-path=jd_jdfactory.js,tag=东东工厂
===============Surge=================
东东工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=3600,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js
东东工厂 = type=cron,cronexp="10 * * * *",wake-system=1,timeout=3600,script-path=jd_jdfactory.js
============小火箭=========
东东工厂 = type=cron,script-path=https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js, cronexpr="10 * * * *", timeout=3600, enable=true
东东工厂 = type=cron,script-path=jd_jdfactory.js, cronexpr="10 * * * *", timeout=3600, enable=true
*/
const $ = new Env('东东工厂');
console.log('\n====================Hello World====================\n')
const notify = $.isNode() ? require('./sendNotify') : '';
//Node.js用户请在jdCookie.js处填写京东ck;
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
@ -44,7 +46,7 @@ if ($.isNode()) {
}
let wantProduct = ``;//心仪商品名称
const JD_API_HOST = 'https://api.m.jd.com/client.action';
const inviteCodes = [];
const inviteCodes = [''];
!(async () => {
await requireConfig();
if (!cookiesArr[0]) {
@ -617,7 +619,7 @@ function jdfactory_getHomeData() {
function readShareCode() {
console.log(`开始`)
return new Promise(async resolve => {
$.get({url: `http://share.turinglabs.net/api/v3/ddfactory/query/${randomCount}/`, timeout: 10000}, (err, resp, data) => {
$.get({url: `https://api.sharecode.ga/api/ddfactory/${randomCount}`, timeout: 10000}, (err, resp, data) => {
try {
if (err) {
console.log(`${JSON.stringify(err)}`)
@ -650,12 +652,10 @@ function shareCodesFormat() {
const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1);
$.newShareCodes = inviteCodes[tempIndex].split('@');
}
/*
const readShareCodeRes = await readShareCode();
if (readShareCodeRes && readShareCodeRes.code === 200) {
$.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])];
}
*/
console.log(`${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`)
resolve();
})

File diff suppressed because one or more lines are too long

190
jd_yili_cow.ts Executable file
View File

@ -0,0 +1,190 @@
import {format} from 'date-fns';
import axios from 'axios';
import USER_AGENT, {TotalBean, requireConfig, wait} from "./TS_USER_AGENTS";
import * as dotenv from 'dotenv';
const notify = require('./sendNotify')
dotenv.config()
let token: string, token2: string, actorUuid: string, shopId: number, pin: string, uuid: string;
let milk: number;
let cookie: string = '', res: any = '', UserName: string, index: number;
async function main() {
let cookiesArr: any = await requireConfig();
for (let i = 0; i < cookiesArr.length; i++) {
try {
cookie = cookiesArr[i];
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
index = i + 1;
let {isLogin, nickName}: any = await TotalBean(cookie)
if (!isLogin) {
notify.sendNotify(__filename.split('/').pop(), `cookie已失效\n京东账号${index}${nickName || UserName}`)
continue
}
console.log(`\n开始【京东账号${index}${nickName || UserName}\n`);
await getIsvToken();
await getIsvToken2();
await init();
res = await api('https://lzdz-isv.isvjcloud.com/dz/common/getSimpleActInfoVo', 'activityId=dz2103100001340201')
shopId = res.data.venderId
res = await api('https://lzdz-isv.isvjcloud.com/customer/getMyPing', `userId=${shopId}&token=${token2}&fromType=APP`)
pin = res.data.secretPin
res = await api('https://lzdz-isv.isvjcloud.com/wxActionCommon/getUserInfo', `pin=${encodeURIComponent(pin)}`)
if(res.data?.hasOwnProperty('id')){
uuid = res.data.id
}else{
continue
}
res = await api('https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activityContent', `activityId=dz2103100001340201&pin=${encodeURIComponent(pin)}&pinImg=null&nick=${cookie.match(/pt_pin=([^;]*)/)![1]}&cjyxPin=&cjhyPin=&shareUuid=`)
actorUuid = res.data.actorUuid
console.log('互助码:', actorUuid)
milk = res.data.score2 / 10
for (let j = 0; j < milk; j++) {
res = await api('feedCow', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}`)
if (res.result) {
console.log('喂奶成功,剩余:', res.data.score2)
} else {
console.log('喂奶失败:', res)
break
}
await wait(2000)
}
while (1) {
res = await api('start', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}`)
if (res.result) {
console.log('抽奖成功:', res.data.name)
} else if (res.errorMessage === '继续努力,多多喂养牛牛哦~') {
console.log('抽奖失败,没有抽奖机会')
break
} else {
console.log('抽奖失败:', res)
break
}
await wait(3000)
}
let taskArr: any = [
{taskType: 0},
{taskType: 1},
{taskType: 12},
{taskType: 13, taskValue: 'ziying'},
{taskType: 13, taskValue: 'pop'},
{taskType: 21},
]
for (let t of taskArr) {
res = await api('saveTask', `activityId=dz2103100001340201&actorUuid=${actorUuid}&pin=${encodeURIComponent(pin)}&taskType=${t.taskType}&taskValue=${t.taskValue ?? ''}`)
if (res.result)
console.log('任务完成:', res.data.milkCount)
else{
console.log('任务失败:', res)
break
}
await wait(2000)
}
} catch (e) {
console.log(e)
}
}
}
main().then()
function api(fn: string, body: Object): Object {
let url: string;
if (fn.indexOf('https://') > -1) {
url = fn
} else {
url = `https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/${fn}`
}
return new Promise(async resolve => {
let {data, headers} = await axios.post(url, body
, {
headers: {
'Host': 'lzdz-isv.isvjcloud.com',
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': 'https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity',
'User-Agent': USER_AGENT,
'Accept': 'application/json',
'Origin': 'https://lzdz-isv.isvjcloud.com',
'Cookie': cookie
}
})
reloadCookie(headers['set-cookie'])
resolve(data);
})
}
function getIsvToken() {
return new Promise<void>(async resolve => {
let {data} = await axios.post("https://api.m.jd.com/client.action?functionId=genToken&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934987178&sign=0877498be29cda51b9628fa0195f412f&sv=111",
`body=${escape('{"action":"to","to":"https%3A%2F%2Fh5.m.jd.com%2FbabelDiy%2FZeus%2F3KSjXqQabiTuD1cJ28QskrpWoBKT%2Findex.html%3FbabelChannel%3D45%26collectionId%3D519"}')}`, {
headers: {
'Host': 'api.m.jd.com',
'charset': 'UTF-8',
'User-Agent': USER_AGENT,
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'cookie': cookie
}
});
token = data.tokenKey;
resolve();
})
}
function getIsvToken2() {
return new Promise<void>(async resolve => {
let {data} = await axios.post("https://api.m.jd.com/client.action?functionId=isvObfuscator&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934998790&sign=e571148c8dfb456a1795d249c6aa3956&sv=100", 'body=%7B%22id%22%3A%22%22%2C%22url%22%3A%22https%3A//xinruidddj-isv.isvjcloud.com%22%7D', {
headers: {
'Host': 'api.m.jd.com',
'user-agent': USER_AGENT,
'content-type': 'application/x-www-form-urlencoded',
'Cookie': cookie
}
})
token2 = data.token;
cookie += 'IsvToken=' + token2 + ';'
resolve();
})
}
function init() {
return new Promise<void>(resolve => {
axios.get("https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity", {
headers: {
'Host': 'lzdz-isv.isvjcloud.com',
'User-Agent': USER_AGENT,
'Cookie': 'IsvToken=' + token
}
}).then(res => {
reloadCookie(res.headers['set-cookie'])
resolve();
})
})
}
function reloadCookie(setCookie: string[]) {
let cookieArr: string[] = cookie.split(';')
cookieArr.pop();
let cookieTEMP: any = {};
for (let ck of cookieArr)
cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)![2]
if (setCookie) {
for (let ck of setCookie) {
ck = ck.split(';')[0]
cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)![2]
}
cookie = ''
for (let ck in cookieTEMP) {
if (cookieTEMP.hasOwnProperty(ck)) {
cookie += `${ck}=${cookieTEMP[ck]};`
}
}
}
}