Skip to Content

支付宝支付

Zion 通过支付宝的 电脑网站支付 产品在 Web 应用中收款,支持单次支付和退款。开始前,请先阅读支付功能概述,准备订单表并了解支付结果的处理方式。

支付宝开通周期支付的门槛非常高,Zion 暂不支持。如有需求,请联系工作人员。

开始前

按照支付宝接入准备 注册商户并创建网页应用。接口加签方式选择密钥,算法使用 RSA2。

在支付宝开放平台配置网页应用

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

在支付宝开放平台查看应用基本信息和密钥配置

支付配置

配置支付配置

打开 行为 → 支付,点击 新建,填写配置名称,支付渠道 选择 支付宝,然后点击 创建并开始配置。如果这是项目中第一个支付配置,需要先绑定订单表。

填写商户信息

配置项必填填写方式说明
APPID是文本支付宝开放平台应用的 APPID
支付宝公钥是文本支付宝开放平台提供的支付宝公钥,不是应用公钥
应用私钥是Secret与应用公钥配对的 RSA2 应用私钥

支付宝的通知地址由 Zion 在每次请求时自动提供,无需在支付宝开放平台配置应用网关或通知地址。

选择支付产品和客户端

在 支付产品 中勾选 电脑网站支付,并在 客户端管理 中勾选 Web 应用的客户端。

配置支付结果处理

在 支付结果处理 中为 支付完成时 和 退款成功时 各绑定一个行为流,具体步骤见下文的配置支付结果行为流。

配置权限

打开 权限管理,按角色勾选允许通过这个配置发起的支付类型:

支付类型默认建议
单次支付所有角色已开启为需要付款的角色保留,例如已登录用户
退款未开启只为可信任的管理员角色开启

也可以在 设置 → 权限 → 支付 中统一查看和修改。

配置支付结果行为流

支付宝有两种支付事件:支付完成时 和 退款成功时。Zion 收到支付宝的通知后,先更新对应的支付记录,再运行对应的行为流。你需要在行为流中完成更新订单、发放或回收权益等业务。

支付完成时

用户付款成功后,支付记录变为 SUCCESSFUL,Zion 运行此行为流。支付失败或用户取消支付时不会运行。

添加入参

为行为流添加入参 payment_id(长整数),在支付配置中绑定 支付回调 → 支付 → id。

查询支付记录

添加 「数据库 - 获取数据」节点,查询支付表,条件为 id 等于 payment_id。

判断支付金额是否准确

由于实际支付的金额和订单记录中的金额可能不一致,需要判断金额准确后再做后续处理。

⚠️

这一步非常重要。如果跳过,攻击者可以篡改支付金额,用远低于订单价格的金额完成支付,给你造成直接的经济损失。

添加 条件分支,用以下条件判断金额是否准确:

  • 支付记录/总金额 等于 支付记录/order/{金额字段}。
  • 支付记录/币种 等于 支付记录/order/{币种字段}。

更新订单并发放权益

在条件成立的分支中:

  1. 添加 数据库 节点修改订单表,把订单状态改为已支付。
  2. 按业务需要发放权益,例如为对应的账户开通会员、增加积分,或发送通知。

配置完成后,行为流的结构如下:

退款成功时

退款有了结果后,退款记录变为 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,收到支付宝通知后再更新。配置方法见退款成功时。

常见问题

  1. 支付拉起失败:检查 App ID、商户私钥和支付宝公钥是否来自同一个应用,并确认使用 RSA2。
  2. 提示金额错误:金额必须不小于 0.01,且小数点后不超过两位。
  3. 前端显示成功但订单未更新:检查 支付完成时 是否绑定了行为流、行为流输入是否已配置,以及修改是否已经发布。
  4. 原有的支付宝周期支付不再扣款:支付宝周期支付已停止支持,发起、取消和扣款都会失败。请改用其他支持周期支付的渠道。
Last updated on