支付宝支付
Zion 通过支付宝的 电脑网站支付 产品在 Web 应用中收款,支持单次支付和退款。开始前,请先阅读支付功能概述,准备订单表并了解支付结果的处理方式。
支付宝开通周期支付的门槛非常高,Zion 暂不支持。如有需求,请联系工作人员。
开始前
按照支付宝接入准备 注册商户并创建网页应用。接口加签方式选择密钥,算法使用 RSA2。

通过支付宝开放平台密钥工具生成应用私钥,并在应用的开发设置中获取支付宝公钥。不要把应用公钥误填为支付宝公钥。

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