支付功能概述
Zion 支付功能可接入微信支付、支付宝、Stripe 和 Airwallex 四种支付渠道,满足单次支付、周期支付和退款等常见需求。对接渠道、确认支付结果、记录交易这些繁琐的环节都由 Zion 完成,开发者只需要完成填写商户信息等几个步骤,就可以便捷地接入支付功能。
支付功能仅对专业版项目开放。项目降级后,线上支付会停止工作。
支付渠道
一个项目可以同时使用多个支付渠道,同一渠道也可以接入多个商户号。
| 支付渠道 | 适用客户端 | 单次支付 | 周期支付 | 退款 |
|---|---|---|---|---|
| 微信支付 | 微信小程序、在微信内打开的 Web 应用 | 是 | 否 | 是 |
| 支付宝 | Web 应用 | 是 | 否 | 是 |
| Stripe | Web 应用 | 是 | 是 | 是 |
| Airwallex | Web 应用 | 是 | 是 | 是 |
支付功能
- 单次支付:用户下单后一次性付款,例如购买商品、课程或会员。
- 周期支付:按周期自动扣款,适合会员订阅、套餐续费等持续收费的业务。
- 退款:对已支付的订单全额或部分退款。
支付完成、退款成功或周期支付状态变化后,Zion 会自动更新支付记录,并运行你指定的行为流,完成更新订单、发放权益等后续业务。
配置步骤
所有支付渠道的配置都遵循以下步骤:
绑定订单表
Zion 要求每一笔支付或退款都要有对应的订单记录,因此激活支付时,要求绑定一张订单表。
订单表由开发者自行创建。Zion 对订单表的字段没有要求,但建议至少有金额、订单状态和账户关联。
打开 行为 → 支付,点击 新建。项目第一次使用支付时,会先弹出 绑定订单表,从中选择订单表。账户表不能作为订单表。
订单表绑定后,只有关闭支付并重新激活,才可以更换订单表。
绑定后,Zion 会创建三张系统表,并把它们与订单表关联。这三张表的结构和数据都不能被开发者修改。
| 系统表 | 作用 |
|---|---|
| 支付 | 保存单次支付和每期订阅扣款的支付记录,并关联订单表 |
| 周期性支付 | 保存订阅、当前状态和当前计费周期 |
| 退款 | 保存退款记录,并关联对应的支付记录 |
各表的字段和状态值见支付参考。
新建支付配置
在 新建支付 中填写:
- 支付配置:配置名称,项目内不能重名。
- 支付渠道:选择支付服务商。支付渠道创建后不可更改。
点击 创建并开始配置,打开配置面板。面板有 配置、客户端管理 和 权限管理 三个标签页。
填写商户信息
在 配置 → 商户信息 中填写对应渠道的商户信息。
敏感信息(如微信的商户密钥)只能绑定 Secret,不能直接填写明文。点击字段打开绑定菜单,可以选择已有 Secret,也可以点击 新建 Secret 填写名称和值。创建后可以在 设置 → Secret 中管理。
选择支付产品
在 支付产品 中勾选这个配置要启用的收银方式。每个产品下方会标明适用的客户端。支付行为只能使用当前客户端可用、并且在配置中已勾选的支付产品。
设置可用客户端
在 客户端管理 中勾选可以使用这个配置的客户端,或勾选 全部。
配置支付结果处理
在 配置 → 支付结果处理 中为每种支付事件绑定行为流。详见下文的处理支付结果。
配置权限
在 权限管理 中,按角色勾选允许通过这个配置发起的支付类型。新建配置时,所有角色默认获得 单次支付 权限;Stripe 和 Airwallex 还默认获得 订阅支付 权限。退款 默认不开放。
也可以在 设置 → 权限 → 支付 中统一查看和修改所有支付配置的权限。
发布
支付配置、凭证、支付结果处理和权限修改都需要发布后才会在线上生效。
发起支付
在页面或组件的触发器中添加 支付 行为,然后依次设置:
| 设置 | 说明 |
|---|---|
| 支付类型 | 单次支付、周期支付 或 退款 |
| 支付配置 | 选择要使用的支付配置。当前客户端不可用、或不支持当前支付类型的配置会显示为不可选 |
| 支付产品 | 选择当前客户端可用、并且配置中已勾选的支付产品。只有一个可选项时会自动填入 |
选择支付配置后,行为会切换为对应渠道的参数,例如订单表 id、金额和商品名称。各渠道的参数和金额单位见对应的渠道指南。
前端结果与最终支付状态
支付行为提供 成功时 和 失败时,用于处理前端请求或收银台交互的结果。出于安全考虑,支付行为的 成功时 不能配置修改数据的行为。
订单是否真正支付成功,以支付平台的通知为准。不要只根据前端的 成功时 发货、发放权益或把订单更新为已支付。
处理支付结果
用户完成支付、退款或订阅续费后,支付平台会向 Zion 发送通知。Zion 校验通知签名、更新系统表中的状态,再按事件类型运行你绑定的行为流。
支付事件
| 事件 | 触发时机 | 适用渠道 |
|---|---|---|
| 支付完成时 | 一笔支付记录变为 SUCCESSFUL | 全部 |
| 退款成功时 | 一笔退款记录变为 REFUNDED 或 FAILED | 全部 |
| 订阅状态变更时 | 订阅的状态发生变化 | Stripe、Airwallex |
| 订阅续费时 | 订阅产生新一期账单,系统为它创建了支付记录 | Stripe、Airwallex |
支付被取消或支付失败时不会触发任何事件。退款成功时 会在退款成功和退款失败时都触发,需要在行为流中根据退款记录的 状态 分别处理。
绑定行为流
选择或新建行为流
在 支付结果处理 中,每种事件对应一行 运行行为流。可以选择已有行为流,也可以点击 新建行为流,Zion 会创建一个以配置名称和事件命名的行为流并跳转过去。清空选择即可解除绑定。
每种事件最多绑定一个行为流。
配置行为流输入
在行为流中添加入参,例如长整数类型的支付 id。回到 支付结果处理,点击已绑定行为流旁的设置按钮,打开输入配置,把入参绑定到 支付回调 下的数据。
建议只传入该事件对应记录的 id,在行为流内再用 id 查询完整数据。支付回调 下的支付、退款和周期性支付可以选择其字段,但不能选择它们的关联数据。各事件可用的数据见支付参考。
运行规则
- Zion 先更新系统表,再运行你的行为流。行为流中查询到的支付、退款或订阅记录已经是最新状态。
- 只有状态真正发生变化时才会触发事件。支付平台重复发送同一条通知,不会重复运行行为流。
- 行为流以管理员身份运行,不受当前用户的数据权限限制。
- Zion 收到通知后会先答复支付平台,再运行行为流。行为流运行失败不会重试,可以在运行日志中排查。发货、发放权益和扣减库存等节点仍应使用订单状态条件或唯一约束保证幂等。
处理订阅续费
订阅续费时 用于为新一期账单创建业务订单。Zion 已经为这一期创建了支付记录,但没有关联订单。绑定的行为流必须满足:
- 使用 同步执行。
- 出参为一个长整数,值为新建订单的 id。
Zion 把这个订单 id 写回本期支付记录。之后这笔扣款成功时,会触发 支付完成时,并带上该订单。行为流不满足这两条要求时,编辑器会提示错误;没有返回订单 id 时,这一期的支付记录不会关联订单。
校验订单金额
支付金额来自前端行为的参数。发货或发放权益前,建议在 支付完成时 的行为流中查询订单,比对订单金额与 订单已支付金额(该订单所有成功支付记录的金额合计)和币种。
查询支付结果
前端可以查询订单表,也可以按数据权限查询支付、周期性支付和退款系统表。绑定订单表时,Zion 会为已登录用户角色开放这三张表的查询权限。需要及时刷新状态时,可以使用实时数据源或重新查询页面数据。
删除支付配置
在支付配置卡片上点击删除,确认后会同时删除该配置的支付结果处理绑定和权限配置,且无法恢复。引用该配置的支付行为需要重新选择支付配置。
停用所有支付
支付页面提供 停用所有支付。确认后会执行不可逆操作:
- 删除全部支付配置和支付结果处理绑定。
- 删除支付、周期性支付和退款系统表及其关联;发布后,线上历史数据也会被删除。
重新启用支付需要重新绑定订单表,Zion 会创建一套新的系统表,无法恢复或自动关联此前的数据。执行前请先确认历史数据已经妥善处理。