微信小程序支付接口对接总结

从去年11月进公司到现在,算下来总共对接过三次微信小程序支付接口。
现就前端而言,总结一下开发微信小程序支付功能的流程。
1.调用预支付接口( openiduserid这两个必传,以及一些业务参数在这个时候也传到后台),得到交易码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', '')

注:
扩展:未完成订单
当用户取消支付的时候,其实订单已经生成,此时将交易码保存,下一次传给后台继续此订单的支付。

你可能感兴趣的:(微信小程序)