小程序接入微信支付流程
场景介绍
本篇文档主要介绍在云开发平台搭建的小程序应用,如何使用微信支付云模板接入支付流程
实现流程
安装微信支付模板会自动生成云函数、工作流和 微信支付 APIs,实现下单、支付及回调流程如下:

1 微信支付模板安装
-
在云开发平台模板中心找到小程序微信支付模板

-
安装模板

-
模板安装中

-
模板安装完成

-
查看模板详情

-
在模板参数配置中,需要配置支付商户信息,相关参数说明可参考支付商户配置

2 在编辑器中实现下单和发起支付
支付场景需要在真机环境或者微信开发者工具中预览真实效果,编辑器中无法唤起支付
前置准备
在正式调用支付流程之前,您需要先了解:
-
编辑器中事件基本概念 以及 如何调用 JavaScript 事件方法
-
编辑器中如何调用云函数,这里以 JavaScript 调用方式为示例
-
微信支付-小程序 JSAPI 下单相关参数介绍
调用流程
2.1. 在编辑器中,新建 js 方法,用来触发云函数中的微信支付下单方法以及唤起支付

2.2. js 方法代码如下:
代码中 const orderInfo = event.detail 为编辑器中调用 js 方法的入参,请根据业务实际情况和小程序 JSAPI 下单相关参数进行传递

export default async function ({ event, data }) {
const orderInfo = event.detail;
const ordeResult = await $w.cloud.callFunction({
//云函数名称
name: "wxpayFunctions",
data: {
//调用云函数的下单方法
type: "wxpay_order",
// 小程序全托管授权方式,在编辑器中请使用下面方法传递用户openid,需要预先开启openid登录或手机号授权登录方式
// openid:$w.auth.currentUser.openId,
//业务其它参数
...orderInfo,
},
});
const paymentData = ordeResult.result?.data;
//唤起微信支付组件,完成支付
return new Promise((resolve, reject) => {
wx.requestPayment({
timeStamp: paymentData?.timeStamp, // "1414561699",
nonceStr: paymentData?.nonceStr, // "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",
package: paymentData?.packageVal, //"prepay_id=wx201410272009395522657a690389285100"
signType: paymentData?.signType, //"RSA",
paySign: paymentData?.paySign, //"oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==",
success: function (res) {
resolve(orderInfo._id);
},
fail: function (res) {
reject(orderInfo._id);
},
});
});
}
2.3. 如果小程序和云开发平台是全托管授权方式,云函数中接收 openid 方法需要进行以下改造:

如果小程序和云开发平台是扫码授权的方式,该步骤可以忽略
云函数中需要使用event.openid的方式接收前端 js 方法中传递的用户 openid
payer: {
// 扫码授权方式服务端云函数中直接获取当前用户openId,全托管方式需要使用event.openid来接收
openid: wxContext.OPENID? wxContext.OPENID:event.openid,
},

2.4. 事件触发上述 js 方法,这里以点击事件为例

2.5. 支付云函数中可以通过 event 参数接收前端传递的变量,并在云函数内部进行处理

3 在小程序原生代码中调用
如果业务需要在原生小程序代码中(例如自定义开发的页面、已有的原生小程序项目)调用云模板下单接口,可以参考本节的方式直接通过微信开发者工具调用模板内置的云函数,无需在编辑器中编写逻辑。
当小程序为原生开发或混合开发,且希望复用云开发平台微信支付模板中已有的云函数(wxpayFunctions)时,使用本方式。
前置准备
模板已内置了云函数代码,可以直接在微信开发者工具中下载到本地后修改后使用。也可以手动创建云函数来完成,点击在线代码示例,可以查看云函数示例代码。
3.1 下载模板云函数代码到本地
打开微信开发者工具界面,在 cloudfunctions 目录点击右键,选择同步云函数列表,同步模板中的云函数 wxpayFunctions 到本地;然后在云函数 wxpayFunctions 目录右键,选择下载,即可下载模板内置的云函数代码到本地。如下图所示: