小程序调起支付需要通过调用wx.requestPayment(OBJECT)发起微信支付,详见小程序API文档
V2版接口和V3版接口规则差异说明:
- 参数格式:V2接口为XML,V3接口为JSON
- 签名方式:V2接口为MD5或HMAC-SHA256,V3接口为非对称密钥SHA256-RSA
- 回调加密:V2接口无需加密,V3接口为AES-256-GCM加密
本文章主要协助开发者定位小程序调起支付返回签名验证失败报错的问题,大家可根据以下步骤逐步排查。
V2版本排查步骤:
步骤一、签名类型与下单时的签名类型不一致
检查调起支付的签名类型是否与下单一致,比如下单是HMAC-SHA256,而调起支付用的是MD5
步骤二、生成签名原串的参数和实际请求参数不一致
检查生成签名串的参数与实际发起请求的参数是否一致,例如生成签名时的时间戳、随机串与实际发起请求的不一致
步骤三、调起支付时的大小写不正确
检查客户端调用时的传参是否正确,注意参数是否区分大小写,参数大小写不正确将会导致签名错误
步骤四、使用的API版本不一致
检查下单和调起支付时使用的API版本是否一致,比如下单用的V2版本的API,而调起支付又参考的是V3的API来实现。
步骤五、使用的商户号信息不一致
检查下单和调起支付时使用的商户号是否一致,比如下单用的是A商户号,而调起支付又使用的是B商户号的信息生成签名
步骤六、使用的key不正确
需要用APIv2密钥生成签名, key设置路径:微信商户平台(pay.weixin.qq.com)-->账户中心-->账户设置-->API安全-->设置API密钥
步骤七、没有重新生成签名
调起支付的签名需要重新按照调起支付文档中规定的参数和要求生成,而不能直接使用统一下单接口的签名值(sign)
V3版本排查步骤:
步骤一、生成签名原串的参数和实际请求参数不一致
检查生成签名串的参数值与客户端实际发起请求的参数值是否一致
步骤二、调起支付时构造签名串的字段和格式不正确
检查调起支付时构造签名串格式是否正确,参与签名字段及格式应是:
步骤三、调起支付时的大小写不正确
检查客户端调用时的传参是否正确
步骤四、使用的API版本不一致
检查下单和调起支付时使用的API版本是否一致,比如调起支付参考的V3的API规则实现,而下单用的V2统一下单。
步骤五、使用的商户号信息不一致
检查下单和调起支付时使用的商户号是否一致,比如下单用的是A商户号,而调起支付又使用的是B商户号的信息生成签名
步骤六、没有重新生成sign
调起支付的签名(paySign)需要重新按照调起支付文档中规定的参数和要求生成,而不能直接使用下单接口的签名值(signature)
如通过以上步骤仍然无法解决你的问题,可以在帖子提供关键信息(比如签名工具中的截图和通过postman请求报错)并留言,记得对敏感信息打码,比如key,mch_id,appid等
附录:
1、SDK与相关API规则介绍
- 微信支付API v3 SDK介绍
- 验签工具使用指引
- 微信支付官方提供的排查签名步骤介绍
- 小程序调起支付版本文档(V3普通商户版本)
- 小程序调起支付版本文档(V2普通商户版本)
- 小程序调起支付版本文档(V3服务商版本)
- 小程序调起支付版本文档(V2服务商版本)