总结一下微信扫码支付小程序支付的几个坑
Posted TuskueNeko
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结一下微信扫码支付小程序支付的几个坑相关的知识,希望对你有一定的参考价值。
在调用微信支付接口中遇到各种问题,真不知道是哪个人才写的接口文档,几个简单的接口调了好几天。
1、小程序获取code2Session时errcode出错时是会返回错误码,但正常时居然连这个字段都不返回了,说好的正常返回0呢?
2、小程序支付的时间戳参数,在调用小程序支付接口时需要后台生成签名,有个timeStamp参数,文档上写的是当前时间,注意这里有个坑,它要的是到秒级别的,如果用java直接System.currentTimeMillis() 是不行的!会提示签名错误!
正确做法是: System.currentTimeMillis() / 1000
3、小程序支付签名时key是要拼接的,文档上没有写明,示例上是写的了搞得不知道以哪个为准。
4、建议所有签名统一MD5,否则 不知道哪个地方默认了其它签名就会签名通不过
5、小程序支付,也就是交易类型是JSAPI的情况下是要传openId的,另外appId appkey sercrt mechId 等有一个不对应就会报签名失败,这点要注意。
6、微信支付demo里代码的一个大坑,其中有一段:
public WXPay()
if(useSandBox)
signType = MD5;
else
signType = HMACSHA256
注意这里一定要改下,改成统一的MD5 :
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
//TODO 默认用MD5
this.signType = SignType.MD5;
this.wxPayRequest = new WXPayRequest(config);
否则你会发现接收支付成功结果通知的时候怎么老是签名不通过,然后再发现换成HMACSHA256就通过了,看文档里明明写的是默认MD5, 问题就出现在这,demo代码 默认却是HMACSHA256 !
7、沙盒模式测试时报金额不正确,这个问题我自己也不记得在哪看到的了,总之微信文档上是没找到,其原因是沙盒模式测试的金额(total_fee)必须是固定的330 !
另外,沙盒模式下的付款码是不能付款的,不能付款也就是说没法测试接收支付结果通知,只能上正式用1分钱测。
最后记一下接收支付结果通知spring mvc 的接收方式代码:
@RequestMapping(value="receiveResult",consumes = MediaType.TEXT_XML_VALUE,produces = MediaType.TEXT_XML_VALUE)
public String receiveResult(@NotNull @RequestBody String xml)
//TODO
....
算是比较偷懒了,不怕麻烦的建议用实体类加注解 接收
以上是关于总结一下微信扫码支付小程序支付的几个坑的主要内容,如果未能解决你的问题,请参考以下文章
***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结