支付功能概述
Zion 的内置支付功能负责连接支付渠道、校验回调并维护支付记录。你需要准备自己的订单表,在前端发起支付,并在系统生成的行为流中配置订单更新、发放权益等业务逻辑。
支付功能仅对专业版及企业版项目开放。项目降级到不支持支付的版本后,线上支付会停止工作。
支持的支付渠道
| 支付渠道 | 客户端 | 单次支付 | 周期支付 | 退款 |
|---|---|---|---|---|
| 微信支付 | 微信小程序 | 是 | 否 | 是 |
| 微信支付 | Web,仅限微信客户端内打开 | 是 | 否 | 是 |
| 支付宝 | Web | 是 | 是 | 是 |
| Airwallex | Web | 是 | 是 | 是 |
微信支付在 Web 和微信小程序中使用不同的商户配置,因此分别提供配置指南。所有支付渠道共用同一张订单表。
激活支付
准备订单表
在数据中创建用于保存业务订单的表。Zion 不要求固定字段,但通常至少需要金额、订单状态和账户关联。
首次激活支付时选择的订单表不能换绑。确认数据模型后再继续。
激活支付渠道
打开 行为 → 支付,在目标支付渠道旁点击 激活。首次激活时选择订单表;以后激活其他渠道时会继续使用同一张订单表。
激活后,Zion 会创建三张不可手动修改结构的系统表。不能在数据编辑器中手动新增这些表的记录;数据由支付行为和回调流程维护。
| 系统表 | 作用 |
|---|---|
| 支付 | 保存单次支付和周期扣款产生的支付记录,并关联订单表 |
| 周期性支付 | 保存订阅关系、当前状态和下次扣款时间等信息 |
| 退款 | 保存退款记录,并关联对应的支付记录 |
Zion 还会根据支付渠道生成支付、退款、订阅状态或周期扣款等行为流。可以从支付配置中的 关联行为流 直接打开它们。
填写商户信息
按照对应渠道的指南填写商户信息并保存。支付配置、系统表和行为流修改需要发布后才会在运行环境生效。
支付如何运行
一次完整的支付通常经过以下步骤:
- 在订单表中创建订单。
- 在页面或组件中调用支付行为,并绑定订单 id 和支付参数。
- 用户在支付渠道提供的收银台完成支付。
- 支付渠道向 Zion 发送 Webhook;系统生成的行为流校验回调并更新支付系统表。
- 在行为流预留的分支中更新订单、发放权益或发送通知。
- 前端查询订单表或支付系统表,显示最终结果。
前端结果与最终支付状态
支付行为提供 成功时 和 失败时,用于处理前端请求或收银台交互结果。出于安全考虑,支付行为的 成功时 不能配置修改数据的行为。
订单是否真正支付成功,应以支付渠道的 Webhook 以及系统生成行为流中的支付状态为准。不要只根据前端分支发货、发放权益或更新订单为已支付。
处理重复回调
支付渠道可能重复发送同一条 Webhook。系统生成的处理节点会提供 alreadyProcessed:
false:本次回调首次被处理,可以继续执行业务逻辑。true:相同状态已处理,通常不再执行后续业务逻辑。
alreadyProcessed 只表示系统支付记录是否已经处理,不能自动保证后续节点幂等。发货、发放权益和扣减库存仍应使用订单状态条件、唯一约束或其他幂等措施。
校验订单金额
支付金额来自前端行为配置。执行发货或发放权益前,建议在回调行为流中根据 orderId 查询订单和支付记录,确认实际支付金额、币种和订单数据一致。该校验用于阻止异常订单进入履约流程。
查询支付结果
前端可以查询订单表,也可以按权限查询支付、周期性支付和退款系统表。需要及时刷新状态时,可以使用实时数据源或在页面重新加载时查询最新数据。
退款表默认只开放基础查询权限。如需聚合统计,应在 设置 → 权限 → 支付 和相关数据权限中按角色开放所需能力。退款行为默认不应向普通用户开放。
停用全部支付
支付配置页面提供 停用全部支付。确认弹窗中的 清空并关闭 会执行不可逆操作:
- 清除所有支付渠道的商户信息和密钥。
- 删除支付、周期性支付和退款系统表及其关联;发布后,线上历史数据也会被删除。
- 删除系统生成的支付行为流和回调触发器,使项目中已有的支付行为失效。
重新激活支付会创建一套新的系统表、行为流和触发器,无法恢复或自动关联此前的数据。执行前请先确认历史数据已经妥善处理。