Files
YMhut-box-C-/third_party/MoeKoeMusic/api/module/login_openplat.js
T

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);
}
});
};