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

在调用微信支付接口中遇到各种问题,真不知道是哪个人才写的接口文档,几个简单的接口调了好几天。

 

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
   ....

}

算是比较偷懒了,不怕麻烦的建议用实体类加注解 接收

 

你可能感兴趣的:(web开发,JAVA)