Airwallex 支付配置指南
当前已支持 Airwallex (空中云汇) 的单次支付、周期订阅支付。
激活支付
配置前,请先了解 Zion 支付功能的基本原理与步骤,请阅读支付功能概述,并按照其中的说明创建订单表并激活支付。
配置商户信息
进入控制台
Airwallex 有沙盒环境 和生产环境 两种,请先登录进入对应的控制台。
创建 API 密钥
在控制台中,点击 Settings -> Developers -> API Keys,创建新的 API 密钥。

获取 API 密钥和客户端标识
创建 API 密钥后,系统会自动生成客户端标识。API 密钥仅在创建时可见,若遗忘请点击 Regenerate 重新生成。

配置法定实体标识和关联支付账户标识
在控制台中,点击 Settings -> Entities,创建新的法定实体。


创建 Webhooks
在控制台中,点击 Settings -> Webhooks,点击 New Webhook。

配置 Webhooks
API 版本请直接填入固定值 2025-11-11。
账户选中支付配置中关联支付账户标识对应的账户。
勾选以下事件:
payment_intent.succeededpayment_intent.cancelledinvoice.finalizedsubscription.in_trialsubscription.activesubscription.unpaidsubscription.cancelledsubscription.modifiedrefund.acceptedrefund.failed

通知地址填 Zion 中 Airwallex 支付处理行为流的 Webhook 地址。获取路径如下: 在 Zion 编辑器顶部导航栏点击行为,在左侧边栏找到系统自动生成的 Airwallex 支付处理行为流,点击顶部的触发器节点,复制右侧面板中的 Webhook 地址。

点击 Create,复制下图中的 Webhook 密钥。

