前言其实任何接口开发只要按照给定的接口文档和例子进行开发就可以了基本上不会有太多问题。有些问题是出于杂七杂八的小细节,现在分享一下我在微信支付开发中遇到的小细节。根据文档完成开发前的配置,比如JS安全域名配置,网页授权域名,公众号授权目录等坑一:配置看完微信支付的文档,了解了微信支付的规则后界面,微信支付的流程基本是:获取openid->生成统一订单参数->用户支付->回调,其实并没有太复杂。配置上面说的东西的时候,会出现一些小问题。支付授权目录需要配置为接口的上层目录,斜杠(/)必须以斜杠结尾,并且必须是你写的后端接口的请求路径,不管你有没有是否进行了路由跳转。2:获取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,那么这部分就没有问题了。第一个坑的结果:如果前端异步请求数据,openid不能统一顺序写在一起~openid需要重写一次面向获取。坑二:生成统一订单统一订单的参数要严格按照参数文档的参数来写。example文件夹有写好的汇编参数方法,直接调用没有大问题,但是需要注意以下几点:大小写参数必须是字符串。附加参数attach值的最大长度为127,前端收到参数后,必须形成一个对象写入到WeixinJSBridge.invoke的getBrandWCPayRequest请求中。注意是对象!!!目的!!!目的!!!在和前端开发沟通的过程中,前端将参数转换成字符串写入到getBrandWCPayRequest中。加班查了半天资料,终于发现问题就出在这里。这一步会报如下错误:支付缺少参数:appId(因为整个参数组不是一个对象,所以报错)chooseWXPay:fail(无法在开发者工具上调试微信支付,而这个工具上会报错,其实网上很多资料都说是解决办法,都是这个原因)这个坑的问题是各种参数都要按照文档写和以正确的格式。坑3:支付成功回调支付回调的例子中有重写NotifyProcess的方法。如果要再写一个业务,可以把notify.php写成一个文件,然后再写一个回调接口请求这个类。在我这边,我重写了返回回调数据的方法。回调的坑是回调业务处理完后要在最后加上:return'
