调起微信支付
在之前完成的微信小程序中,微信支付功能用得比较多,做个笔记记录一下
微信支付可以通过前端拼接,也可以通过后端拼接,调取提交订单接口,获取对应参数
前端拼接, V2方式
微信支付所需要的的参数,先调统一下单接口获取参数
-
appid , 微信开放平台申请的账号对应的appid也是小程序的appid
-
timeStamp,时间(时间戳格式)
-
package,支付ID(拼接格式
'prepay_id=' + prepay_id
,后面的为支付ID) -
signType,签名的加密方式(建议使用md5)
-
nonceStr,随机数
-
paySign,签名,(这个是最重要的)拼接方式
let stringSignTemp = 'appId=' + myappid + '&nonceStr=' + myRanDomeStr + '&package=' + myprepay_id + '&signType=MD5&timeStamp=' + myTtate_Str + '&key=Ksv7jqvK3K7rB4mvOwWiqKwMuaaiSY66' let paySign = md5(stringSignTemp).toUpperCase()
你注意到了没有,所有参数的属性名都是小写开头,这个一定要注意,不然你在调起支付的时候,会提示paySign
字段错误。前端拼接源码
WeiXinPay(appid, nonce_str, prepay_id, sign, order_sn) { //下单支付 this.getonav=1 let myappid = appid //openid let myTtate_Str = String(Date.now()) //当前时间戳 let myRanDomeStr = this.randomString() //随机数 let myprepay_id = 'prepay_id=' + prepay_id //支付id let stringSignTemp = 'appId=' + myappid + '&nonceStr=' + myRanDomeStr + '&package=' + myprepay_id + '&signType=MD5&timeStamp=' + myTtate_Str + '&key=Ksv7jqvK3K7rB4mvOwWiqKwMuaaiSY66' let paySign = md5(stringSignTemp).toUpperCase() uni.requestPayment({ provider: 'wxpay', timeStamp: myTtate_Str, nonceStr: myRanDomeStr, package: myprepay_id, signType: 'MD5', paySign: paySign, success: function(res) { console.log("成功") console.log('success:' + JSON.stringify(res)); uni.redirectTo({ url: `/Tosubpages/pages/TheOrderDetails/TheOrderDetails?order_sn=${order_sn}&Order_static=2&getonav=1` }); }, fail: function(err) { console.error("失败") } }); },
后端返回, V3方式
这个对前端比较友好,只需要调取接口获取参数就好了
源码
WxAlipay(order_id, order_sn) {
let that = this
wxpay(order_id).then(res => {
if (res.data.code == 0) {
let OrderReference = order_sn //订单编号
let OrderTime = that.formatDate(new Date(res.data.data.timeStamp*1000)) //下单时间
uni.requestPayment({
provider: 'wxpay',
timeStamp: res.data.data.timeStamp, //时间
nonceStr: res.data.data.nonceStr, //随机数
package: res.data.data.package, //支付ID
signType: res.data.data.signType, //加密方式
paySign: res.data.data.paySign, //签名
success: function(res) {
console.log("成功")
console.log('success:' + JSON.stringify(res));
uni.redirectTo({
url: `/Tosubpages/pages/PaymentSuccess?&OrderReference=${OrderReference}&OrderTime=${OrderTime}`
});
},
fail: function(err) {
uni.redirectTo({
url: `/Tosubpages/pages/OrderDetails?&ordertype=0&order_id=${order_id}`
});
}
});
}
}).catch(Error => {
console.error(Error)
})
},