@jixun/qmpc-sign
TypeScript icon, indicating that this package has built-in type declarations

0.0.6 • Public • Published

qmpc-sign

用于签名 QQ音乐 PC版 的 RPC 请求。

注意:这个包不开放原始代码。当然,没有人可以阻止你对此内嵌的 WebAssembly 模块或官方客户端进行逆向 😘

文档

这个包只导出了两个方法。你也可以参考 @jixun/qm-rpc 的用例。

generateSession

生成一个 Session(会话)对象。如果需要构造登入后的会话对象,建议直接抓取登陆后的请求包。位于请求数据的 comm 键内。

如果接口不需要登陆,可以直接用这个函数生成一个未登录的会话对象。

const { generateSession } = require('@jixun/qmpc-sign');

const session = generateSession();

// session:
{
  _channelid: '20',
  _os_version: '6.2.9200-2', // 系统版本
  authst: '',
  ct: '19', // 版本信息
  cv: '1910', // 版本信息
  guid: 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', // 随机
  patch: '118', // 版本信息
  psrf_access_token_expiresAt: 0,
  psrf_qqaccess_token: '',
  psrf_qqopenid: '',
  psrf_qqunionid: '',
  tmeAppID: 'qqmusic',
  tmeLoginType: 2,
  uin: '0', // QQ 号
  wid: '1111111111111111111' // 随机
}

sign

对请求进行签名。

const { sign } = require('@jixun/qmpc-sign');

const signed = sign(session, {
  // RPC 请求载荷,抓包获取。
  // 键名可以自定义,返回值会写道对应的键名内。
  // 你也可以同时在单个载荷内放入多个 RPC 请求。
  GetCdnDispatch: {
    method: 'GetCdnDispatch',
    module: 'music.audioCdnDispatch.cdnDispatch',
    param: {
      ctx: 1,
      guid: 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',
      referer: 'y.qq.com',
      scene: 0,
      uin: '0',
    },
  },
}, Date.now() / 1000);

// signed 对象:
{
  // 请求地址
  url: 'https://u.y.qq.com/cgi-bin/musics.fcg?pcachetime=1577808000000',
  // POST 数据
  payload: '{\n' +
    '   "GetCdnDispatch": {\n' +
    '      "method": "GetCdnDispatch",\n' +
    '      "module": "music.audioCdnDispatch.cdnDispatch",\n' +
    '      "param": {\n' +
    '         "ctx": 1,\n' +
    '         "guid": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",\n' +
    '         "referer": "y.qq.com",\n' +
    '         "scene": 0,\n' +
    '         "uin": "0"\n' +
    '      }\n' +
    '   },\n' +
    '   "comm": {\n' +
    '      "_channelid": "20",\n' +
    '      "_os_version": "6.2.9200-2",\n' +
    '      "authst": "",\n' +
    '      "ct": "19",\n' +
    '      "cv": "1910",\n' +
    '      "guid": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",\n' +
    '      "patch": "118",\n' +
    '      "psrf_access_token_expiresAt": 0,\n' +
    '      "psrf_qqaccess_token": "",\n' +
    '      "psrf_qqopenid": "",\n' +
    '      "psrf_qqunionid": "",\n' +
    '      "tmeAppID": "qqmusic",\n' +
    '      "tmeLoginType": 2,\n' +
    '      "uin": "0",\n' +
    '      "wid": "1111111111111111111"\n' +
    '   }\n' +
    '}\n',
  // 请求头的签名
  // 注意签名不唯一,相同的输入可以产生不一致的签名。
  headers: {
    Mask: 'Sz2D+HqrdhBiaYi3e0/x9emfd83mI6ULZW4TJ0Ner3qhOhtw6b/X9edloNSKwQrg1k883EkzlHGxQEr96ExCL/qxc8v+SxJb',
    Sign: 'VUFCRVNFRllBWEdMZ2SNnW8tjDMjgwMMHran2uIiw7Q='
  }
}

// 发送请求(如 axios)
axios.post(signed.url, signed.payload, {
  headers: {
    ...signed.headers,
    Cookie: '有些接口需要 Cookie,抓包后填入此处。'
  },
});

关于授权 / About license

不附带原始形式的源码。经过编译、最小化处理后的代码以 MIT 授权协议分发。当然,你也可以选择逆向并创造你自己的版本。

The original source code is not included. The compiled and minified code is distributed under the MIT license. You are also free to reverse engineer and create your own version.

Readme

Keywords

none

Package Sidebar

Install

npm i @jixun/qmpc-sign

Weekly Downloads

1

Version

0.0.6

License

MIT

Unpacked Size

340 kB

Total Files

5

Last publish

Collaborators

  • jixunmoe