本文來(lái)自嗶哩嗶哩視頻學(xué)習(xí)所得:
微信支付·交互流程圖

congig0.png
微信支付接入·前準(zhǔn)備工作

config1.png
:
老版本微信簽名支付

pay0.png

pay1.png
小程序·云函數(shù)實(shí)現(xiàn)
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const mch_id = "商戶(hù)號(hào)";
const envId = "云環(huán)境ID";
const db = cloud.database();
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
let openid = wxContext.OPENID;
let {
totalFee
} = event;
let body = "商品描述";
let nonceStr = Math.random().toString(36).substr(2, 13); // 32位隨機(jī)字符串,此處是11位
let timeStamp = parseInt(Date.now() / 1000);
let outTradeNo = 'cloud' + timeStamp + nonceStr; // 商戶(hù)訂單號(hào),32位以?xún)?nèi)的唯一字符串,此處是25位
let tradetype = 'JSAPI'; // 交易類(lèi)型,小程序:JSAPI
// 生成預(yù)支付交易單
const result = await cloud.cloudPay.unifiedOrder({
body,
nonceStr,
tradetype,
outTradeNo,
spbillCreateIp: '127.0.0.1', // 調(diào)用微信支付的機(jī)器Ip
subMchId: mch_id,
totalFee, // 訂單金額,單位(分)。必須是整數(shù)
envId: envId,
functionName: 'wxPayCallback' // 接收微信支付異步回調(diào)的云函數(shù)名
})
// 記錄交易訂單信息
db.collection('order').add({
data: {
_openid: openid,
body,
outTradeNo,
totalFee,
status: 0,
createTime: Date.now()
}
});
return result;
}
支付回調(diào)云函數(shù)
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const envId = "云環(huán)境id";
const db = cloud.database();
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
// resultCode:SUCCESS/FALL teansactionId:微信訂單號(hào)
let {
resultCode,
outTradeNo,
teansactionId
} = event;
let status = resultCode === 'SUCCESS' ? 1 : 2
let params = {
event,
transactionId,
status
}
await db.collection("order").where({
outTradeNo: outTradeNo
}).update({
data: params
});
return {
code: 0,
msg: 'success'
}
}