85 lines
3.2 KiB
JavaScript
85 lines
3.2 KiB
JavaScript
// 开放平台登录
|
|
const axios = require('axios');
|
|
const { wx_appid, wx_secret, cryptoAesDecrypt, cryptoAesEncrypt, cryptoRSAEncrypt, wx_lite_appid, wx_lite_secret, isLite } = require('../util');
|
|
const appid = isLite ? wx_lite_appid : wx_appid;
|
|
const secret = isLite ? wx_lite_secret : wx_secret;
|
|
|
|
let liteT2Key = 'fd14b35e3f81af3817a20ae7adae7020';
|
|
let liteT2Iv = '17a20ae7adae7020';
|
|
let liteT1Key = '5e4ef500e9597fe004bd09a46d8add98';
|
|
let liteT1Iv = '04bd09a46d8add98';
|
|
|
|
const assetsToken = (code) => {
|
|
return axios({
|
|
url: 'https://api.weixin.qq.com/sns/oauth2/access_token',
|
|
method: 'POST',
|
|
params: { secret, appid, code, grant_type: 'authorization_code' },
|
|
});
|
|
};
|
|
|
|
module.exports = (params, useAxios) => {
|
|
const answer = { status: 500, body: {}, cookie: [] };
|
|
return new Promise(async (resolve, reject) => {
|
|
try {
|
|
const assetsTokenResp = await assetsToken(params?.code || '');
|
|
|
|
if (assetsTokenResp.data?.access_token && assetsTokenResp.data?.openid) {
|
|
const dateNow = Date.now();
|
|
const encrypt = cryptoAesEncrypt({ access_token: assetsTokenResp.data.access_token });
|
|
const pk = cryptoRSAEncrypt({ 'clienttime_ms': dateNow, key: encrypt.key }).toUpperCase();
|
|
const t2 = cryptoAesEncrypt(
|
|
`${params.cookie?.KUGOU_API_GUID}|0f607264fc6318a92b9e13c65db7cd3c|${params.cookie?.KUGOU_API_MAC}|${params.cookie?.KUGOU_API_DEV}|${dateNow}`,
|
|
{ key: liteT2Key, iv: liteT2Iv }
|
|
);
|
|
const t1 = cryptoAesEncrypt(`|${dateNow}`, { key: liteT1Key, iv: liteT1Iv });
|
|
|
|
const dataMap = {
|
|
dev: params.cookie?.KUGOU_API_DEV,
|
|
force_login: 1,
|
|
partnerid: 36,
|
|
clienttime_ms: dateNow,
|
|
t1: isLite ? t1 : 0,
|
|
t2: isLite ? t2 : 0,
|
|
t3: 'MCwwLDAsMCwwLDAsMCwwLDA=',
|
|
openid: assetsTokenResp.data.openid,
|
|
params: encrypt.str,
|
|
pk,
|
|
};
|
|
|
|
const response = await useAxios({
|
|
url: `/v6/login_by_openplat`,
|
|
method: 'POST',
|
|
data: dataMap,
|
|
cookie: params?.cookie,
|
|
encryptType: 'android',
|
|
headers: { 'x-router': 'login.user.kugou.com' },
|
|
});
|
|
|
|
if (response.body?.status === 1) {
|
|
const getToken = cryptoAesDecrypt(response.body.data?.secu_params, encrypt.key);
|
|
if (typeof getToken === 'object') {
|
|
response.body.data = { ...response.body.data, ...getToken };
|
|
Object.keys(getToken).forEach((key) => response.cookie.push(`${key}=${getToken[key]}`));
|
|
} else {
|
|
response.body.data['token'] = getToken;
|
|
response.cookie.push(`token=${getToken}`);
|
|
}
|
|
response.cookie.push(`t1=${response.body.data?.t1 ?? ''}`);
|
|
response.cookie.push(`userid=${response.body.data?.userid || 0}`);
|
|
response.cookie.push(`vip_type=${response.body.data?.vip_type || 0}`);
|
|
response.cookie.push(`vip_token=${response.body.data?.vip_token || ''}`);
|
|
}
|
|
resolve(response);
|
|
} else {
|
|
answer.status = 502;
|
|
answer.body = { status: 0, msg: assetsTokenResp.data };
|
|
reject(answer);
|
|
}
|
|
} catch (error) {
|
|
answer.status = 502;
|
|
answer.body = { status: 0, msg: error };
|
|
reject(answer);
|
|
}
|
|
});
|
|
};
|