**微信小程序常用方法、API封装之微信支付封装**

今天介绍一下微信支付吧,没有接触过的也没关系,简单点说,就是要先下单,获取微信统一下单prepay_id,当然,需要把订单id传给后台,然后返回给你一些信息,比如时间戳,签名什么的,具体的有以下参数:
**微信小程序常用方法、API封装之微信支付封装**_第1张图片
然后,你需要通过wx.requestPayment接口把这些参数传给微信支付接口发起微信支付。所以,如果你按部就班的写的话,就会这样:
wx.request下单,然后在回调里继续调用wx.requestPayment。没错,步骤就是这样,但是,代码会很长,我在之前的文章里已经提到过,封装的目的是为了简化开发和便于维护。那么,这里我们也可以封装一下,不让代码看得又繁琐又复杂。

//这里我还是用promise封装
function payOrder(orderId,formId) {//orderId传入这个参数即可,formId根据各自的需求加或不加
  return new Promise(function (resolve, reject) {
  //发起订单统一下单请求
    util.request(api.PayPrepayId, { //这里我已经进行过request的封装了,看不懂的可以看我的网络请求封装的文章
      orderId: orderId,
      formId: formId 
    }).then((res) => {
      if (res.errno === 0) {
        const payParam = res.data; //这里就是我们要的支付信息
        //调用微信支付接口
        wx.requestPayment({
          'timeStamp': payParam.timeStamp,
          'nonceStr': payParam.nonceStr,
          'package': payParam.package,
          'signType': payParam.signType,
          'paySign': payParam.paySign,
          'success': function (res) {
            console.log('支付后的回调',res)
            resolve(res);
          },
          'fail': function (res) {
            util.alert('支付失败');
          },
          'complete': function (res) {
            // reject(res);
          }
        });
      } else {
        reject(res);
      }
    });
  });
}

module.exports = {
  payOrder
};

//子页面
  const pay = require('../../services/pay.js'); //引入封装文件
  pay(e){
    console.log(e)
    let orderId = e.currentTarget.id //获取订单id
    let order_type = e.currentTarget.dataset.order_type //这个可以忽略,我自己的项目需求
	//发起微信支付
    pay.payOrder(parseInt(orderId)).then(res => {
	    if (res.errMsg === 'requestPayment:ok'){ //请求成功
	      if (order_type == 2) {
	        wx.redirectTo({
	          url: '/pages/success/success?orderId=' + orderId,
	        })
	      } else {
	        wx.redirectTo({
	          url: '/pages/order/order',
	        })
	      }
		}
    }).catch(res => {
      util.alert(res.msg)
    });
  },

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