接收 Webhooks
Webhooks 的签名采用对称密钥加密策略,即 QI CTVM 和集成合作伙伴共享同一密钥。 配置 Webhooks 时,我们将生成一个 Signature Key 并提供给您。QI 系统发出的每个请求都将携带一个 SIGNATURE header,该 header 是用此密钥签名的 JWT。编码使用 HS256 算法。
该 token 携带以下 claims:
| Claim | 描述 |
|---|---|
timestamp | 生成签名的 UTC 日期时间,格式为 YYYY-MM-DDTHH:MM:SS。 |
method | 请求的 HTTP 方法,始终为 POST。 |
uri | 配置用于接收 webhook 的完整 URL。 |
payload_md5 | 请求体的 MD5 值(十六进制)。存在请求体时始终携带。 |
请求体不会被直接签名。如需校验完整性,请解码 token 并将 payload_md5 与所收到请求体的 MD5 值进行比对。
以下是使用 Python 对签名进行解码的示例:
from jose import jwt
signature_key = "CHAVE UNICA CONFIGURADA"
signature_token = headers["SIGNATURE"]
decoded_token = jwt.decode(signature_token, key=signature_key, algorithms=["HS256"])
print(decoded_token)
我们建议集成合作伙伴除了验证签名外,还应验证我们的 IP 地址,因为我们所有请求都来自同一 IP,具体 IP 根据环境而定:
| 环境 | IP |
|---|---|
| 生产 | - |
| 沙盒 | - |
注意!
QI CTVM 的 webhooks 不应以严格方式映射。 我们的 API 返回的 webhook 载荷中可能会包含额外字段。