$payload 是按发卡接口填写的业务参数;$idempotencyKey 是业务侧生成并保存的幂等键,同一业务重试复用。data 和本地请求 ID 交给 SDK 解密。post() 自动验签;decryptSensitiveEnvelope() 自动核对指纹、重建 AAD 并解密。任一步抛出异常时停止处理。handle() 自动验签、检查接收方并解密。失败时不返回成功;不要先解析再重新序列化原始请求体。| 配置 | 用途 |
|---|---|
| 平台鉴权公钥 | 验证响应和 Webhook 签名 |
| 平台加密公钥及指纹 | 加密发送给平台的请求 |
| 客户端加密私钥及配对公钥指纹 | 解密并核对信封接收密钥 |
| 接收方 API Key 业务 ID | Webhook 接收方校验及 AAD;从开发者中心对应 API Key 取得 |
SHA256:<64 位小写 hex>,摘要对象为公钥的 SPKI DER 字节。指纹不匹配时,到开发者中心核对该 API Key 登记的加密公钥及轮换记录;不要直接信任信封提供的指纹。{
"algorithm": "RSA-OAEP-AES-256-GCM",
"keyFingerprint": "SHA256:<公钥指纹>",
"encryptedKey": "<标准 Base64>",
"ciphertext": "<标准 Base64>",
"aad": "<标准 Base64>"
}envelopeVersion: 1。敏感 API 响应的信封位于 data,Webhook 信封是整个请求体。| 项目 | 规则 |
|---|---|
| 密钥包装 | RSA-OAEP,SHA-256、MGF1-SHA-256,空 Label |
| 内容加密 | AES-256-GCM,32 字节密钥、12 字节 IV、16 字节 Tag |
ciphertext 布局 | 将 IV、密文、Tag 按顺序拼接,再进行 Base64 编码 |
| 明文 | UTF-8 JSON |
encryptedPayload 不作为解密输入。| 连接后取 UTF-8 字节。使用本地上下文重建,再与严格 Base64 解码后的信封 aad 做长度校验及常量时间比较。| 场景 | 第 1 段 | 第 2 段 | 第 3 段 | 第 4 段 |
|---|---|---|---|---|
| 加密请求 | 本次请求 ID |