欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序云開發(fā)實(shí)現(xiàn)微信支付功能業(yè)務(wù)邏輯可靠

 更新時(shí)間:2022年05月12日 08:29:38   作者:小禿僧  
這篇文章主要介紹了微信小程序云開發(fā)實(shí)現(xiàn)微信支付功能,云開發(fā)來開發(fā)微信小程序時(shí),如何實(shí)現(xiàn)微信支付,并且保證業(yè)務(wù)邏輯可靠,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

今天打了幾把永劫無間后,咱們來聊一聊用云開發(fā)來開發(fā)微信小程序時(shí),如何實(shí)現(xiàn)微信支付,并且保證業(yè)務(wù)邏輯可靠。

注冊(cè)微信支付商戶號(hào)

點(diǎn)擊“成為商家”,按照操作提示去申請(qǐng)商戶號(hào)即可(需要營業(yè)執(zhí)照,個(gè)體戶或公司都行。沒有可以辦一個(gè))

小程序關(guān)聯(lián)商戶號(hào)

注冊(cè)完成,登錄進(jìn)去,點(diǎn)擊產(chǎn)品中心。再點(diǎn)擊AppID賬號(hào)管理,關(guān)聯(lián)微信小程序的AppID,同意即可。

在微信開發(fā)者工具綁定商戶號(hào),點(diǎn)擊云開發(fā),進(jìn)入云開發(fā)控制臺(tái),點(diǎn)擊設(shè)置,點(diǎn)擊其他設(shè)置,添加商戶號(hào),如下圖操作即可


前期工作準(zhǔn)備結(jié)束后,開始進(jìn)入擼代碼環(huán)節(jié)了

業(yè)務(wù)邏輯


這個(gè)是官方文檔的一張微信支付的業(yè)務(wù)邏輯示意圖。我以前看的時(shí)候還是挺懵的,不知所云。后來真正實(shí)踐過才明白它的意思。

舉個(gè)栗子可能更好明白,我們?cè)陂_發(fā)跑腿小程序的時(shí)候呢,需要發(fā)布跑腿功能,發(fā)布時(shí)需要進(jìn)行微信支付。

先看看我畫的圖,發(fā)布跑腿的一個(gè)業(yè)務(wù)邏輯

代碼實(shí)現(xiàn)

pay云函數(shù):
主要是用于獲取回包,回包里面有wx.requestPayment 發(fā)起微信支付所需要的參數(shù)。

const cloud = require('wx-server-sdk')
cloud.init({
  env: ''  //填入你的云開發(fā)環(huán)境ID
})
exports.main = async (event, context) => {
  const res = await cloud.cloudPay.unifiedOrder({
    "body": event.body,
    "outTradeNo" : event.outTradeNo, //不能重復(fù),否則報(bào)錯(cuò)
    "spbillCreateIp" : "127.0.0.1", //就是這個(gè)值,不要改
    "subMchId" : "",  //你的商戶號(hào),
    "totalFee" : event.totalFee*100,  //單位為分
    "envId": "",  //填入你的云開發(fā)環(huán)境ID
    "functionName": "pay_success",  //支付成功的回調(diào)云函數(shù)
    "nonceStr":event.nonceStr,//隨便弄的32位字符串,建議自己生成
    "tradeType":"JSAPI"   //默認(rèn)是JSAPI
  })
  return res
}

微信小程序前端代碼調(diào)用pay云函數(shù),并調(diào)用wx.requestPayment發(fā)起微信支付

  //使用微信支付
  pay:function(id){
    let that = this;
    wx.showLoading({
      title: '正在支付',
    })
    wx.cloud.callFunction({
      name: 'pay',  //云函數(shù)的名稱
      data:{
          body:'支付跑腿費(fèi)',
          outTradeNo:id,      //用記錄號(hào)來做訂單號(hào),因?yàn)橛涗浱?hào)也是唯一的。
          totalFee:that.data.price,
          nonceStr:'5K8264ILTKCH16CQ2502SI8ZNMTM67VS'
      },
      success: res => {
        console.log(res)
        const payment = res.result.payment
        wx.hideLoading();
        wx.requestPayment({
          ...payment, //...這三點(diǎn)是 ES6的展開運(yùn)算符,用于對(duì)變量、數(shù)組、字符串、對(duì)象等都可以進(jìn)行解構(gòu)賦值。
          success (res) {
             //這里success回調(diào)函數(shù)只有用戶點(diǎn)擊了“完成”或者返回鍵才會(huì)被觸發(fā)
             //所以不要在這里寫改變訂單為已支付的業(yè)務(wù)邏輯
             //萬一用戶支付完成,但不點(diǎn)擊"完成"或者返回鍵,那會(huì)造成數(shù)據(jù)不一致性的問題
             
            console.log('支付成功', res)
            wx.showToast({
              title: '下單成功',
              icon: 'success',
              duration: 2000
            })
          },
          fail (err) {
            console.error('支付失敗', err) //支付失敗之后的處理函數(shù),寫在這后面
            //為了節(jié)省數(shù)據(jù)庫的空間,支付失敗的訂單可以刪除
            db.collection('publish').doc(id).remove()
          },
        })
      },
      fail(ere){
          //為了節(jié)省數(shù)據(jù)庫的空間,支付失敗的訂單可以刪除
          db.collection('publish').doc(id).remove()
      },
    })
  },

這樣就可以實(shí)現(xiàn)微信支付啦

特別注意,不要在wx.requestPayment接口的success回調(diào)函數(shù)里面寫支付成功后的業(yè)務(wù)處理。切記?。?!因?yàn)檫@里success回調(diào)函數(shù)只有用戶點(diǎn)擊了“完成”或者返回鍵才會(huì)被觸發(fā)。萬一用戶支付完成,但不點(diǎn)擊"完成"或者返回鍵,那會(huì)造成支付成功,但沒去處理數(shù)據(jù),導(dǎo)致數(shù)據(jù)不一致性的問題。

應(yīng)該交給pay_success云函數(shù)來處理支付成功后的業(yè)務(wù)邏輯。

pay_success云函數(shù):

const cloud = require('wx-server-sdk')
cloud.init({
  env:''   //填入你的云開發(fā)環(huán)境ID
})
const db = cloud.database()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  const orderId = event.outTradeNo
  const returnCode = event.returnCode
  if(returnCode == 'SUCCESS'){
    //更新云數(shù)據(jù)庫的訂單狀態(tài),改為已支付的狀態(tài)即可
    db.collection('publish').where({
        _id:orderId,
    }).update({
      data:{
        pay_status:true,  //改為已支付狀態(tài)
      }
    })
    const res = {errcode:0,errmsg:'支付成功'}//需要返回的字段,不返回該字段則一直回調(diào)
    return res
  }
}

改變狀態(tài)之后,我們?cè)诮訂未髲d里去查詢獲取待接單信息的時(shí)候,要去獲取已支付的待接單的訂單,也就是pay_status:true狀態(tài)的訂單即可。保證了數(shù)據(jù)的一致性。

其實(shí)云開發(fā)實(shí)現(xiàn)微信支付也沒有那么難。只不過業(yè)務(wù)邏輯需要更加嚴(yán)謹(jǐn)一點(diǎn)。以前自己太辣雞,寫的業(yè)務(wù)邏輯漏洞百出,慚愧...

到此這篇關(guān)于微信小程序云開發(fā)實(shí)現(xiàn)微信支付功能業(yè)務(wù)邏輯可靠的文章就介紹到這了,更多相關(guān)小程序云開發(fā)實(shí)現(xiàn)微信支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論