将参数填入 Zion 的支付配置中
| 配置项 | 是否必填 | 描述 |
|---|---|---|
| 环境 | 是 | 测试环境选择 DEMO,真实支付选择 PROD。 |
| 客户端标识 | 是 | 上述步骤 3 中获取的客户端标识。 |
| API 密钥 | 是 | 上述步骤 3 中获取的 API 密钥。 |
| Webhook 密钥 | 是 | 上述步骤 6 中获取的 Webhook 密钥。 |
| 法定实体标识 | 否 | 上述步骤 4 中获取的法定实体标识。 |
| 关联支付账户标识 | 否 | 上述步骤 4 中获取的关联支付账户标识。 |
全局 Webhook 架构说明
在 Zion 平台中,所有 Airwallex 的支付、退款、订阅事件均共用同一个系统自动生成的 Airwallex 支付处理行为流作为 Webhook 接收端。系统会根据解析出的事件类型,自动将请求路由至对应的处理分支 (如单次支付状态变更、退款状态变更、订阅状态变更等)。
并发与幂等性保障 Zion 平台底层已通过数据库行锁和唯一索引机制处理了 Webhook 的并发锁问题。配置行为流时,只需通过系统输出的是否已处理标识判断状态,无需自行实现复杂的并发拦截逻辑。平台会自动保障绝对的幂等性,防止重复发货或扣款。
配置单次支付
单次支付适用于用户按单次购买商品或服务的场景。配置单次支付需要配置前端行为以及后端的回调处理。
添加单次支付行为
在 Zion 前端页面按钮的点击时事件中,添加 Airwallex 支付行为,支付类型选择单次支付。
前端防抖与竞态拦截 强烈建议在点击支付按钮后立即禁用该按钮,或使用防抖逻辑,直到支付行为返回结果或收银台关闭。这可以有效防止用户在网络延迟时疯狂连击,导致重复拉起收银台或发起多次无效的支付意图。
行为参数说明:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 必须是绑定的订单表里某一行的标识。建议先通过 新增数据 行为创建订单,再将返回的标识传递给此参数。 |
| 金额 | 无限精度小数 | 是 | 必须大于 0,且小数位数需符合对应币种的规范(例如 USD 最多 2 位小数)。 |
| 币种 | 文本 | 是 | 必须为大写字母的币种代码(如 USD、HKD)。 |
配置 Airwallex 支付处理行为流
当用户完成或取消单次支付时,系统自动生成的 Airwallex 支付处理行为流会自动触发。其处理逻辑如下:
- 判断支付类型:解析事件类型代码块节点会解析出事件类型为
payment_intent.succeeded(成功支付) 或payment_intent.cancelled(取消支付),进入支付状态变更分支。 - 同步支付状态:通过同步支付状态节点自动查询支付记录,将其状态更新为成功或取消,并记录是否已处理标识,防止因网络重试导致的回调重复触发。此节点会输出 5 个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| orderId | 长整数 | 支付记录对应的订单记录的标识。 |
| paymentId | 长整数 | 支付记录的标识。 |
| recurringPaymentId | 长整数 | 订阅续费记录的标识。 |
| paymentStatus | 文本 | 支付状态:SUCCESSFUL 表示支付成功,FAILED 表示支付失败。 |
| alreadyProcessed | 布尔值 | 用于避免重复执行。当其值为 false 时,表示为第一次触发;当为 true 时,表示重复触发。 |
- 判断是否找到支付记录:通过判断支付标识是否为空,确认是否找到支付记录。若为空,则表示未找到,一般不做处理;若不为空,则进入下一分支。
- 判断支付状态:通过判断支付状态 and 是否已处理的值,确认最终支付状态。
- 若支付状态为
SUCCESSFUL且是否已处理为false,则表示支付成功,进入“成功”分支。 - 否则,表示支付失败或取消,进入“其他”分支。
- 若支付状态为
- 自定义业务逻辑配置:在成功分支中配置支付成功后的业务逻辑,例如通过更新数据行为将订单状态修改为已支付。
用法举例
提交单次支付订单 (小程序端 / Web 端)
-
需求: 用户在商品详情页点击购买按钮,系统先在数据库中创建一条订单记录,随后拉起 Airwallex 收银台完成支付。
-
配置流程:
- 前置准备:
- 创建商品详情页;
- 在页面中放置一个购买按钮。
- 选择组件:在商品详情页画布上,选中购买按钮。
- 添加行为:在右侧配置面板中切换到行为标签页,直接在点击时事件下点击添加操作。
- 配置创建订单行为:
- 在行为选择下拉框中,搜索并选中新增数据。
- 目标表选择订单表,配置订单金额、账户 id,订单状态为待支付。
- 配置支付行为:
- 在新增数据行为下方,继续点击添加操作,搜索并选中 Airwallex 支付。
- 支付类型选择单次支付。
- 订单表标识绑定为上一步新增数据行为返回的
id。 - 金额绑定为订单的实际支付金额,币种填入
USD。
- 配置行为流:
- 在 Airwallex 支付处理行为流中,配置“成功”分支的逻辑:更新订单状态为已支付。
- 前置准备:
-
运行结果: 用户点击购买按钮后,系统会先生成订单,随后弹出 Airwallex 支付界面。用户完成支付后,后端的 Airwallex 支付处理行为流会自动触发并更新订单状态为已支付。
配置退款
退款允许商家对已成功支付的订单进行部分或全额资金退回。
添加退款行为
在 Zion 页面中,添加 Airwallex 支付行为。支付类型选择退款。
退款金额超限拦截
同一笔支付可以发起多次退款,但退款金额的总和不能超过支付的总金额。可以在调用退款行为前,先通过查询多条数据行为查出该支付标识下所有状态为成功的退款记录,使用代码块计算已退款总额。若已退款总额加上本次退款金额超过原支付金额,则直接弹出提示并终止后续行为。如果未拦截,
Airwallex 接口会报错,系统将走 refund.failed 的行为流分支。
行为参数说明:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| 支付表 id | 长整数 | 是 | 支付表的标识。 |
| 退款金额 | 无限精度小数 | 是 | 单位为主币种单位。必须大于 0,且小数位数需符合对应币种的规范。 |
配置退款成功与失败的回调处理
当退款成功或失败时,Airwallex 支付处理行为流会自动触发。其处理逻辑如下:
- 判断退款类型:解析事件类型代码块节点会解析出事件类型为
refund.accepted或refund.failed,进入退款状态变更分支。 - 同步退款状态:通过同步退款状态节点自动查询退款记录,将其状态更新为成功或失败,并记录是否已处理标识。此节点会输出 6 个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| orderId | 长整数 | 退款记录对应的订单记录的标识。 |
| refundId | 长整数 | 退款记录的标识。 |
| paymentId | 长整数 | 支付记录的标识。 |
| recurringPaymentId | 长整数 | 订阅续费记录的标识。 |
| status | 文本 | 退款状态:REFUNDED 表示退款成功,FAILED 表示退款失败。 |
| alreadyProcessed | 布尔值 | 用于避免重复执行。当其值为 false 时,表示为第一次触发;当为 true 时,表示重复触发。 |
- 判断是否找到退款记录:通过判断退款标识是否为空,确认是否找到退款记录。若为空,则表示未找到,一般不做处理;若不为空,则进入下一分支。
- 判断退款状态:通过判断状态和是否已处理的值,确认最终退款状态。
- 若状态为
REFUNDED且是否已处理为false,则表示退款成功,进入成功分支。 - 若状态为
FAILED且是否已处理为false,则表示退款失败,进入失败分支。 - 否则,表示其他情况,一般不做处理。
- 若状态为
- 自定义业务逻辑配置:在成功和失败分支中配置退款成功或失败后的业务逻辑,例如更新订单状态为已退款。
配置周期支付
周期支付用于订阅服务、分期付款等需要定期自动扣款的场景。周期支付涉及到发起订阅、自动续费、以及用户退订等步骤。
在 Airwallex 控制台创建产品与价格
在发起周期支付前,必须先在 Airwallex 中配置好对应的产品和价格计划。
- 登录 Airwallex 控制台,点击左侧菜单的 Billing -> Products。
- 点击 Create Product,填写产品名称和描述。
- 在产品的 Pricing 模块中,点击 Add Price。
- 计费模式选择 Recurring (周期性),设置金额和扣款周期 (如每月、每年)。
- 保存后,在价格列表中复制生成的
price ID,后续在 Zion 中发起订阅时需要用到此标识。
添加周期支付行为
在 Zion 页面中,添加 Airwallex 支付行为。支付类型选择周期支付。
行为参数说明:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| 类型 | 文本 | 是 | 周期支付的类型:发起、取消。 |
| 订单表 id | 长整数 | 否 | 关联数据库中的订单记录标识。当类型为发起时必填;当类型为取消时无需填写。 |
| price ID | 文本 | 否 | 周期性价格的标识符。填入上一步在 Airwallex 控制台中获取的价格标识。当类型为发起时必填;当类型为取消时无需填写。 |
执行机制:
- 执行行为时,系统会在后端准备订阅数据,并弹出收银台供用户授权绑卡及周期扣款。
- 授权成功或失败将触发前端的相应分支,但订阅的实际激活确认必须通过后端 Webhook 来处理。
处理周期支付的状态变化
当用户的周期支付发生试用、生效、欠费、续费、取消等状态变更时,Airwallex 支付处理行为流会自动触发。其处理逻辑如下:
- 判断订阅状态:解析事件类型代码块节点会解析出事件类型为其中的一种:
subscription.in_trial(试用期)、subscription.active(生效)、subscription.unpaid(欠费)、subscription.cancelled(取消) 或subscription.modified(修改),进入订阅状态变更分支。 - 同步订阅状态:通过分支内的第一个节点同步订阅状态节点自动查询订阅记录,将其状态更新为试用期、生效、欠费、取消或修改。此节点会输出 2 个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| recurringPaymentId | 长整数 | 订阅记录的标识。 |
| status | 文本 | 订阅状态:IN_TRIAL 表示试用期,ACTIVE 表示生效,UNPAID 表示欠费,CANCELLED 表示取消,MODIFIED 表示修改。 |
- 判断是否找到订阅记录:通过判断周期支付标识是否为空,确认是否找到订阅记录。若为空,则表示未找到,一般不做处理;若不为空,则进入下一分支。
- 判断订阅状态:通过判断 status 的值,确认最终订阅状态。
- 若 status 为
ACTIVE,则表示生效,进入生效分支。 - 若 status 为
CANCELLED,则表示取消,进入取消分支。 - 否则,表示其他情况,一般不做处理。如果开发者有处理其他状态的需求,可自行添加相应的分支。
- 若 status 为
处理周期支付的扣款
当接收到自动续费通知时,Airwallex 支付处理行为流会自动触发。其处理逻辑如下:
- 判断是否为周期支付:若事件类型为
invoice.finalized,则表示为周期支付,进入订阅续费分支。 - 解析发票标识:通过解析发票标识节点自动解析出发票标识。
- 处理订阅续费:通过处理订阅续费节点调用 Airwallex 订阅续费处理行为流,并将解析出的发票标识作为入参传递进去。
Airwallex 订阅续费处理行为流的处理逻辑:
- 判断是否为自动续费:通过判断行为流输入参数发票标识是否为空来确认是否为自动续费。若非空,进入发票标识非空分支。
- 获取或创建续费支付记录:内置自定义代码节点会根据发票标识自动生成或获取当期续费支付记录的支付标识,并同时返回该订阅对应的周期支付标识和首笔关联订单的首笔订单标识。
- 判断是否找到订阅记录:通过判断周期支付标识是否非空,确认该次续费具有有效的订阅记录,进入找到订阅记录分支。
- 获取支付记录:通过查询记录节点,利用上一步输出的支付标识查询当期续费支付记录的详细数据。
- 检查订单标识是否存在:判断该支付记录是否已关联订单 (即订单标识为空)。若为空,说明尚未生成对应新订单,进入创建订单并关联支付分支;否则进入已关联,跳过分支,避免重复创建订单。
- 获取首笔订单:系统利用前面获取到的首笔订单标识,查询用户首次订阅时创建的原始订单数据。
- 创建订单 (需手动配置):在系统自动生成的模板中找到用于创建订单的新增数据节点。开发者必须手动配置字段赋值,将获取首笔订单节点中查出的业务数据赋给新订单。例如,将新订单的订单金额绑定为
获取首笔订单.订单金额,用户标识绑定为获取首笔订单.用户标识。 - 更新支付记录中的订单标识:内置自定义代码节点会自动将新创建的订单标识,更新至当期续费的支付记录,从而完成新订单与本次续费扣款的绑定。
配置权限
在权限系统中可配置行为的权限。尤其是退款行为 (权限默认关闭),建议对普通用户关闭,否则可能造成资金损失。更安全的做法是新建一个管理员角色,并仅对该角色开放退款权限。
