请求头齐全但仍返回签名错误。大鹏云 API 采用 HMAC-SHA256 签名,签名密钥是 Secret 的 SHA-256 值,任何一个环节不一致都会导致验签失败。
常见原因
- 签名密钥用错:应使用 Secret 的 SHA-256 值作为 HMAC 密钥,而不是 Secret 原文;
- 待签名字符串拼接顺序、分隔符或大小写与文档不符;
- URL 编码不一致(参数在拼接前后被重复编码);
- X-Timestamp 与签名时使用的时间戳不是同一个值;
- 输出未转为小写十六进制(hex)格式。
排查步骤
- 严格按文档顺序拼接待签名字符串,逐字符核对拼接结果。
- 计算签名密钥:
signKey = sha256_hex(你的Secret)
signature = hmac_sha256_hex(signKey, 待签名字符串)
- 用命令行手工验证一次,与程序输出对比:
echo -n "你的Secret" | sha256sum
echo -n "待签名字符串" | openssl dgst -sha256 -hmac "signKey"
- 确认整个请求周期内只生成一次 X-Timestamp,签名与发送使用同一值。
- 检查参数是否被框架自动做了二次 URL 编码,保持原文参与签名。
提示:最常见的错误就是忘记对 Secret 先做一次 SHA-256,以及时间戳前后不一致,请优先检查这两点。
仍未解决
请通过「支持服务 → 工单」反馈,附上:待签名字符串、计算出的签名、完整请求示例(Secret 请勿提交)与返回报文,客服将协助比对定位。