概述
微信支付是雲開發原生支持的微信生態能力之一,開發者只需要簡單調用相應的函數即可完成整套支付流程,安全又高效。部分優勢包括:
- 無需關心證書、簽名,支付流程簡化;
- 基於微信私有協議和私有鏈路,更加安全、高效;
- 免運維,高可用性;
- 按需擴容,彈性伸縮,按量計費,成本縮減;
- 支持通過雲函數接受支付回調,無需自建回調服務。
流程對比:傳統流程 vs 雲開發
代碼示例
第 1 步:小程序調用雲函數
C 端用戶發起支付流程后,小程序端調用雲函數(此處假設雲函數名為 makeOrder
):
// 小程序代碼
wx.cloud.callFunction({
name: "makeOrder",
data: {
/* 開發者自定義參數 */
}
});
第 2 步:雲函數生成訂單,返回訂單信息
雲函數 makeOrder 收到調用之后,使用微信服務端 SDK 提供的 API,無需證書和簽名,可直接生成訂單。
生成訂單之后,利用 CloudPay.unifiedOrder() 統一下單接口,將訂單信息返回給小程序。
CloudPay.unifiedOrder() 接口文檔:
// 雲函數 makeOrder
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: "小秋TIT店-超市",
outTradeNo: "1217752501201407033233368018",
spbillCreateIp: "127.0.0.1",
subMchId: "1900009231",
totalFee: 1,
envId: "test-f0b102",
functionName: "payCallback" // 支付回調的函數名
});
return res;
};
第 3 步:小程序端發起支付
小程序端收到雲函數返回的訂單信息后,發起支付:
// 小程序代碼
wx.cloud.callFunction({
name: "makeOrder",
data: {
/* 開發者自定義參數 */
},
success: (res) => {
// 取得雲函數返回的訂單信息
const payment = res.result.payment;
// 調起微信客戶端支付
wx.requestPayment({
...payment,
success(res) {
/* 成功回調 */
},
fail(res) {
/* 失敗回調 */
}
});
}
});
第 4 步:使用雲函數接收支付回調,完成支付流程
用戶完成付款之后,微信后台將會調用指定的雲函數(此處假設名為 payCallback),傳入的參數中會帶有訂單信息。
開發者可以在此雲函數中,實現自己的發貨、完成訂單的邏輯。
// 雲函數 payCallback
exports.main = async (event, context) => {
const {
return_code, // 狀態碼
appid, // 小程序 AppID
mch_id, // 微信支付的商戶號
device_info, // 微信支付分配的終端設備號
openid, // 用戶在商戶appid下的唯一標識
trade_type, // 交易類型:JSAPI、NATIVE、APP
bank_type // 銀行類型
// ......
// 更多參數請參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8
} = event;
/*
開發者自己的邏輯
*/
// 向微信后台返回成功,否則微信后台將會重復調用此函數
return { errcode: 0 };
};
相關文檔:
雲函數文檔:
https://docs.cloudbase.net/cloud-function/introduce.html
雲調用文檔:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html
wx-server-sdk 文檔:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/Cloud.html
CloudPay.unifiedOrder() 接口文檔: