接入文档

从拿到密钥到客户端跑通验证,大约需要 30 分钟。

快速开始

接入流程分四步:创建应用拿到密钥 → 签发授权码 → 客户端调用验证接口 → 用心跳维持在线状态。下面按顺序说明每个环节需要做什么。

  • 所有接口均为 POST,请求体 application/json 或表单均可。
  • 响应统一为 {"code": 200, "msg": "..."},code != 200 即为失败,msg 可直接展示给用户。
  • 时间戳与 nonce 用于防重放,服务端会校验有效期与一次性。

1. 准备密钥

在控制台创建应用后会得到两个值:

  • appid — 应用标识,请求时放在请求体里。
  • app_secret — 签名密钥,只能放在客户端本地且需要做代码混淆,不要明文写进前端网页。

密钥泄露可以在控制台一键重置,重置后旧密钥立即失效,已签发的会话不受影响。

2. 签名规则

签名串由「时间戳 + nonce + 请求体的紧凑 JSON」拼成,用 app_secret 做 HMAC-SHA256,输出小写十六进制:

// 伪代码 payload = timestamp + nonce + JSON.stringify(body) sign = hmac_sha256(payload, app_secret).toLowerCase() // 放进请求头 X-Timestamp = timestamp X-Nonce = nonce X-Request-Signature = sign

timestamp 为秒级时间戳,与服务器时间偏差超过 5 分钟会被拒绝;nonce 为一次性随机串,重复使用会被判定为重放。

3. 验证授权码

接口:POST /api/verify_key

{ "key": "A1B2C3D4E5F6", "machine_id": "设备唯一标识", "appid": "你的应用ID", "platform": "all" }

成功后返回 code: 200,同时下发会话令牌,客户端后续心跳与业务接口都带这个令牌。失败时按 msg 提示用户即可,不需要自己猜原因。

几个常见分支:

  • 授权码不存在或格式非法 → 400,提示用户检查输入。
  • 已过期、已冻结、被强制下线 → 403,提示具体原因。
  • 剩余次数不足 → 402,提示续费。

4. 保持在线

客户端登录成功后,按固定间隔调用 POST /heartbeat 上报在线状态。服务端据此维护在线设备列表、窗口占用和超时回收。

  • 建议间隔 30–60 秒,过短会增加无谓请求。
  • 连续多个周期没有心跳,服务端会释放该设备占用的窗口,其他设备可以顶上。
  • 心跳返回 403 时说明授权已失效,客户端应退出登录并提示用户。

错误码

code含义客户端处理建议
200成功继续业务流程
400参数错误 / 格式非法提示用户检查授权码与设备信息
401签名无效或会话过期重新签名或重新登录
402次数不足引导续费
403无权限 / 已冻结 / 强制下线退出登录并展示 msg
429请求过于频繁退避后重试
500服务端异常稍后重试,持续出现请联系客服

常见问题

  • 能同时登录多台设备吗?看授权码绑定的设备数上限,超限时新设备会被拒绝,可在控制台主动解绑。
  • 换了电脑怎么办?支持自助解绑或联系管理员解绑,解绑次数按策略限制。
  • 错误码 401 一直出现?先确认客户端时间是否准确,时间偏差过大会导致签名校验失败。
  • 接口有并发限制吗?有,按应用和 IP 双重限流,超限返回 429,建议客户端做退避重试。