前言:做了好几天的微信公众号支付。现在总结一下支付中遇到的坑。先来看看业务流程的前期猜想和准备工作。首先,公众号支付是使用微信的js-sdk转支付方式进行。有两种情况:微信jssdk传输和微信支付开放平台传输上升。但是无论使用什么方法,都必须先配置wx.config。wx.config({debug:true,//开启debug模式,所有API调用的返回值都会显示在客户端alert上,如果想查看传入的参数,可以在PC端打开,并且参数信息会通过日志打印出来,只会在PC端打印appId:'',//必填,公众号的唯一标识timestamp:,//必填,签名的时间戳generatednonceStr:'',//必填,签名生成随机字符串signature:'',//必填,签名jsApiList:[]//必填,[JS接口列表][4],选择WXPay微信支付接口});参数分析:appId、timestamp、nonceStr这里需要注意变量的大小写。这里使用驼峰式外壳。Timestamp本身就是一个词,所以不要写错了。需要注意签名。毕竟涉及到的sign(签名)和token太多了,极易混淆。同时,在生成签名之前,首先要了解jsapi_ticket。jsapi_ticket是公众号调用微信JS接口的临时票。正常情况下jsapi_ticket的有效期为7200秒。通过access_token获取。获取jsapi_ticket的API调用次数非常有限。频繁刷新jsapi_ticket会导致API调用受限,影响自身业务。开发者必须在自己的服务中全局缓存jsapi_ticket。但是access_token的有效期只有7200秒,所以同时缓存jsapi_ticket和access_token(当然也可以只存jsapi_ticket)。这里的推荐参数是从后台获取的,代码如下:{constmoment=require('moment'),//时间处理类cnpmimomentrequest=require("request");//cnpmirequesthttps://github.com/request/requestwxConfig={appid:'',//appidappsecret:'',//appsecretmcnsecret:'',//商户keymcnid:'',//商户号notify_url:''//支付成功要回调的后台地址,用于修改订单状态等}//获取公众号的access_token和ticket,需要存入缓存或数据库,有效期为7200s。请注意,它不同于用户access_tokenapiapp.get('/accpetSubscriptionNow',asyncfunction(req,res,next){lettask=awaitXXXXModel.findOne({where:where});//获取accesstoken公众号的存储在数据库中,XXXXModel是自己的表letcc={};letWXInitConfig={};//创建一个空对象存储微信的公众号配置信息//判断是否有accesstoken等信息在数据库中,存储时间是否超过7200秒if(JSON.stringify(task.updateBy)==='{}'||parseInt(moment(task.updateBy.updateTime).format('X'))+7200
