开发文档
当前接口已启用高强度 v2 安全协议。所有应用接口必须使用 POST、HMAC-SHA256 签名、时间戳和一次性 nonce;旧版 MD5 Sign、GET 直连和 URL 带 key 的方式已不再兼容。
协议规则
传输方式:正式环境必须使用 HTTPS
提交方式:POST
返回格式:JSON
请求签名:v2 HMAC-SHA256
防重放:security_timestamp + security_nonce
字符编码:UTF-8
当前接口已启用高强度 v2 安全协议。所有应用接口必须使用 POST、HMAC-SHA256 签名、时间戳和一次性 nonce;旧版 MD5 Sign、GET 直连和 URL 带 key 的方式已不再兼容。
传输方式:正式环境必须使用 HTTPS
提交方式:POST
返回格式:JSON
请求签名:v2 HMAC-SHA256
防重放:security_timestamp + security_nonce
字符编码:UTF-8
以卡密登录为例,请求地址:
POST /api.php?api=kmlogon&app=YOUR_APP_ACCESS_CODE
业务参数示例:
kami=YOUR_CARD_KEY markcode=DEVICE_UNIQUE_ID
每次请求必须额外提交安全参数:
security_version=2 security_timestamp=当前Unix秒级时间戳 security_nonce=16到96位随机字符串,每次请求必须不同 security_sign=HMAC-SHA256签名结果
签名原文按下面顺序拼接,换行符为 \n:
app-api-v2 POST kmlogon YOUR_APP_ACCESS_CODE security_timestamp security_nonce auth_token或留空 按参数名升序排序后的业务参数查询串
业务参数查询串只包含真正业务参数,不包含 api、app、security_version、security_timestamp、security_nonce、security_sign、sign、auth_token、data、value、PHPSESSID 等安全或系统字段。编码规则使用 RFC3986 URL 编码。签名原文里的 app 字段必须和请求地址里的 app 参数完全一致。
canonical_params = kami=YOUR_CARD_KEY&markcode=DEVICE_UNIQUE_ID security_sign = hex_hmac_sha256(canonical_string, APPKEY)
卡密登录成功后会返回 auth_token、server_sign、server_sign_alg、server_key_id、server_key_scope、server_public_key、request_nonce、server_time。客户端应校验 request_nonce 等于本次 nonce,并使用该应用预置的服务端公钥校验 server_sign,防止假接口伪造授权成功。
server_sign_alg = RSA-SHA256 server_sign = base64url(rsa_sha256_sign(canonical_json_without_server_sign, SERVER_PRIVATE_KEY)) 客户端验签 = rsa_sha256_verify(canonical_json_without_server_sign, server_sign, PINNED_APP_PUBLIC_KEY)
注意:每个应用可以配置独立响应签名私钥/公钥。server_public_key 仅用于展示和更新公钥,客户端不能只信任响应里带回的公钥;正式客户端必须内置当前应用访问码对应的固定公钥或固定 server_key_id。
云API只允许 POST 请求,不允许在 URL 中携带 key 或 token。
POST /api/cloud_api.php?act=cloud_user X-Cloud-Key: 平台API_KEY或用户API_KEY X-Cloud-Version: 2 X-Cloud-Timestamp: 当前Unix秒级时间戳 X-Cloud-Nonce: 16到96位随机字符串 X-Cloud-Signature: HMAC-SHA256签名
云API签名原文按下面顺序拼接,换行符为 \n:
cloud-api-v2 POST cloud_user X-Cloud-Timestamp X-Cloud-Nonce 按参数名升序排序后的业务参数查询串
业务参数查询串不包含 key、token、act、sign、security_sign、security_version、security_timestamp、security_nonce 等安全或系统字段。重复 nonce 会被拒绝。