微信小程序的微信支付
简单来说一下微信支付的开发流程:
大概来说就是两步:
1.客户端请求后端生成订单,后端生成商户订单后调用统一下单API,微信方会生成一个预付单,并返回预付单信息(prepay_id),后端接收到后生成JSAPI页面调用的支付参数并签名,后传给客户端(prepay_id、paySign等)
2.客户端调用api使用返回过来的参数主动调起支付,微信方检查参数合法性,返回验证结果给客户端并要求支付授权,授权后输入密码,微信方验证成功后将结果异步发送给后端,后端在接收到微信方的结果后发送通知给微信方,微信方最后把结果发给客户端
下面是我在小程序里面的一个支付代码片段
pay(){
var _this = this
let params={
addressId: _this.addressInfo.id,
appointmentTime: _this.serviceTime,
couponId: '',
num: _this.serviceInfo.serviceNum,
remarks: _this.remark,
serviceParameterId: _this.serviceInfo.serviceParamId
}
console.log(params,'params');
this.$api.addOrder(params).then(res=>{//生成订单
console.log(res.data.data)
// uni.hideLoading()
var param={
orderId: res.data.data.orderId,
orderNum: res.data.data.orderNum,
openId: this.openId,
}
this.$api.orderPay(param).then(re=>{ //获取调起支付所需参数
uni.requestPayment({ //调起支付
provider: 'wxpay',
timeStamp: re.data.data.timeStamp,
nonceStr: re.data.data.nonceStr,
package: re.data.data.package,
signType: 'MD5',
paySign: re.data.data.paySign,
success: function (ress) {
uni.hideLoading()
_this.getOrderRemark('')
console.log('success:' + JSON.stringify(ress));
uni.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
});
uni.redirectTo({
url: `/pages/orderPay/paySuccess?serviceTime=${_this.serviceTime}&serviceId=${_this.serviceInfo.id}`
});
},
fail: function (err) {
uni.hideLoading()
uni.showToast({
title: '支付失败',
icon: 'none',
duration: 2000
});
console.log('fail:' + JSON.stringify(err));
setTimeout(function(){
uni.redirectTo({
url: `/pages/orderPay/payError?serviceTime=${_this.serviceTime}&serviceId=${_this.serviceInfo.id}`
})
},1000)
}
})
}).catch(er => {
uni.hideLoading();
uni.showToast({
title: '支付失败',
icon: 'none',
duration: 2000
});
uni.redirectTo({
url: `/pages/orderPay/payError?serviceTime=${_this.serviceTime}&serviceId=${_this.serviceInfo.id}`
});
})
}).catch(err => {
uni.hideLoading();
})
},