文章目錄
- 一、開通微信支付
-
- 1.1 關聯商戶号
- 1.2 添加商戶号
- 1.3 管理者授權
- 二、雲函數開發
-
- 2.1 建立雲函數
- 2.2 雲函數代碼
- 2.3 雲函數上傳并部署
- 三、小程式調用
-
- 3.1 統一下單
- 3.2 調起微信支付界面
- 3.2 支付成功回調
一、開通微信支付
1.1 關聯商戶号
\微信公衆号平台\功能\微信支付\商戶号管理\關聯商戶号

1.2 添加商戶号
\雲開發平台\設定\其他設定\微信支付配置\添加商戶号
1.3 管理者授權
1.2那張圖上,點選授權。管理者的微信就會跳出提示,點選确定授權即可。
否則使用的時候,會出現
sub_mch_id與sub_appid不比對
的報錯!
二、雲函數開發
2.1 建立雲函數
2.2 雲函數代碼
\pay\index.js
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.outTradeNo,
"spbillCreateIp" : "127.0.0.1",
"subMchId" : "0000000000", //這裡要注意:雖然key是子商戶id,實際上就是普通商戶id
"totalFee" : parseInt(event.totalFee), //第二個坑:注意必須是數字,如果不是數字,則會報錯unifiedOrder:fail wx api error: -202
"envId": "ooo-xxxxxxxxxxxxxxxx", //這裡是回調函數所屬的的雲環境id
"functionName": "payCallBack", //這個是回調函數名
"nonceStr":event.nonceStr, //第三個坑:官方文檔中相關雲函數代碼沒有nonceStr和tradeType,測試的時候會報nonceStr不存在的錯,翻看文檔才發現這個是必填項,直接粘過來以後還需要加上這兩個參數
"tradeType":"JSAPI"
})
return res
}
2.3 雲函數上傳并部署
三、小程式調用
3.1 統一下單
- 微信下單後獲得的資料,最好先儲存到資料庫,留底
- 再去調起微信支付界面
//調用雲函數,微信統一下單
cloudPay(){
var _this = this
this.setData({
body: "賬單支付-xxxxx",
outTradeNo: this.data.id+"-"+util.uuid(16),
totalFee: this.data.totalCost*100 //支付機關:分
})
app.showLoading(true)
wx.cloud.callFunction({
name: "pay",
data: {
body: _this.data.body,
outTradeNo: _this.data.outTradeNo,
totalFee: _this.data.totalFee,
nonceStr:util.uuid(32)//調用自己的uuid函數
},
success(res) {
// errCode: 0
// errMsg: "cloudPay.unifiedOrder:ok"
// returnCode: "FAIL"
// returnMsg: "total_fee is empty. "
console.log("送出成功", res.result)
if(res.result.returnCode!="SUCCESS"){
app.showToast(res.result.returnMsg)
return
}
_this.unifiedOrder(res.result)
// _this.requestPayment(res.result)
},
fail(res) {
console.log("送出失敗", res)
}
})
},
3.2 調起微信支付界面
//官方标準的支付方法,調起支付界面
requestPayment(payData) {
var _this = this;
const payment = payData.payment//這裡注意,上一個函數的result中直接整合了這裡要用的參數,直接展開即可使用
wx.requestPayment({
...payment, //...是展開變量的文法
success(res) {
console.log("支付成功", res)
_this.paySuccess()
},
fail(res) {
console.log("支付失敗", res)
}
})
},
3.2 支付成功回調
- 不太建議直接在
的requestPayment
回調函數中,執行支付成功的操作success
- 最好在另外建一個雲函數
payCallBack
- 這個雲函數
,調用我們自建伺服器的接口,執行支付成功的操作payCallBack
- 這邊涉及到如何在雲函數中調用http接口,賣個關子,後續講
覺得好,就一鍵三連呗(點贊+收藏+關注)