您當前位置>首頁 » 新聞資訊 » 小(xiǎo)程序相(xiàng)關 >
前端調用(yòng)微(wēi)信小(xiǎo)程序的(de)支付流程
發表時(shí)間(jiān):2021-2-3
發布人(rén):葵宇科(kē)技(jì)
浏覽次數(shù):77
1,前言
分(fēn)享一(yī)個(gè)完整的(de)微(wēi)信小(xiǎo)程序支"δ₽付流程中,前端要(yào)做(zuò)的(de)模塊。
2,流程
在調用(yòng)
wx.requestPayment
之前,需要(yào)準備一(yī)些(xiē)參數(shù),流程如(r←φ§ú)下(xià)1,調用(yòng) wx.login()
獲取 臨時(shí)登錄憑證code ,并調用(yòng)wx.request
回傳到(dào)服務端。
2,服務端調用(yòng) auth.code2Session
接口,換取用(yòng)戶唯一(yī)标識 OpenID
和(hé) 會(huì)話(huà)密鑰 session_key
。
3,前端拿(ná)到(dào)服務端返還(hái)的(de)參>↑數(shù)後,調用(yòng)wx.requestPayment
。
下(xià)面是(shì)我畫(huà)的(de)一(yī)個(gè)流α'©程圖
如(rú)上(shàng),一(yī)共五個(gè)參數(shù),參數¥©™σ(shù)名區(qū)分(fēn)大(dà)小(xiǎo)寫,參數(shù)名寫錯(cuò→α •)或者參數(shù)類型搞錯(cuò)都(dōu)不(b€αù)行(xíng)。
4,具體(tǐ)代碼
pay () {
let _this = this;
//此處5個(gè)變量為(wèi)我項目需要(yào),與微(wēi)信支付無關
let { userId, needPay, price, wα€®σalletNum, classId } = this.data;
if(needPay === 0){ //如(rú)果還(hái)需微(wēi)信支付的(α¥de)金(jīn)額為(wèi) 0 則全部走錢(qián)包支付
HTTP.buyPay(userId , price, classId)
.then↔™Ω(res => {
if(res.status === "y"){
FN.Alert(res.in®↓≈✔fo)
.then(() => {
wx.navigateBack();
✘ σ })
};
});
}else{//進入微(wēi)信支付
FN.wxLogin()
.then(res => {
this.setData({
code:res
},() => {
HTTP.payCourse(userId, classId, wal≠↕>letNum, needPay, res)// 調服務端,拿(ná)到(dào)支付密匙
.then(res => {
if(res.status === "y"){
let obj = res.infoObject.wxpayInfo;♥ ↓
wx.requestPayment({// 調起微(wēi)信支付
timeStamp: obj.timestamp,
nonceStr: obj.nonceStr,
package: obj.wxPackage,
signType: obj.signType,
paySign: obj.sign,
success (res) {
£↓ FN.Alert("支付成功")
.then(() => {
wx.navigat±↑★∑eBack();
})
≤§¥ },
fail (res) {
↓δ _this.setData({
isShow:false,
payPwd:"",
pwdFocus:false
}, () => {
if(res.errMsg.indexOf("cancel") > -1){
FN.Toa✔≥♣st("取消支付");
}else{
FN.Toast("支付失敗");
}
λ&± })
}
¥δ" })
}
})
" →"
});
})
.catch(res => {
FN.Toast("獲取登錄憑證失敗");
})
}
}