SDK中 WXPay wxpay = new WXPay(config, true, false);
第三个参数是指是否使用沙箱环境,这里正式环境我们下意识的会选择false,但是,如果你选择了false那么signType就选择的是HMACSHA256,而我们以后的操作如果用的MD5加密,这里就仍然报:支付验证签名失败!另外说一点,这个交流专区真的太不友好了,关于支付签名失败的帖子有1000多页,客服的回答永远是文档上的介绍,建议把这一点加载文档里。而解决问题的人大多数就写已经解决了,而不写原因。
同发现这个问题。自己改了一下:
public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception { this.config = config; this.notifyUrl = notifyUrl; this.autoReport = autoReport; this.useSandbox = useSandbox; if (useSandbox) { this.signType = SignType.MD5; // 沙箱环境 } else { // this.signType = SignType.HMACSHA256; this.signType = SignType.MD5; } this.wxPayRequest = new WXPayRequest(config); }
第一次签名和第二次签名都是可以的,和官方的一模一样,但是调起APP支付就报错“签名失败”,看了你的这个文章,也是一个个试的,最终OK了。
就算签名的时候选择了签名方式HMACSHA256,但是在new WXPay也需要指定 这个signType。官方就不能整理一下这些问题吗?
感谢您的建议与反馈~您描述的问题我们将记录并放入社区常见QA中。
我们支付社区马上要推出专门的反馈入口,方便开发GG、MM反馈社区及文档问题,提升大家的使用体验,感谢您的持续关注~