Acidify

签名 API 标准

Yogurt 不提供内置签名 API,请自行寻找或实现相关 API。本章节仅介绍 Yogurt 遵循的签名 API 标准规范,供开发者参考或使用者检查签名是否符合规范之用。

PC 签名(Lagrange V2)

设配置文件中的 protocol.signApiUrl 为 $BASE,protocol.pcLagrangeSignToken 为 $TOKEN。$BASE 应为签名服务的基础地址,Yogurt 会自动追加 /api/sign/sec-sign 路径。

POST $BASE/api/sign/sec-sign

提供签名功能,使用 Bearer Token 进行身份验证。

请求示例

POST $BASE/api/sign/sec-sign HTTP/1.1
Authorization: Bearer $TOKEN
Content-Type: application/json

{
  "command": "wtlogin.login",
  "seq": 100,
  "body": "0123456789abcdef",
  "uin": 1234567890,
  "guid": "0123456789abcdef0123456789abcdef",
  "qua": "V1_LNX_NQ_3.2.19_39038_GW_B"
}

其中:

  • command 为待签名数据包的命令名;
  • seq 为数据包序列号;
  • body 为待签名数据包内容的 HEX 字符串;
  • uin 为配置文件中的 protocol.uin,是 JSON 数字;
  • guid 为当前登录设备的 GUID,以 HEX 字符串表示;
  • qua 由协议类型和所用 AppInfo 的版本生成,格式为 V1_{平台}_NQ_{版本}_GW_B。平台分别为 WIN、MAC 或 LNX,版本为 CurrentVersion 中的 - 替换为 _ 后的字符串。

响应示例

{
  "code": 0,
  "message": "",
  "value": {
    "sec_sign": "0123456789abcdef",
    "sec_token": "0123456789abcdef",
    "sec_extra": "0123456789abcdef"
  }
}

其中:

  • code 的值为 0 表示成功,非 0 表示失败;
  • message 为错误信息,成功时可以为空字符串,也可以省略或为 null;
  • value 在成功时必须包含,缺失或为 null 时 Yogurt 也会视为签名失败;
  • value 中的 sec_sign、sec_token 和 sec_extra 为签名所需字段,必须是 HEX 字符串或空字符串。

Android 签名

设配置文件中的 protocol.signApiUrl 为 $BASE。

POST $BASE/sign

提供签名功能。

请求示例

POST $BASE/sign HTTP/1.1
Content-Type: application/json

{
  "uin": 1234567890,
  "cmd": "wtlogin.login",
  "buffer": "0123456789abcdef",
  "guid": "0123456789abcdef0123456789abcdef",
  "seq": 100,
  "version": "9.2.20",
  "qua": "V1_AND_SQ_9.2.20_11650_YYB_D"
}

响应示例

{
  "code": 0,
  "msg": "",
  "data": {
    "sign": "0123456789abcdef",
    "token": "0123456789abcdef",
    "extra": "0123456789abcdef"
  }
}

其中:

  • code 的值为 0 表示成功,非 0 表示失败,下同;
  • msg 的值为错误信息,成功时可以为空字符串,下同;
  • data 在 code 为 0 时必须包含;在 code 非 0 时不应包含,下同。

POST $BASE/energy

用于获取 TLV 0x544 所需的字节序列。

请求示例

POST $BASE/energy HTTP/1.1
Content-Type: application/json

{
  "uin": 1234567890,
  "data": "810_9",
  "guid": "0123456789abcdef0123456789abcdef",
  "ver": "6.0.0.2589",
  "version": "9.2.20",
  "qua": "V1_AND_SQ_9.2.20_11650_YYB_D"
}

响应示例

{
  "code": 0,
  "msg": "",
  "data": "0123456789abcdef"
}

其中 data 必须是 HEX 字符串。

POST $BASE/get_tlv553

用于获取 TLV 0x553 所需的字节序列(Debug XWID)。

请求示例

POST $BASE/get_tlv553 HTTP/1.1
Content-Type: application/json

{
  "uin": 1234567890,
  "data": "810_9",
  "guid": "0123456789abcdef0123456789abcdef",
  "version": "9.2.20",
  "qua": "V1_AND_SQ_9.2.20_11650_YYB_D"
}

响应示例

{
  "code": 0,
  "msg": "",
  "data": "0123456789abcdef"
}

其中 data 必须是 HEX 字符串。

Android 签名(Legacy)

此节介绍的是已成为另一种既定标准的 Android 签名 API 规范,仍有部分用户在使用,且 Yogurt 仍然支持此种规范的签名 API,因此在此保留相关说明。在使用 Legacy 签名 API 时,请将 config.json 中的 protocol.androidUseLegacySign 设为 true。

设配置文件中的 protocol.signApiUrl 为 $BASE。

POST $BASE/sign

提供签名功能。

请求示例

POST $BASE/sign HTTP/1.1
Content-Type: application/json

{
  "uin": 1234567890,
  "cmd": "wtlogin.login",
  "buffer": "0123456789abcdef",
  "guid": "0123456789abcdef0123456789abcdef",
  "seq": 100,
  "version": "9.2.20",
  "qua": "V1_AND_SQ_9.2.20_11650_YYB_D",
  "android_id": "d4573bde6663bb55",
  "qimei36": "0123456789abcdef0123456789abcdef"
}

响应示例

{
  "code": 0,
  "msg": "",
  "data": {
    "sign": "0123456789abcdef",
    "token": "0123456789abcdef",
    "extra": "0123456789abcdef"
  }
}

POST $BASE/energy

用于获取 TLV 0x544 所需的字节序列。

请求示例

POST $BASE/energy HTTP/1.1
Content-Type: application/json

{
  "uin": 1234567890,
  "data": "810_9",
  "guid": "0123456789abcdef0123456789abcdef",
  "ver": "6.0.0.2589",
  "version": "9.2.20",
  "qua": "V1_AND_SQ_9.2.20_11650_YYB_D"
}

响应示例

{
  "code": 0,
  "msg": "",
  "data": "0123456789abcdef"
}

On this page