小程序中虚拟支付的签名验证机制
订阅
虚拟支付含两套签名:paySig用于支付与管理接口校验,signature验证用户会话;需严格统一postBody、区分环境密钥、使用UTF-8及小写十六进制输出。
虚拟支付涉及 两套独立的签名体系,开发者在服务端必须严格按照规范准确实现。
一、支付签名:paySig
1. 适用场景:
- 前端基础库接口
wx.requestVirtualPayment拉起支付时的参数校验 - 服务端请求
/xpay/*各类管理接口时的权限验证
2. 计算公式:
paySig = HMAC-SHA256(appKey, uri + "&" + postBody)
• 客户端拉起支付时,uri 固定填 requestVirtualPayment
• 服务端调用 API 时,uri 为真实请求路径(例如 /xpay/query_order)
• postBody 为请求发送的原始 JSON 字符串
二、用户态签名:signature
1. 适用场景:
- 前端基础库
wx.requestVirtualPayment校验用户会话有效性 - 部分需绑定用户登录态的服务器接口
2. 计算公式:
signature = HMAC-SHA256(sessionKey, postBody)
• sessionKey 通过后端调用 auth.code2Session 凭证接口获取
三、签名避坑与核心注意事项
- 原始请求体一致:参与计算签名的
postBody必须与最终 HTTP 发送的 Payload 字符串完全一致,不能二次序列化或改变 JSON 字段顺序。 - 区分环境密钥:
env=0(现网环境)使用现网 AppKey;env=1(沙箱环境)必须使用沙箱 AppKey。 - 编码格式:使用 UTF-8 编码,HMAC 输出应转为 64 位十六进制小写字符串(Hex)。
阅读全文

请先 登录后发表评论 ~