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

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

- 如需退款,获取
apiclient_cert.p12API 证书。参阅微信支付 API 证书说明 。
支付配置
配置支付配置
打开 行为 → 支付,点击 新建,填写配置名称,支付渠道 选择 微信支付,然后点击 创建并开始配置。如果这是项目中第一个支付配置,需要先绑定订单表。
如果项目还要在 Web 应用中使用微信支付,请另建一个配置,参阅微信支付(Web 应用)。
填写商户信息
| 配置项 | 必填 | 填写方式 | 说明 |
|---|---|---|---|
| App ID | 是 | 文本 | 已与商户号关联的小程序 AppID |
| 商户号 | 是 | 文本 | 微信支付商户号 |
| 商户密钥 | 是 | Secret | 商户平台设置的 API v2 密钥 |
| apiclient_cert.p12 文件 | 仅退款需要 | 上传文件 | 微信支付 API 证书,上传后自动保存为 Secret |
微信支付的通知地址由 Zion 在每次请求时自动提供,无需在商户平台配置。
选择支付产品和客户端
在 支付产品 中勾选 小程序支付,并在 客户端管理 中勾选微信小程序的客户端。
配置支付结果处理
在 支付结果处理 中为 支付完成时 和 退款成功时 各绑定一个行为流,具体步骤见下文的配置支付结果行为流。
配置权限
打开 权限管理,按角色勾选允许通过这个配置发起的支付类型:
| 支付类型 | 默认 | 建议 |
|---|---|---|
| 单次支付 | 所有角色已开启 | 为需要付款的角色保留,例如已登录用户 |
| 退款 | 未开启 | 只为可信任的管理员角色开启 |
也可以在 设置 → 权限 → 支付 中统一查看和修改。
配置支付结果行为流
微信支付有两种支付事件:支付完成时 和 退款成功时。Zion 收到微信的通知后,先更新支付表或退款表,再运行对应的行为流。你需要在行为流中完成更新订单、发放或回收权益等业务。
支付完成时
用户付款成功后,支付记录变为 SUCCESSFUL,Zion 运行此行为流。支付失败或用户取消支付时不会运行。
添加入参
为行为流添加入参 payment_id(长整数),在支付配置中绑定 支付回调 → 支付 → id。
查询支付记录
添加 「数据库 - 获取数据」节点,查询支付表,条件为 id 等于 payment_id。
判断支付金额是否准确
由于实际支付的金额和订单记录中的金额可能不一致,需要判断金额准确后再做后续处理。
这一步非常重要。如果跳过,攻击者可以篡改支付金额,用远低于订单价格的金额完成支付,给你造成直接的经济损失。
添加 条件分支,用以下条件判断金额是否准确:
支付记录/总金额等于支付记录/order/{金额字段}。支付记录/币种等于支付记录/order/{币种字段}。
更新订单并发放权益
在条件成立的分支中:
- 添加 数据库 节点修改订单表,把订单状态改为已支付。
- 按业务需要发放权益,例如为对应的账户开通会员、增加积分,或发送通知。
配置完成后,行为流的结构如下:
退款成功时
退款有了结果后,退款记录变为 REFUNDED(退款成功)或 FAILED(退款失败),Zion 运行此行为流。退款成功和退款失败都会进入这个行为流,需要分别处理。
添加入参
添加入参 refund_id(长整数),在输入配置中绑定 支付回调 → 退款 → id。
查询退款记录和订单
添加 「数据库 - 获取数据」节点,查询退款表,条件为 id 等于 refund_id。
按退款结果分别处理
添加 条件分支:
退款记录/状态等于REFUNDED:退款成功。在这个分支中再添加 条件分支,判断是全额退款还是部分退款:退款记录/金额等于退款记录/支付/总金额:全额退款,修改订单状态,并回收全部已发放的权益。- 其他情况:部分退款,按业务需要修改订单状态,并回收对应部分的权益。
退款记录/状态等于FAILED:退款失败。按业务需要通知管理员或用户,订单保持原状态。
配置完成后,行为流的结构如下:
配置前端支付行为
单次支付
添加创建订单行为
调用支付行为前,先在已绑定的订单表中创建订单。订单金额、商品和用户等业务数据应保存在订单表中。
添加支付行为
在按钮或其他组件的触发器中添加 支付,支付类型 选择 单次支付,支付配置 选择微前面创建的支付配置,支付产品 选择 小程序支付。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 已绑定订单表中的订单记录 id |
| 金额 | 小数 | 是 | 单位为元,小数点后最多两位 |
| 商品介绍 | 文本 | 是 | 本次交易的商品描述 |
支付行为的 成功时 表示前端调用已成功返回,最终支付状态仍以 支付完成时 为准。出于安全考虑,成功时 不能配置修改数据的行为。
处理支付完成
支付成功后,Zion 把支付记录更新为 SUCCESSFUL,并运行 支付完成时 绑定的行为流,在其中更新订单和发放权益。配置方法见支付完成时。
显示最终结果
前端查询订单表或支付表显示最终状态。需要及时刷新时,可以采用订阅查询的方法。
退款
开放退款权限
退款权限默认不开放。在支付配置的 权限管理 中,只为可信任的管理员角色勾选 退款。
添加退款行为
添加 支付 行为,支付类型 选择 退款。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 支付表 id | 长整数 | 是 | 需要退款的支付记录 id,不是订单 id |
| 退款金额 | 小数 | 是 | 单位为元;超过剩余可退金额时,按剩余可退金额退款 |
可以用订单 id 作为过滤条件查询对应的支付记录,再绑定其 id。只有 SUCCESSFUL 或 PARTIALLY_REFUNDED 的支付记录可以退款。
处理退款结果
发起退款后,退款记录状态为 REFUNDING。微信通知退款结果后,Zion 把退款记录更新为 REFUNDED 或 FAILED,并运行 退款成功时 绑定的行为流。配置方法见退款成功时。
常见问题
- 提示
JSAPI缺少参数 total_fee:确认金额有值、不小于0.01,且小数点后不超过两位;同时检查商户号状态。 - 提示
JSAPI缺少参数 appId:确认 App ID 填写的是当前小程序的 AppID,并且已与商户号关联。 - 退款失败:检查当前角色是否有该支付配置的退款权限,并确认已上传
apiclient_cert.p12。 - 前端显示成功但订单未更新:检查 支付完成时 是否绑定了行为流、行为流输入是否已配置,以及修改是否已经发布。
- 支付行为提示未启用支付产品:在支付配置的 支付产品 中勾选 小程序支付。