支付
Zion 支付能力支持通过内置支付行为完成收款、退款等操作,当前已支持微信 JSAPI 支付、支付宝网页端一次性支付及周期订阅支付。
配置支付所需基础信息
进入支付配置
绑定订单表并激活支付功能
需先创建订单表(建议包含价格、用户 ID 等字段),激活支付时选择该表。
微信支付和支付宝共用同一订单表。订单表绑定后无法更换,订单表无法删除(在支付关闭并清除所有数据后,重新打开支付,可重新绑定)。
激活后系统将自动完成以下操作:
- 创建三张表:支付表(1:N 订单)、周期性支付表、退款表(1:N 支付)
- 创建行为流:
- 微信支付:支付回调、退款回调
- 支付宝:支付/退款回调、周期性支付管理回调、周期性支付定时扣款
配置商户信息
使用支付行为
支付行为包括单次支付、周期支付和退款。为了更好地配置出支付,开发者需要知道一次支付完整的运行流程。
所有支付行为都遵循下图的流程。在 Zion 中,开发者只需要配置其中的绿色部分:
-
在前端页面上使用行为:单次支付、周期支付或退款
-
在对应的行为流中配置业务逻辑
-
在前端页面上查询最终结果
单次支付和退款的配置流程
单次支付用于用户完成单笔商品或服务购买,退款行为用于处理需撤销的支付并将款项退还用户。两者操作流程相似,故合并说明。
配置使用支付/退款行为



行为参数说明:
行为类型 | 参数 | 说明 |
---|---|---|
支付 | 订单表Id | 整数,必须是绑定的订单表里某一行的Id(因此建议先添加订单,成功时调用支付行为)。 |
金额 | 小数,单位为元,小数点后不能超两位,且必须大于0.01。 | |
商品介绍(微信支付) | 文本,商品的描述。 | |
商品名称(支付宝) | 文本,可以是商品的标题/交易标题/订单标题/订单关键字等。 | |
退款 | 支付表Id | 整数,可以用订单Id作为过滤条件,获取对应的支付表Id。 |
退款金额 | 小数,单位为元,小数点后不能超两位。同一笔支付可以发起多次退款,退款金额的总和不能超过支付的总金额。 |
配置支付或退款完成后的业务逻辑
支付或退款完成后将自动触发对应的行为流,行为流内置了一个代码块对结果分析,并返回关键信息。开发者需要在后续的分支中,自行配置业务逻辑。
参数 | 说明 |
---|---|
orderId | 调用支付行为时填写的orderId,可以用它找到对应的订单记录,并更新其状态 |
paymentStatus | 支付状态: REFUNDED - 退款成功 REFUNDING - 退款中 FAILED - 退款失败 |
callbackProgressed | 一次支付可能会多次触发行为流。该参数用于避免重复执行,当其值为 false 时,表示为第一次触发;当为 true 时,表示重复触发。因此 payment_status 为 FAILED 且 callback_progressed 为 false 时,才表示支付失败。支付成功的判断同理。 |
为了安全起见,防止有人恶意利用假的订单信息进行支付或退款(让实际支付的金额远小于订单中的金额),在支付或退款成功后,建议检查实际的支付金额和订单中的金额是否相等。具体方法是用订单 Id 作为过滤条件,分别获取订单表数据和支付表数据,再进行条件判断。
获取支付结果
由于订单表/支付表/退款表的更新在自定义行为流中进行,且需一定时间,前端页面可通过订阅方式获取最新数据。例如调用支付行为后,页面可通过订阅支付表,实时接收支付状态变化。
周期支付的配置流程
周期支付用于订阅服务、分期付款等需要定期自动扣款的场景。周期支付涉及到发起、取消、和自动扣款几个步骤。
发起和取消


类型 | 参数 | 说明 |
---|---|---|
发起 | 订单表Id | 整数,必须是绑定的订单表里某一行的Id(因此建议先添加订单,成功时调用支付行为)。 |
价格 | 小数,单位是元,小数点后不超过两位。由于支付宝的限制,只能支持100元以内的周期支付 | |
商品名称 | 文本 | |
扣款间隔 | 整数,扣款间隔不能少于7天,无最大限制 | |
场景 | 文本,只能填支付宝规定的场景值 (例如:INDUSTRY | |
取消 | 周期支付表Id | 整数,可以用用户Id作为过滤条件获取到对应的周期支付记录 |
周期支付扣款
通过定时触发扣款行为流,查询到需要扣款的周期支付,每个扣款,都需要创建一个新的订单
权限配置
在权限系统中可以配置行为的权限。尤其是退款行为(权限默认关闭),建议对普通用户关闭,否则可能会造成金钱上的损失。更正确的做法是新建一个类似管理员的角色,给它开放退款权限。
注意事项
版本到期的处理
在专业版到期后,线上应用的支付请求会报错,且项目将无法发布。此时你可以:
-
续费专业版。续费后项目能够正常发布,线上支付恢复正常。
-
关闭支付。在支付设置面板中可以关闭支付,支付的配置、行为流会被清除;在部署后端后数据,支付、周期性支付、退款三张表中的数据也会被清除。支付关闭后,项目即可正常发布。
微信支付报错处理
- 调用支付行为报错:JSAPI缺少参数 total_fee
-
检查支付的参数是否正确(例如:确保金额有值且大于0.01)
-
前往商户号检查其状态是否正常
- 调用支付行为报错:JSAPI缺少参数 appId
-
检查商户号是否关联小程序或公众号
-
检查登录信息是否填写正确(appId 和 secret)
支付宝报错处理
- 发起支付宝周期支付,用户在支付宝端显示”商户协议状态不正常”
- 查看周期支付表中是否有同一个账户多次订阅的情况,由于支付宝限制一个用户只能用一个场景码订阅一次,因此如果有一个用户订阅多次的情况,请保证发起周期支付的行为中场景码不同
- 退款成功后,回调行为流没有触发
- 由于支付宝的限制,如果是全额退款,不会触发行为流。