分享一下这两周爬微信支付的坑~但愿有借鉴做用(PHP)

前言

其实任何接口开发只要按照给出来的接口文档和例子开发基本上不会有太大问题的,一些问题都是出在杂七杂八的小细节上,如今分享一下微信支付开发中本身遇到的小细节。
按照文档作完开发前配置,好比JS安全域名配置、网页受权域名、公众号受权目录等等...php

坑一: 配置

看完微信支付的文档,了解接口的规则,微信支付的流程基本是:获取openid -> 生成统一下单参数 -> 用户支付 -> 回调 ,其实没有太复杂
在配置上面说的东西的时候也会有一些小问题前端

支付受权目录须要配置到接口的上一级目录, 斜杠(/)结尾,必须是斜杠结尾,并且是你写的后端接口的请求路径,无论是否作了路由跳转之类的

坑二: openid的获取

  • 下载微信支付DEMO 连接

文档中也有给出了例子,在example文件夹,当时在第一步获取openid就卡住了。
先讲一下我这边代码框架是前端vue + 后端thinkphp给出api接口实现数据交互这样的。
在第一步获取openid中,须要作header("Location:....")重定向获取到code而后跳转回来Curl访问access_token接口获取到用户openid。
若是前端下单自己就是一个页面跳转那能够按照demo的写法直接用,可是若是是前端post请求是无法作重定向操做,因此获取openid和生成统一订单参数不能放在同一个方法内实现。
在前端异步的请求中会报Access-Control-Allow-Origin的跨域问题,并且是报api.weixin.qq.com不能跨域到api.weixin.qq.com
因此若是遇到以上跨域问题~那就是你的前端异步请求和获取openid写到一块儿了,可是异步请求没法响应header重定向的缘由。
若是你的项目中在其余地方已经获取到openid那这部分就不存在问题了vue

第一个坑的结果: 若是前端是异步请求数据的话,openid不能和统一下单写在一块儿~openid须要作一次重定向来获取。

坑二: 生成统一订单

生成统一订单参数要严格对照 参数文档的参数写,example文件夹的例子中有写好的组装参数方法,能够直接调用没有太大问题,可是要注意的有如下几点thinkphp

  • 严格 大小写
  • 参数必须是 字符串
  • 附加参数attach值的最大长度是127
  • 前端接收到参数后,必须组成对象写到WeixinJSBridge.invokegetBrandWCPayRequest请求中,注意是对象!!!对象!!!对象!!! 我跟前端开发沟通的过程当中前端就把参数转成字符串写到getBrandWCPayRequest里面了,我加班很久查资料最后才发现是这里的问题

在这一步会遇到如下报错:后端

  • 支付缺乏参数:appId (由于整个参数组不是一个对象因此报错)
  • chooseWXPay:fail (不能在开发者工具上调试微信支付,在工具上会报这个错误。其实去网上查的一大堆资料都说的解决都是在说这个缘由)
这个坑的问题就在于: 各类参数要对照文档写好并且格式正确。

坑三:支付成功回调

支付回调的例子里面有重写NotifyProcess的方法,若是你要另外写业务能够吧notify.php写成一个文件而后再写另外的回调接口来请求这个类。
我这边的话就重写了一下方法返回回调数据。
回调的坑在于你回调业务处理完了以后要在最后加上如下:api

  • return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';

不然的话微信没有收到你的回调成功返回,会不断重复回调5次而后中止,若是回调中写了业务那就会重复操做了。跨域

这个坑就是: 要注意回调结束要返回成功的xml响应

END

这几天作微信支付暂时遇到的问题就这么多,只能说注意细节吧,爬过的坑记录下来之后遇到就懂处理了。 哦,还有微信支付的相关问题网上能搜到不少...可是不必定跟本身遇到的能匹配上,并且大部分都是好久的了.... 这个略坑
相关文章
相关标签/搜索