从去年11月进公司到现在,算下来总共对接过三次微信小程序支付接口。
现就前端而言,总结一下开发微信小程序支付功能的流程。
1.调用预支付接口( openid、 userid这两个必传,以及一些业务参数在这个时候也传到后台),得到交易码out_trade_no 和预支付码prepay_id;
2.发送预支付码换回微信支付请求的系列参数:
timeStamp: res.timeStamp, nonceStr: res.nonceStr, package: res.package, signType: 'MD5', paySign: res.sign,3.调用微信支付接口
wx.requestPayment({ timeStamp: res.timeStamp, nonceStr: res.nonceStr, package: res.package, signType: 'MD5', paySign: res.sign, success: function (paymentRes) { console.log(paymentRes) if (paymentRes.errMsg == "requestPayment:ok") { // 调用支付成功 console.log("支付成功!") obj.applyAdviser();//业务函数,插入支付记录到数据库 } }, fail: function (paymentRes) { if (paymentRes.errMsg == "requestPayment:fail cancel") { appcom.showMsgFun(obj, "您取消了支付"); console.log("您取消了支付") } } })4.在success回调函数里执行业务函数
完整代码如下,部分参数根据自己业务调整
var openid = wx.getStorageSync('openid'); var userid = wx.getStorageSync('userInfo').uid; // 调用支付接口发起预支付 appcom.reqFun(this, '', 'prepay', { //第1步:调用预支付接口,获取预支付码和交易码 amount: this.data.amount, openid: openid, //微信openid userid: userid,//用户id type: 1, relation_id: this.data.lawyerId }, function (res, obj) { if (res.out_trade_no == 'error' || res.prepay_id == 'error') { console.log("res.out_trade_no或prepay_id参数错误"); appcom.showMsgFun(obj, "支付功能暂时无法使用"); setTimeout(function () {//跳转界面 appcom.goLink('../index/index'); }, 2000); return; } var prepayId = res.prepay_id; var outTradeNo = res.out_trade_no; appcom.reqFun(obj, '', 'gensig', {//第2步:发送预支付码,换回时间戳、签名等 prepay_id: prepayId,//预支付码 }, function (res, obj) { console.log(res) wx.requestPayment({//第3步:调用微信官方提供的支付接口 timeStamp: res.timeStamp, nonceStr: res.nonceStr, package: res.package, signType: 'MD5', paySign: res.sign, success: function (paymentRes) { console.log(paymentRes) if (paymentRes.errMsg == "requestPayment:ok") { // 调用支付成功 console.log("支付成功!") obj.applyAdviser();////第4步:业务函数,插入支付记录到数据库 } }, fail: function (paymentRes) { if (paymentRes.errMsg == "requestPayment:fail cancel") { appcom.showMsgFun(obj, "您取消了支付"); console.log("您取消了支付") } } }) }, '', 'GET', '') }, '', 'GET', '')注:
扩展:未完成订单
当用户取消支付的时候,其实订单已经生成,此时将交易码保存,下一次传给后台继续此订单的支付。













