花了一整天调试,都快吐血的节奏,最终发现问题还是出在微信支付SDK。坑爹的微信支付Demo。
最近在开发一个公众号,要调用微信支付完成在线订单的支付功能。了解玩微信支付流程后就开始撸码,调试,我直接从微信支付官网下载Demo,添加SDK源码到工程,采用jsapi方式在前段调用微信支付,统一下单没有任何问题,微信支付成功返回prepay_id, 接着要做的是二次签名返回前端调起微信支付,但是前段一直报支付签名验证错误,一直怀疑是二次签名发送的参数有问题,网上百度,遇到相同问题的人还不少,但是能给出解决方案的文章基本没有,没有办法只能一行一行代码撸,最后发现是在调用统一下单时微信Sdk先是判断是否是沙箱环境,如果不是沙箱环境,签名类型是HMACSHA256, 但是微信支付SDK默认的签名类型是MD5, 如果你二次签名的时候发送参数使用默认的signType,自然就导致两次签名类型不一致,调起微信支付时就会报签名认证错误。
下面贴上更改后的源码截图,如有问题可以私信我