完成网络音乐、工具页面与安装器体验升级
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
// 开放平台登录
|
||||
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);
|
||||
}
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user