基于官方文档
使用时,需修改body(请求完整字符串),API key,及Service(使用的服务的名称)等。
如频繁验证失败,建议根据官方API explorer中的签名生成功能逐步检查生成过程。
复现程序时遇到的几个坑:
1.hmac 256算法的返回值使用的是二进制表示,在四次反复运算后才通过十六进制转换变为最终输出的签名
2.加密算法的输入值应为二进制,部分字符串需要进行解码
3.时间和日期统一使用utc时间和日期
import hashlib, time
import hmac
# based on https://cloud.tencent.com/document/api/213/30654
def HMAC_SHA256(key, data):
"""请注意,不同的编程语言,HMAC 库函数中参数顺序可能不一样,请以实际情况为准。
此处的伪代码密钥参数 key 在前,消息参数 data 在后。
通常标准库函数会提供二进制格式的返回值,也可能会提供打印友好的十六进制格式的返回值,此处使用的是二进制格式。"""
print(type(key), type(data))
return hmac.new(key, data, digestmod=hashlib.sha256).digest