基于新版云開發(fā)的微信支付

微信終于發(fā)布了基于云開發(fā)的微信支付贮聂,相比于原來的支付方式,新版的云開發(fā)版支付支持云函數(shù)形式的回調(diào)寨辩。網(wǎng)上查資料后發(fā)現(xiàn)基本沒有詳細(xì)的文章吓懈,我就吃一次螃蟹吧。
在幾天的努力下靡狞,終于調(diào)試成功耻警,目前小程序已上線,需要看效果的識別下面的小程序碼甸怕。
開發(fā)過微信支付的同學(xué)都知道榕栏,文檔坑,代碼坑層出不窮蕾各,寫此文章的目的就是把我遇到的坑給后來人提個(gè)醒(客觀來說比以前的微信支付好調(diào)的多)。
廢話不多說庆揪,正文開始:
1 申請微信商戶號式曲,關(guān)聯(lián)小程序碼。
此步驟沒有什么難度缸榛,有一個(gè)坑是我申請商戶號的時(shí)候因?yàn)闆]有申請下來新的小程序吝羞,所以提供的是一個(gè)舊的appid。當(dāng)我新的小程序認(rèn)證成功后在微信公眾平臺關(guān)聯(lián)商戶號后内颗,調(diào)用統(tǒng)一下單接口一直報(bào)錯(cuò):“商戶傳入的appid參數(shù)不正確,請聯(lián)系商戶處理”钧排。在log中發(fā)現(xiàn),統(tǒng)一下單接口返回的appid是我測試小程序的appid均澳,也就是說新的小程序和商戶沒幫成功恨溜,這個(gè)也可以通過云開發(fā)控制臺看出來:


屏幕快照 2020-05-30 上午12.11.45.png

但是郁悶的是改不了符衔。沒辦法,只能重新申請一個(gè)商戶號糟袁。判族。。
2 商戶號和微信公眾平臺關(guān)聯(lián)项戴。
這步?jīng)]什么坑形帮,只要授權(quán)了就可以。
說明:一個(gè)小程序可以綁定多個(gè)商戶號(同一主體周叮,不同主體沒試過)辩撑,只要開發(fā)的時(shí)候?qū)憣托小?br> 3 在云開發(fā)控制臺進(jìn)行微信支付配置
如下圖配置即可,如果運(yùn)氣好仿耽,不會(huì)出現(xiàn)我說的第一個(gè)坑合冀。


屏幕快照 2020-05-30 上午12.15.55.png

如果此步驟沒有配置,則調(diào)用統(tǒng)一下單接口后氓仲,會(huì)提示:受理關(guān)系不存在水慨。這點(diǎn)需要注意,我在這里卡了一下敬扛。
4 寫js端代碼晰洒,作用:整理支付數(shù)據(jù),調(diào)用支付云函數(shù)
formSubmit: function (e) {
     
    wx.showLoading({
      title: '加載中啥箭。谍珊。。',
    })
    let that = this;
    var uuid = util.uuid(16, 16)//調(diào)用自己的uuid函數(shù)
    var body = "換成自己的訂單支付內(nèi)容"
    
    wx.cloud.callFunction({
      name: "pay",
      data: {
        body: body,
        orderid: "" + uuid,
        money: 1,//支付金額
        nonceStr:util.uuid(32, 32)//調(diào)用自己的uuid函數(shù)
      },
      success(res) {
        wx.hideLoading({
          complete: (res) => {},
        })
        console.log("提交成功", res.result)
        //創(chuàng)建自己的未支付訂單
         急侥。砌滞。。

        that.pay(res.result)
      },
      fail(res) {
        wx.hideLoading({
          complete: (res) => {},
        })
        console.log("提交失敗", res)
      }
    })
  }
