签名 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"
}