微信公众号支付(JSAPI)遇到的坑

微信公众号支付(JSAPI)遇到的坑

  1. 微信浏览器内支付属于微信公众号支付

  2. 配置内容:

    1. 接口权限:网页授权回调域名(保证文件可访问)
    2. 公众号设置--功能设置:JS接口安全域名,业务域名
    3. 微信支付--开发配置:支付授权目录,测试授权目录,测试白名单

    其中1 2都为域名,而且不需要http等内容,直接XXX.XXX.com即可,可以为二级域名
    1只能设置一个,因此,为了保证测试环境和线上环境都可以同时使用,请注意项目部署。
    2 3域名可以为多个,因此,可以忽略项目部署情况。
    支付授权目录配置注意事项:

     这里很重要我就是在这里折腾了很久。怎么设置呢,首先要看你支付的当前页面URL  
     比如是:http://www.taidupa.com/wxpay/js_api_call.php   
     你就必须填写: http://www.taidupa.com/wxpay/  
     假如是:http://www.taidupa.com/wxpay/order/id/56.html  
     你就必须写:http://www.taidupa.com/wxpay/order/id/  
     看出规律了吧,就是把最后一个反斜杠后面的内容去掉就OK了。  
    
  3. 流程

    1. 网页授权获取用户openId
      1. oauth方式获取code
        注意:redirect_uri需要进行UrlEncode编码
        坑:#wechat_redirect 该内容有可能会丢失, 需要用encodeURIComponent编码
        坑:网页回调域名和JS安全域名,都不用加http://

         location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx79382fc60975273b&redirect_uri='+encodeURIComponent(xxxxxx)+'&response_type=code&scope=snsapi_base&state=123'+ encodeURIComponent('#wechat_redirect');
        
      2. 根据code获取openId

    2. 根据openId等信息调用预下单接口生成预下单id
    3. 根据预下单id,在页面内调起微信支付

    用多种设备尝试测试,有些提示会不同,但是原因是相同的,可以综合考虑得出正确结论。(重要)
    生成签名的时候,需要所有不为空的参数参与生成

  4. 预支付接口,body为中文时,会出现签名错误的问题。在调用接口时,发送的参数,需要进行以下编码

     Response response = HttpUtils.post(
     	  this.url + "/pay/unifiedorder"
     	, new String(xml.getBytes(), "ISO8859-1")
     	, "text/xml"
     	, HttpUtils.DEFAULT_CHARSET_NAME
     );
    
posted @ 2017-08-18 18:31  CalronLoveRonnie  阅读(877)  评论(0编辑  收藏  举报
AmazingCounters.com