今天介绍一下微信支付吧,没有接触过的也没关系,简单点说,就是要先下单,获取微信统一下单prepay_id,当然,需要把订单id传给后台,然后返回给你一些信息,比如时间戳,签名什么的,具体的有以下参数:
然后,你需要通过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)
});
},