2021年01月15日,第1次分享文档,新冠肺炎全球传染;在家办公中....
文章关键词:微信支付、APIv3接口、wechatpay-apache-httpclient、Certificate Downloader、微信支付V3接口、应答的微信支付签名验证失败、密钥、证书
微信支付接口升级到APIv3,主要升级两个方向:1.采用JSON数据交互 2.使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256;
调用接口需要:签名生成、签名验证、证书、公钥、私钥等概念的技术;为了快手入手,打算使用官方提供的wechatpay-apache-httpclient(微信支付API v3的Apache HttpClient扩展,实现了请求签名的生成和应答签名的验证);
需要配置:商户号、商户证书序列号、商户私钥、微信支付平台证书,标红的配置就是出现问题的关键,也是微信支付社区里很多人遇到的问题;
其它的配置信息可以按照微信支付官方文档进行操作就可以获得,但是把“商户API证书”apiclient_cert.pem配置成了“微信支付平台证书”,意外的是接口可以调通,可我下断点去看返回数据时,无法获取到返回response对象,后来发现是wechatpay-apache-httpclient包
里面抛异常了:signature verify fail: serial= 也就是“应答的微信支付签名验证失败”,原因就是配置错了“微信支付平台证书”;
下一步就是搞到它,在官网文档里没有找到怎么获取它方法,只是知道了https://api.mch.weixin.qq.com/v3/certificates这个接口,可惜它返回的是json,并不是直接的“微信支付平台证书”;不能获取到....
继续查看官方文档,发现了微信支付平台证书下载工具(Certificate Downloader),可以配置运行源代码,或直接下载jar包,运行包:
java -jar CertificateDownloader-1.1.jar -f 商户私钥文件路径/apiclient_key.pem -k 证书解密的密钥 -m 商户号 -o 微信支付平台证书保存路径 -s 商户证书序列号
这样就获取到微信支付平台证书,解决了"应答的微信支付签名验证失败"