如何验证回调通知的合法性?易支付签名校验教程
最近不少开发者在集成支付接口时,最头疼的就是回调通知的验证问题。明明流程都对,可就是验签失败,资金安全怎么保障?今天咱们就掰开揉碎讲讲易支付的签名校验,帮你彻底搞懂这套机制。
一、回调通知到底在传什么?
支付平台在完成交易后,会向商户服务器发送一个POST请求,这就是回调通知。它包含了订单号、金额、状态等关键数据,但最核心的是那个sign字段——这就是验证合法性的钥匙。很多人直接忽略这个参数,结果就是“裸奔”接回调,风险极大。
二、签名校验的实战步骤
别被“加密解密”吓到,其实流程就三步:
1. 按规则拼接参数
先把接收到的所有参数(除了sign本身)按字母序排序,然后用&key=你的商户密钥的方式拼接成字符串。注意,空值和sign字段必须排除!
2. 生成签名摘要
对拼接后的字符串进行MD5加密(或平台指定的算法),得到本地计算的签名值。这里有个坑:字符编码必须统一用UTF-8,否则中文字符一搅和就全乱套。
3. 比对签名一致性
把你计算出的签名和回调中的sign值做严格比较。这里必须用===全等判断,避免类型转换的陷阱。匹配成功才说明通知真实有效。
三、常见翻车点与排查技巧
我见过太多案例是因为细节翻车的:
• 密钥弄混:测试环境和生产环境的密钥不同,切换时忘记更新
• 参数漏排:嵌套的数组参数需要特殊处理,直接json_encode会丢数据
• 编码问题:服务器默认编码不是UTF-8时,中文字符签名的结果必然对不上
建议在验签逻辑里加个日志,把拼接的原始字符串和双方签名值都记录下来。一旦出错,立马能定位到是哪个环节掉了链子。
