问题:sdk非沙盒环境所有的签名方式都是HMACSHA256,沙盒环境为MD5
描述:在调用官方sdk(java 3.0.9)提供的统一下单api ( unifiedOrder )时,返回签名报错,跟踪了一下代码,发现是官方sdk使用的签名方式错了,在Java sdk 中,只有配置在沙盒模式,才会使用MD5签名,所以如果生产环境则会报错。在微信支付文档中统一下单api签名方式要求为MD5 (文档地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3)
具体错误:com.github.wxpay.sdk.WXPay
这里如果配置了沙箱环境,则签名方式为MD5
由于未使用上面的沙箱画家,所以在下面签名时使用了SHA256,导致签名错误
统一下单方法会调用上面的fillRequestData方法
以上,
请官方跟新
ps:官方Java sdk的使用文档太…也应该更新了,比如3.0.9中是没有以下文档中提到的两个方法的,如下图所示
最新测试,发现不用MD5加密也可以成功……
虽然API可以下单成功,但是当我使用下单成功的数据进行MD5签名后返回给APP端,然后APP使用这些数据去唤起支付页面时会告知签名错误。所以还是需要改成下单前的签名还是需要MD5。这个错误隐藏的挺深的。。。
2022-2-7。下载下来的SDK 使用的是生产的商户信息,跑了一下报错
java.lang.NullPointerException
at com.github.wxpay.sdk.WXPayRequest.request(WXPayRequest.java:122)
at com.github.wxpay.sdk.WXPayRequest.requestWithoutCert(WXPayRequest.java:232)
at com.github.wxpay.sdk.WXPay.requestWithoutCert(WXPay.java:158)
at com.github.wxpay.sdk.WXPay.unifiedOrder(WXPay.java:364)
at com.github.wxpay.sdk.WXPay.unifiedOrder(WXPay.java:340)
at com.github.wxpay.sdk.Test.main(Test.java:30)
Disconnected from the target VM, address: '127.0.0.1:52995', transport: 'socket'
一开始,我还不相信,经过验证后,我才发现怎么大公司的大佬也能这么不负责了。无奈
哥,我是一个java开发初学者,我的微信支付,3.0.9版本的依赖导入不就去(maven镜像是阿里的),你可以给我他的 jar包吗?或者有没有其他方式导入 3.0.9的SDK版本