//實(shí)現(xiàn)小程序支付
  pay(payData) {
    var that = this;
    const payment = payData.payment//這里注意坏怪,上一個(gè)函數(shù)的result中直接整合了這里要用的參數(shù)贝润,直接展開即可使用
    wx.requestPayment({
      ...payment, //。铝宵。打掘。是展開變量的語法 
      success(res) {
        console.log('pay success', res)
        //跳轉(zhuǎn)到支付成功頁面
      },
      fail(res) {
        console.error('pay fail', res)
        //跳轉(zhuǎn)到支付失敗頁面
      }
    })
  }

5 云函數(shù)

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

exports.main = async (event, context) => {    
const res = await cloud.cloudPay.unifiedOrder({
    "body" : event.body,
    "outTradeNo" : event.orderid,
    "spbillCreateIp" : "127.0.0.1",
    "subMchId" : "*******",//這里要注意:雖然key是子商戶id,實(shí)際上就是普通商戶id
    "totalFee" : parseInt(event.money),//第二個(gè)坑:注意必須是數(shù)字鹏秋,如果不是數(shù)字尊蚁,則會(huì)報(bào)錯(cuò)unifiedOrder:fail wx api error: -202
    "envId": "****-20**h",//這里是回調(diào)函數(shù)所屬的的云環(huán)境id
    "functionName": "payCallBack",//這個(gè)是回調(diào)函數(shù)名
    "nonceStr":event.nonceStr,//第三個(gè)坑:官方文檔中相關(guān)云函數(shù)代碼沒有nonceStr和tradeType,測試的時(shí)候會(huì)報(bào)nonceStr不存在的錯(cuò)侣夷,翻看文檔才發(fā)現(xiàn)這個(gè)是必填項(xiàng)横朋,直接粘過來以后還需要加上這兩個(gè)參數(shù)
    "tradeType":"JSAPI"
  })
  return res
}

6 回調(diào)函數(shù)
之前網(wǎng)上的云開發(fā)微信支付都是沒有回調(diào)的,很不方便百拓。

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')

cloud.init({
 // API 調(diào)用都保持和云函數(shù)當(dāng)前所在環(huán)境一致
 env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const _ = db.command;

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {

琴锭。晰甚。。//自己的回調(diào)邏輯

 return { "errcode": 0 }//第四個(gè)坑:注意祠够,一定要返回這個(gè)對象压汪,否則回調(diào)回一直觸發(fā)。尤其是自己的邏輯復(fù)雜的時(shí)候一定要保證所有case的返回都帶上這個(gè)對象古瓤。
}

至此止剖,微信支付開發(fā)完畢。

我在開發(fā)中遇到的更多的坑都已經(jīng)記錄在easyDemo小程序中落君,希望我的demo能給你easy穿香。我還會(huì)持續(xù)更新easyDemo,歡迎收藏绎速。


easyDemo.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皮获,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纹冤,更是在濱河造成了極大的恐慌洒宝,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌京,死亡現(xiàn)場離奇詭異雁歌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)知残,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門靠瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人求妹,你說我怎么就攤上這事乏盐。” “怎么了制恍?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵父能,是天一觀的道長。 經(jīng)常有香客問我净神,道長何吝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任强挫,我火速辦了婚禮,結(jié)果婚禮上薛躬,老公的妹妹穿的比我還像新娘俯渤。我一直安慰自己,他們只是感情好型宝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布八匠。 她就那樣靜靜地躺著絮爷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梨树。 梳的紋絲不亂的頭發(fā)上坑夯,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音抡四,去河邊找鬼柜蜈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛指巡,可吹牛的內(nèi)容都是我干的淑履。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼藻雪,長吁一口氣:“原來是場噩夢啊……” “哼秘噪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勉耀,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤指煎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后便斥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體至壤,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年椭住,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崇渗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京郑,死狀恐怖宅广,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情些举,我是刑警寧澤跟狱,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站户魏,受9級特大地震影響驶臊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叼丑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一关翎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸠信,春花似錦纵寝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葬凳。三九已至,卻和暖如春室奏,著一層夾襖步出監(jiān)牢的瞬間火焰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工胧沫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昌简,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓琳袄,卻偏偏與公主長得像江场,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子窖逗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349