更新于 09-03 12:01

This commit is contained in:
root
2021-09-03 12:01:29 -04:00
parent e51c557879
commit 6c0c3c2c7b

View File

@ -6,14 +6,19 @@
const jd_env = require("./utils/JDEnv.js"); const jd_env = require("./utils/JDEnv.js");
const $ = jd_env.env("扫码获取京东cookie"); const $ = jd_env.env("扫码获取京东cookie");
const qrcode = require("qrcode-terminal"); const qrcode = require("qrcode-terminal");
const JD_UA = `jdapp;iPhone;10.1.2;14.7.1;${randomString(40)};network/wifi;model/iPhone10,2;addressid/4091160336;appBuild/167802;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`;
let s_token, cookies, guid, lsid, lstoken, okl_token, token; let s_token, cookies, guid, lsid, lstoken, okl_token, token;
!(async () => { !(async () => {
await loginEntrance(); try {
await generateQrcode(); await loginEntrance();
await getCookie(); await generateQrcode();
await getCookie();
} catch (e) {
$.logErr(e);
}
})() })()
.catch((e) => { .catch((e) => {
$.log("", `${$.name}, 失败! 原因: ${e}!`, ""); $.log('', `${$.name}, 失败! 原因: ${e}!`, '');
}) })
.finally(() => { .finally(() => {
// $.done(); // $.done();
@ -50,15 +55,15 @@
} else { } else {
$.stepsHeaders = resp.headers; $.stepsHeaders = resp.headers;
data = JSON.parse(data); data = JSON.parse(data);
token = data["token"]; token = data['token'];
// $.log('token', token) // $.log('token', token)
const setCookie = resp.headers["set-cookie"][0]; const setCookie = resp.headers['set-cookie'][0];
okl_token = setCookie.substring(setCookie.indexOf("=") + 1, setCookie.indexOf(";")); okl_token = setCookie.substring(setCookie.indexOf('=') + 1, setCookie.indexOf(';'));
const url = "https://plogin.m.jd.com/cgi-bin/m/tmauth?appid=300&client_type=m&token=" + token; const url = 'https://plogin.m.jd.com/cgi-bin/m/tmauth?appid=300&client_type=m&token=' + token;
qrcode.generate(url, { small: true }); // 输出二维码 qrcode.generate(url, { small: true }); // 输出二维码
console.log("请打开 京东APP 扫码登录(二维码有效期为3分钟)"); console.log('请打开 京东APP 扫码登录(二维码有效期为3分钟)');
console.log(`\n\n注:如扫描不到,请使用工具(例如在线二维码工具https://cli.im)手动生成如下url二维码\n\n${url}\n\n`); console.error(`注:如上图二维码扫描不到,请使用工具(例如在线二维码工具https://cli.im)手动生成下面链接的二维码\n\n${url}\n\n`);
} }
} catch (e) { } catch (e) {
$.logErr(e, resp); $.logErr(e, resp);
@ -74,14 +79,14 @@
const options = { const options = {
url: `https://plogin.m.jd.com/cgi-bin/m/tmauthchecktoken?&token=${token}&ou_state=0&okl_token=${okl_token}`, url: `https://plogin.m.jd.com/cgi-bin/m/tmauthchecktoken?&token=${token}&ou_state=0&okl_token=${okl_token}`,
body: `lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action`, body: `lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action`,
timeout: 10 * 1000,
headers: { headers: {
Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`, Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`,
Cookie: cookies, Cookie: cookies,
Connection: "Keep-Alive", Connection: 'Keep-Alive',
"Content-Type": "application/x-www-form-urlencoded; Charset=UTF-8", 'Content-Type': 'application/x-www-form-urlencoded; Charset=UTF-8',
Accept: "application/json, text/plain, */*", Accept: 'application/json, text/plain, */*',
"User-Agent": 'User-Agent': JD_UA,
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.14.0 main%2F1.0 baiduboxapp/11.18.0.16 (Baidu; P2 13.3.1) NABar/0.0",
}, },
}; };
$.post(options, (err, resp, data) => { $.post(options, (err, resp, data) => {
@ -105,34 +110,38 @@
function getCookie() { function getCookie() {
$.timer = setInterval(async () => { $.timer = setInterval(async () => {
const checkRes = await checkLogin(); try {
if (checkRes["errcode"] === 0) { const checkRes = await checkLogin();
//扫描登录成功 if (checkRes['errcode'] === 0) {
$.log(`扫描登录成功\n`); //扫描登录成功
clearInterval($.timer); $.log(`扫描登录成功\n`);
await formatCookie($.checkLoginHeaders); clearInterval($.timer);
$.done(); await formatCookie($.checkLoginHeaders);
} else if (checkRes["errcode"] === 21) { $.done();
$.log(`二维码已失效,请重新获取二维码重新扫描\n`); } else if (checkRes['errcode'] === 21) {
clearInterval($.timer); $.log(`二维码已失效,请重新获取二维码重新扫描\n`);
$.done(); clearInterval($.timer);
} else if (checkRes["errcode"] === 176) { $.done();
//未扫描登录 } else if (checkRes['errcode'] === 176) {
} else { //未扫描登录
$.log(`其他异常:${JSON.stringify(checkRes)}\n`); } else {
clearInterval($.timer); $.log(`扫描登录失败:其他未知状态异常:${JSON.stringify(checkRes)}\n`);
$.done(); clearInterval($.timer);
$.done();
}
} catch (e) {
$.logErr(e);
} }
}, 1000); }, 1000);
} }
function formatCookie(headers) { function formatCookie(headers) {
new Promise((resolve) => { new Promise((resolve) => {
let pt_key = headers["set-cookie"][1]; let pt_key = headers['set-cookie'][1];
pt_key = pt_key.substring(pt_key.indexOf("=") + 1, pt_key.indexOf(";")); pt_key = pt_key.substring(pt_key.indexOf('=') + 1, pt_key.indexOf(';'));
let pt_pin = headers["set-cookie"][2]; let pt_pin = headers['set-cookie'][2];
pt_pin = pt_pin.substring(pt_pin.indexOf("=") + 1, pt_pin.indexOf(";")); pt_pin = pt_pin.substring(pt_pin.indexOf('=') + 1, pt_pin.indexOf(';'));
const cookie1 = "pt_key=" + pt_key + ";pt_pin=" + pt_pin + ";"; const cookie1 = 'pt_key=' + pt_key + ';pt_pin=' + pt_pin + ';';
$.UserName = decodeURIComponent(cookie1.match(/pt_pin=([^; ]+)(?=;?)/) && cookie1.match(/pt_pin=([^; ]+)(?=;?)/)[1]); $.UserName = decodeURIComponent(cookie1.match(/pt_pin=([^; ]+)(?=;?)/) && cookie1.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
$.log(`京东用户:${$.UserName} Cookie获取成功cookie如下`); $.log(`京东用户:${$.UserName} Cookie获取成功cookie如下`);
@ -143,14 +152,14 @@
function formatSetCookies(headers, body) { function formatSetCookies(headers, body) {
new Promise((resolve) => { new Promise((resolve) => {
s_token = body["s_token"]; s_token = body['s_token'];
guid = headers["set-cookie"][0]; guid = headers['set-cookie'][0];
guid = guid.substring(guid.indexOf("=") + 1, guid.indexOf(";")); guid = guid.substring(guid.indexOf('=') + 1, guid.indexOf(';'));
lsid = headers["set-cookie"][2]; lsid = headers['set-cookie'][2];
lsid = lsid.substring(lsid.indexOf("=") + 1, lsid.indexOf(";")); lsid = lsid.substring(lsid.indexOf('=') + 1, lsid.indexOf(';'));
lstoken = headers["set-cookie"][3]; lstoken = headers['set-cookie'][3];
lstoken = lstoken.substring(lstoken.indexOf("=") + 1, lstoken.indexOf(";")); lstoken = lstoken.substring(lstoken.indexOf('=') + 1, lstoken.indexOf(';'));
cookies = "guid=" + guid + "; lang=chs; lsid=" + lsid + "; lstoken=" + lstoken + "; "; cookies = 'guid=' + guid + '; lang=chs; lsid=' + lsid + '; lstoken=' + lstoken + '; ';
resolve(); resolve();
}); });
} }
@ -158,15 +167,15 @@
function taskUrl() { function taskUrl() {
return { return {
url: `https://plogin.m.jd.com/cgi-bin/mm/new_login_entrance?lang=chs&appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`, url: `https://plogin.m.jd.com/cgi-bin/mm/new_login_entrance?lang=chs&appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`,
timeout: 10 * 1000,
headers: { headers: {
Connection: "Keep-Alive", Connection: 'Keep-Alive',
"Content-Type": "application/x-www-form-urlencoded", 'Content-Type': 'application/x-www-form-urlencoded',
Accept: "application/json, text/plain, */*", Accept: 'application/json, text/plain, */*',
"Accept-Language": "zh-cn", 'Accept-Language': 'zh-cn',
Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`, Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`,
"User-Agent": 'User-Agent': JD_UA,
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.14.0 main%2F1.0 baiduboxapp/11.18.0.16 (Baidu; P2 13.3.1) NABar/0.0", Host: 'plogin.m.jd.com',
Host: "plogin.m.jd.com",
}, },
}; };
} }
@ -175,16 +184,27 @@
return { return {
url: `https://plogin.m.jd.com/cgi-bin/m/tmauthreflogurl?s_token=${s_token}&v=${Date.now()}&remember=true`, url: `https://plogin.m.jd.com/cgi-bin/m/tmauthreflogurl?s_token=${s_token}&v=${Date.now()}&remember=true`,
body: `lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action`, body: `lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action`,
timeout: 10 * 1000,
headers: { headers: {
Connection: "Keep-Alive", Connection: 'Keep-Alive',
"Content-Type": "application/x-www-form-urlencoded", 'Content-Type': 'application/x-www-form-urlencoded',
Accept: "application/json, text/plain, */*", Accept: 'application/json, text/plain, */*',
"Accept-Language": "zh-cn", 'Accept-Language': 'zh-cn',
Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`, Referer: `https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=${Date.now()}&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport`,
"User-Agent": 'User-Agent': JD_UA,
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.14.0 main%2F1.0 baiduboxapp/11.18.0.16 (Baidu; P2 13.3.1) NABar/0.0", Host: 'plogin.m.jd.com',
Host: "plogin.m.jd.com",
}, },
}; };
} }
/**
* 生成随机 iPhoneID
* @returns {string}
*/
function randomString(e) {
e = e || 32;
let t = "abcdef0123456789", a = t.length, n = "";
for (i = 0; i < e; i++)
n += t.charAt(Math.floor(Math.random() * a));
return n
}