最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序云開發(fā)實現微信支付功能業(yè)務邏輯可靠

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

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

注冊微信支付商戶號

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

小程序關聯(lián)商戶號

注冊完成,登錄進去,點擊產品中心。再點擊AppID賬號管理,關聯(lián)微信小程序的AppID,同意即可。

在微信開發(fā)者工具綁定商戶號,點擊云開發(fā),進入云開發(fā)控制臺,點擊設置,點擊其他設置,添加商戶號,如下圖操作即可


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

業(yè)務邏輯


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

舉個栗子可能更好明白,我們在開發(fā)跑腿小程序的時候呢,需要發(fā)布跑腿功能,發(fā)布時需要進行微信支付。

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

代碼實現

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

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, //不能重復,否則報錯
    "spbillCreateIp" : "127.0.0.1", //就是這個值,不要改
    "subMchId" : "",  //你的商戶號,
    "totalFee" : event.totalFee*100,  //單位為分
    "envId": "",  //填入你的云開發(fā)環(huán)境ID
    "functionName": "pay_success",  //支付成功的回調云函數
    "nonceStr":event.nonceStr,//隨便弄的32位字符串,建議自己生成
    "tradeType":"JSAPI"   //默認是JSAPI
  })
  return res
}

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

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

這樣就可以實現微信支付啦

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

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

pay_success云函數:

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

改變狀態(tài)之后,我們在接單大廳里去查詢獲取待接單信息的時候,要去獲取已支付的待接單的訂單,也就是pay_status:true狀態(tài)的訂單即可。保證了數據的一致性。

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

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

相關文章

  • 根據當前時間在jsp頁面上顯示上午或下午

    根據當前時間在jsp頁面上顯示上午或下午

    這篇文章主要介紹了根據當前時間不同在jsp頁面上顯示上午或下午,需要的朋友可以參考下
    2014-08-08
  • JavaScript中六種面試??祭^承方式總結

    JavaScript中六種面試??祭^承方式總結

    js的幾種繼承方式在我們面試的時候經常會被問到,所以深入理解js幾種繼承方式以及它們的優(yōu)缺點是非常有必要的。本文為大家整理了JavaScript中面試??嫉牧N繼承方式,需要的可以參考一下
    2023-02-02
  • cocos2dx骨骼動畫Armature源碼剖析(三)

    cocos2dx骨骼動畫Armature源碼剖析(三)

    本篇文章給大家分享cocos2dx骨骼動畫Armature源碼剖析(三),代碼附有注釋,介紹的非常詳細,需要的朋友可以參考下
    2015-09-09
  • 深入理解JS的事件綁定、事件流模型

    深入理解JS的事件綁定、事件流模型

    這篇文章主要介紹了JS的事件綁定、事件流模型的相關知識,非常不錯,具有參考借鑒價值,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-05-05
  • js截取小數點后幾位的寫法

    js截取小數點后幾位的寫法

    截取小數點后幾位的方法有很多,下面為大家介紹下使用js是如何實現的
    2013-11-11
  • JavaScript時間操作之年月日星期級聯(lián)操作

    JavaScript時間操作之年月日星期級聯(lián)操作

    這篇文章主要介紹了JavaScript時間操作之級聯(lián)日期選擇操作,涉及到年、月、日、星期,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 仿微博字符限制效果實現代碼

    仿微博字符限制效果實現代碼

    字符限制公司項目中有個這樣的東西,大家用微博的都明白哈
    2012-04-04
  • JavaScript實現消消樂的源代碼

    JavaScript實現消消樂的源代碼

    這篇文章主要介紹了JavaScript實現消消樂-源代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • uni-app動態(tài)修改主題色的方法詳解

    uni-app動態(tài)修改主題色的方法詳解

    最近在看uniapp開發(fā)app時需要實現動態(tài)修改主題色的功能,這篇文章主要給大家介紹了關于uni-app動態(tài)修改主題色的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • JS中fetch()用法實例詳解

    JS中fetch()用法實例詳解

    在JS中使用fetch更加高效地進行網絡請求,下面這篇文章主要給大家介紹了關于JS中fetch()用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論

长岛县| 高安市| 潜江市| 梓潼县| 蚌埠市| 天等县| 鄯善县| 崇信县| 巢湖市| 中方县| 叙永县| 苍南县| 马边| 读书| 化隆| 湟中县| 漾濞| 蓬安县| 西吉县| 武穴市| 镇安县| 贵港市| 广汉市| 山阴县| 尖扎县| 巴彦淖尔市| 铜梁县| 额尔古纳市| 马龙县| 潜江市| 吉隆县| 博爱县| 寿阳县| 巨野县| 四川省| 四会市| 友谊县| 凤庆县| 黄大仙区| 屯昌县| 班戈县|