易支付安全、低费率、实时到账

易支付回调验证签名失败-易支付签名算法与调试

对接易支付时,回调通知能收到,但签名验证总失败 —— 订单状态不敢同步,怕收到伪造请求!这是技术对接的高频卡点,大多不是算法难,而是细节没注意。这篇从签名原理讲到调试技巧,带实操案例,帮你快速定位问题。

一、先懂原理:易支付签名的核心逻辑

易支付用 “参数排序 + 密钥拼接 + 哈希算法” 生成签名,确保数据没被篡改:

  1. 取回调通知中的所有非空参数(除 sign 字段),按参数名 ASCII 码升序排序;

  2. 按 “key=value” 格式拼接成字符串,末尾加上 “&key = 商户 API 密钥”;

  3. 用指定算法(MD5 或 SHA256,以文档为准)加密,得到的字符串就是 sign 值,与回调中的 sign 对比,一致则验证通过。


二、签名失败:4 个高频原因与调试

1. 密钥不匹配(占比 40%)

・问题:用了测试环境密钥却对接生产环境,或密钥复制时多了空格 / 少了字符;・调试:登录易支付商户后台,在 “开发者中心 - API 密钥管理” 确认当前使用的密钥,重新复制粘贴,避免手动输入错误。

2. 参数处理错误

・排序错:没按 ASCII 升序,比如把 “out_trade_no” 排在 “total_fee” 后面(o 的 ASCII 码大于 t,应反过来);・漏参数:漏掉回调中的必选参数(如 trade_status),或误删空值参数(易支付规定非空才参与排序);・调试:打印参与签名的参数列表,逐一核对排序和完整性,用在线 ASCII 排序工具校验。

3. 编码或算法问题

・编码:中文参数未做 UTF-8 编码,导致加密后字符串不一致;・算法错:文档要求 SHA256 却用了 MD5,或加密后未转大写(易支付签名默认大写);・调试:检查代码中编码格式和算法类型,用在线加密工具(如 MD5 在线加密)手动计算签名,与回调 sign 对比。

三、调试工具与避坑表

工具 / 场景用途注意事项
在线 ASCII 排序校验参数排序是否正确区分参数名大小写(易支付参数名统一小写)
MD5/SHA256 在线加密手动计算签名,对比回调 sign拼接字符串必须和代码中完全一致(含 & key = 密钥)
日志打印记录参与签名的参数、拼接串、计算出的 sign避免泄露 API 密钥,日志打印后及时删除

FAQ

问:易支付回调验证签名失败 - 易支付签名算法与调试中,手动算签名一致但代码仍错?答:大概率是代码中参数拼接有隐藏字符(如换行符),或编码格式不统一,仔细核对代码中的字符串处理逻辑。

结尾

签名验证失败不用死磕算法,重点查密钥、参数、编码这三个细节。先手动计算签名定位问题,再对照代码调试,基本都能解决。若仍有卡点,可联系易支付技术支持,提供签名过程截图,高效排查!

返回顶部