微信支付(小程序端)
Zion 微信小程序使用微信 JSAPI 支付,支持单次支付和退款。开始前,请先阅读支付功能概述,准备订单表并了解支付回调的处理方式。
开始前
- 使用完成企业认证的小程序;个人小程序不能开通微信支付。
- 在微信支付商户平台 注册商户号并开通 JSAPI 支付。
- 将商户号与当前小程序的 AppID 关联。

- 获取商户号和 API v2 密钥。

- 如需退款,获取
apiclient_cert.p12API 证书。参阅微信支付 API 证书说明 。
配置微信支付
激活微信支付
打开 行为 → 支付 → 微信支付(微信小程序),点击 激活。如果这是项目中第一个支付渠道,请选择订单表。
填写商户信息
| 配置项 | 必填 | 说明 |
|---|---|---|
| 商户号 | 是 | 与当前小程序 AppID 关联的微信支付商户号 |
| 商户密钥 | 是 | 商户平台设置的 API v2 密钥 |
| apiclient_cert.p12 文件 | 仅退款需要 | 微信支付 API 证书 |
小程序 AppID 来自当前项目的小程序配置,无需在支付配置中重复填写。保存配置后,从 关联行为流 可以打开系统生成的单次支付处理和退款处理行为流。
发布并测试
发布支付配置、系统表、行为流和页面修改,再使用真实的小程序用户测试。商户号、AppID 或密钥不匹配时,微信支付无法拉起。
单次支付
创建订单
调用支付行为前,先在已绑定的订单表中创建订单。订单金额、商品和用户等业务数据应保存在订单表中。
添加支付行为
在按钮或其他组件的触发器中,从 支付 菜单添加 微信支付,选择 单次支付。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 已绑定订单表中的订单记录 id |
| 金额 | 小数 | 是 | 单位为元,不能小于 0.01,小数点后最多两位 |
| 商品介绍 | 文本 | 是 | 本次交易的商品描述 |
支付行为的 成功时 表示前端调用已成功返回,但最终支付状态仍需由支付回调确认。出于安全考虑,成功时 不能配置修改数据的行为。
处理支付回调
微信发送支付结果后,系统生成的单次支付处理行为流会更新支付表,并提供以下结果:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 本次支付关联的订单 id |
paymentFound | 布尔值 | 是否找到对应的支付记录 |
paymentStatus | 文本 | SUCCESSFUL 或 FAILED |
alreadyProcessed | 布尔值 | 当前状态是否已处理过 |
仅当 paymentFound 为 true、alreadyProcessed 为 false,并且 paymentStatus 符合预期时,才执行对应业务逻辑。支付成功分支通常用于核对订单金额、更新订单状态和发放权益。
显示最终结果
前端查询订单表或支付表显示最终状态。需要及时刷新时,可以使用实时数据源或在页面重新加载时重新查询。
退款
开放退款权限
退款行为默认不向普通用户开放。打开 设置 → 权限 → 支付,只为可信任的管理员角色开启微信退款权限。
添加退款行为
从 支付 菜单添加 微信支付,选择 退款。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 支付表 id | 长整数 | 是 | 需要退款的支付记录 id,不是订单 id |
| 退款金额 | 小数 | 是 | 单位为元;多次退款的总额不能超过原支付金额 |
可以根据订单 id 查询对应的支付记录,再绑定其 id。发起退款前应检查支付状态和累计成功退款金额。
处理退款回调
系统生成的退款处理行为流会更新退款表,并提供:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 退款对应的订单 id |
refundFound | 布尔值 | 是否找到对应的退款记录 |
paymentStatus | 文本 | REFUNDED 或 FAILED |
alreadyProcessed | 布尔值 | 当前退款状态是否已处理过 |
仅在 refundFound 为 true 且 alreadyProcessed 为 false 时处理对应结果。退款成功后,可以在预留分支中更新订单或回收已发放的权益。
常见问题
- 提示
JSAPI缺少参数 total_fee:确认金额有值、不小于0.01,且小数点后不超过两位;同时检查商户号状态。 - 提示
JSAPI缺少参数 appId:确认商户号已关联当前小程序 AppID,并检查小程序配置。 - 退款行为不可选或执行失败:检查当前角色的支付权限,并确认已上传
apiclient_cert.p12。 - 前端显示成功但订单未更新:检查单次支付处理行为流是否已发布,以及支付成功分支中是否配置了订单更新逻辑。