小程序通過小程序云實現(xiàn)微信支付功能實例
一、開通微信支付
1.1 關聯(lián)商戶號
\微信公眾號平臺\功能\微信支付\商戶號管理\關聯(lián)商戶號

1.2 添加商戶號
\云開發(fā)平臺\設置\其他設置\微信支付配置\添加商戶號

1.3 管理員授權
1.2那張圖上,點擊授權。管理員的微信就會跳出提示,點擊確定授權即可。
否則使用的時候,會出現(xiàn)sub_mch_id與sub_appid不匹配的報錯!
二、云函數(shù)開發(fā)
2.1 新建云函數(shù)


2.2 云函數(shù)代碼
\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), //第二個坑:注意必須是數(shù)字,如果不是數(shù)字,則會報錯unifiedOrder:fail wx api error: -202
"envId": "ooo-xxxxxxxxxxxxxxxx", //這里是回調(diào)函數(shù)所屬的的云環(huán)境id
"functionName": "payCallBack", //這個是回調(diào)函數(shù)名
"nonceStr":event.nonceStr, //第三個坑:官方文檔中相關云函數(shù)代碼沒有nonceStr和tradeType,測試的時候會報nonceStr不存在的錯,翻看文檔才發(fā)現(xiàn)這個是必填項,直接粘過來以后還需要加上這兩個參數(shù)
"tradeType":"JSAPI"
})
return res
}
2.3 云函數(shù)上傳并部署


三、小程序調(diào)用
3.1 統(tǒng)一下單
- 微信下單后獲得的數(shù)據(jù),最好先保存到數(shù)據(jù)庫,留底
- 再去調(diào)起微信支付界面
//調(diào)用云函數(shù),微信統(tǒng)一下單
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)//調(diào)用自己的uuid函數(shù)
},
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 調(diào)起微信支付界面
//官方標準的支付方法,調(diào)起支付界面
requestPayment(payData) {
var _this = this;
const payment = payData.payment//這里注意,上一個函數(shù)的result中直接整合了這里要用的參數(shù),直接展開即可使用
wx.requestPayment({
...payment, //...是展開變量的語法
success(res) {
console.log("支付成功", res)
_this.paySuccess()
},
fail(res) {
console.log("支付失敗", res)
}
})
},
3.2 支付成功回調(diào)
- 不太建議直接在requestPayment的success回調(diào)函數(shù)中,執(zhí)行支付成功的操作
- 最好在另外建一個云函數(shù)payCallBack
- 這個云函數(shù)payCallBack,調(diào)用我們自建服務器的接口,執(zhí)行支付成功的操作
- 這邊涉及到如何在云函數(shù)中調(diào)用http接口,賣個關子,后續(xù)講
到此這篇關于小程序通過小程序云實現(xiàn)微信支付功能實例的文章就介紹到這了,更多相關小程序 微信支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JS使用setInterval計時器實現(xiàn)挑戰(zhàn)10秒
這篇文章主要為大家詳細介紹了JS使用setInterval計時器實現(xiàn)挑戰(zhàn)10秒,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11
一個JS函數(shù)搞定網(wǎng)頁標題(title)閃動效果
這篇文章主要介紹了使用JS函數(shù)實現(xiàn)網(wǎng)頁標題(title)閃動效果的代碼,需要的朋友可以參考下2014-05-05
微信小程序調(diào)用騰訊地圖API文檔JavaScript?SDK和WebService?API詳細解讀
本文介紹了如何使用騰訊位置服務,包括申請開發(fā)者密鑰、獲取小程序APPID、下載地圖SDK、設置服務器域名白名單等步驟,詳細說明了如何在微信小程序中集成騰訊位置服務,進行地圖展示和周邊搜索等功能的實現(xiàn),同時提醒注意API的調(diào)用次數(shù)和權限限制,需要的朋友可以參考下2024-09-09

