前端調用微信小程序的(de)支付流程 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

前端調用微信小程序的(de)支付流程

發表時(shí)間:2021-2-3

發布人(rén):融晨科技

浏覽次數:66

1,前言 

分享一個(gè)完整的(de)微信小程序支付流程中,前端要(yào / yāo)做的(de)模塊。

2,流程 

在(zài)調用wx.requestPayment之(zhī)前,需要(yào / yāo)準備一些參數,流程如下

1,調用 wx.login() 獲取 臨時(shí)登錄憑證code ,并調用wx.request回傳到(dào)服務端。

2,服務端調用 auth.code2Session 接口,換取用戶唯一标識 OpenID 和(hé / huò) 會話密鑰 session_key

3,前端拿到(dào)服務端返還的(de)參數後,調用wx.requestPayment

下面是(shì)我畫的(de)一個(gè)流程圖

3,參數說(shuō)明 

如上(shàng),一共五個(gè)參數,參數名區分大(dà)小寫,參數名寫錯或者參數類型搞錯都不(bù)行。

4,具體代碼
pay () {
   let _this = this;
   //此處5個(gè)變量爲(wéi / wèi)我項目需要(yào / yāo),與微信支付無關
   let { userId, needPay, price, walletNum, classId } = this.data;
   if(needPay === 0){ //如果還需微信支付的(de)金額爲(wéi / wèi) 0 則全部走錢包支付
     HTTP.buyPay(userId , price, classId)
     .then(res => {
       if(res.status === "y"){
         FN.Alert(res.info)
         .then(() => {
           wx.navigateBack();
         })
       };
     });
   }else{//進入微信支付
     FN.wxLogin()
     .then(res => {
       this.setData({
         code:res
       },() => {
         HTTP.payCourse(userId, classId, walletNum, needPay, res)// 調服務端,拿到(dào)支付密匙
         .then(res => {
           if(res.status === "y"){
             let obj = res.infoObject.wxpayInfo;
             wx.requestPayment({// 調起微信支付
               timeStamp: obj.timestamp,
               nonceStr: obj.nonceStr,
               package: obj.wxPackage,
               signType: obj.signType,
               paySign: obj.sign,
               success (res) {
                 FN.Alert("支付成功")
                 .then(() => {
                   wx.navigateBack();
                 })
               },
               fail (res) {
                 _this.setData({
                   isShow:false,
                   payPwd:"",
                   pwdFocus:false
                 }, () => {
                   if(res.errMsg.indexOf("cancel") > -1){
                     FN.Toast("取消支付");
                   }else{
                     FN.Toast("支付失敗");
                   }
                 })
               }
             })
           }
         })
       });
     })
     .catch(res => {
       FN.Toast("獲取登錄憑證失敗");
     })
   }
 }

相關案例查看更多