使用云函数+云调用打通微信支付
[[toc]]
#
概述小程序·云开发的云调用功能天然打通微信支付接口,开发者只需要调用相应的函数即可简单完成整套支付流程。
- 无需关心证书、签名,支付流程简化;
- 基于微信私有协议和私有链路,更加安全、高效;
- 免运维,高可用性;
- 按需扩容,弹性伸缩,按量计费,成本缩减;
- 支持通过云函数接受支付回调,无需自建回调服务。
#
流程对比:传统流程 vs 云开发#
代码示例#
第 1 步:小程序调用云函数C 端用户发起支付流程后,小程序端调用云函数(我们假设云函数名为 makeOrder
):
// 小程序代码wx.cloud.callFunction({ name: "makeOrder", data: { /* 开发者自定义参数 */ }});
#
第 2 步:云函数生成订单,返回订单信息云函数 makeOrder
收到调用之后,使用微信服务端 SDK 提供的 API,无需证书和签名,可直接生成订单。
生成订单之后,将订单信息返回给小程序。
// 云函数 makeOrderconst 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
),传入的参数中会带有订单信息。
开发者可以在此云函数中,实现自己的发货、完成订单的逻辑。
// 云函数 payCallbackexports.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 };};