总结一下微信扫码支付小程序支付的几个坑

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微信支付解决方案总结

微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付解决方案总结

微信小程序项目踩过的几个坑

php微信扫码支付

ThinkPHP微信扫码支付接口

微信小程序使用场景延伸:扫码登录扫码支付