Airwallex 支付
Zion 通过 Airwallex Drop-in 支持多币种单次支付、周期支付和退款。开始前,请先阅读支付功能概述,准备订单表并了解支付回调的处理方式。
配置 Airwallex
准备 Airwallex 账户
登录 Airwallex 的测试环境 或生产环境 。在 Settings → Developers → API Keys 创建 API 密钥并保存 Client ID。API 密钥只在创建时显示;遗失后需要重新生成。


如果账户使用法定实体或关联支付账户,还需要在 Settings → Entities 获取 Legal entity ID 和 Linked payment account ID。


激活 Airwallex
打开 行为 → 支付 → Airwallex(Web),点击 激活。如果这是项目中第一个支付渠道,请选择订单表。
激活后,从 关联行为流 打开系统生成的 Airwallex 支付处理行为流,点击顶部的 Webhook 触发器并复制 Webhook 地址。
创建 Airwallex Webhook
在 Airwallex 控制台打开 Settings → Webhooks,创建 Webhook:

- API version:固定填写
2025-11-11。 - Account:选择 Linked payment account ID 对应的账户;未使用关联支付账户时选择当前收款账户。
- Notification URL:填写 Airwallex 支付处理行为流的 Webhook 地址。
- Events:勾选以下事件。
payment_intent.succeeded
payment_intent.cancelled
invoice.finalized
subscription.in_trial
subscription.active
subscription.unpaid
subscription.cancelled
subscription.modified
refund.accepted
refund.failed
创建后复制 Webhook secret。

填写支付配置
| 配置项 | 必填 | 说明 |
|---|---|---|
| 环境 | 是 | 测试环境选择 DEMO,生产环境选择 PROD |
| Client ID | 是 | Airwallex 账户的 Client ID |
| API key | 是 | Airwallex API 密钥 |
| Webhook secret | 是 | 刚创建的 Webhook 密钥 |
| Legal entity ID | 否 | 使用法定实体时填写 |
| Linked payment account ID | 否 | 使用关联支付账户时填写 |
保存并发布支付配置、系统表、行为流和页面修改。测试配置只能配合 Airwallex 测试环境使用,不能与生产凭证混用。
Webhook 处理方式
支付、退款和订阅状态事件共用 Airwallex 支付处理行为流。该行为流解析事件类型、更新相应系统表,并将事件路由到支付、退款、订阅状态或订阅续费分支。
Airwallex 可能重复发送同一条 Webhook。仅当系统结果中的 alreadyProcessed 为 false 时,才继续执行对应业务逻辑。
该结果只表示系统支付记录是否已处理,不能保证发货、发放权益或扣减库存等后续节点幂等。这些操作仍需使用订单状态条件、唯一约束或其他幂等措施。
单次支付
创建订单并添加行为
先在已绑定的订单表中创建订单,再从组件触发器的 支付 菜单添加 Airwallex → 单次支付。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 已绑定订单表中的订单记录 id |
| 币种 | 文本 | 是 | Airwallex 支持的币种代码,如 USD、HKD |
| 金额 | 小数 | 是 | 使用主货币单位;例如 10 美元填写 10 |
建议用户点击后立即禁用支付按钮,直到支付行为返回或收银台关闭,避免重复拉起收银台。
支付行为的 成功时 表示前端调用已成功返回,不能配置修改数据的行为。最终结果由 Webhook 确认。
处理支付回调
Airwallex 支付处理行为流的同步支付状态节点提供:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 关联的订单 id |
paymentId | 长整数 | 支付记录 id |
recurringPaymentId | 长整数 | 周期扣款时关联的订阅记录 id;单次支付可能为空 |
paymentStatus | 文本 | SUCCESSFUL 或 CANCELLED |
alreadyProcessed | 布尔值 | 当前状态是否已处理过 |
仅当 paymentId 有值、paymentStatus 为 SUCCESSFUL 且 alreadyProcessed 为 false 时执行支付成功逻辑。发货或发放权益前,应核对订单金额、币种和支付记录。
退款
配置权限并添加行为
退款行为默认不向普通用户开放。在 设置 → 权限 → 支付 中,只为可信任的管理员角色开启 Airwallex 退款权限。
从 支付 菜单添加 Airwallex → 退款:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 支付表 id | 长整数 | 是 | 需要退款的支付记录 id,不是订单 id |
| 退款金额 | 小数 | 是 | 使用原支付币种的主货币单位;累计退款不能超过支付金额 |
发起退款前,应查询成功退款记录并检查累计退款金额。
处理退款回调
同步退款状态节点提供:
| 结果 | 类型 | 说明 |
|---|---|---|
orderId | 长整数 | 关联的订单 id |
refundId | 长整数 | 退款记录 id |
paymentId | 长整数 | 原支付记录 id |
recurringPaymentId | 长整数 | 周期扣款退款时关联的订阅记录 id |
status | 文本 | REFUNDED 或 FAILED |
alreadyProcessed | 布尔值 | 当前退款状态是否已处理过 |
仅当 refundId 有值且 alreadyProcessed 为 false 时,根据 status 处理订单、权益和通知。
周期支付
先在 Airwallex 控制台的 Billing → Products 创建产品和 Recurring Price,并复制 Price ID。
发起订阅
添加 Airwallex → 周期支付 → 发起。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 订单表 id | 长整数 | 是 | 首次订阅对应的订单记录 id |
| Price ID | 文本 | 是 | Airwallex Recurring Price 的 id |
前端分支只表示订阅授权交互结果。订阅是否生效必须以 Webhook 同步后的周期性支付记录为准。
取消订阅
添加 Airwallex → 周期支付 → 取消,并绑定需要取消的 周期支付表 id。
处理订阅状态
Airwallex 支付处理行为流会接收 subscription.in_trial、subscription.active、subscription.unpaid、subscription.cancelled 和 subscription.modified 等事件,并同步周期性支付表。
同步结果包括 recurringPaymentId 和 status。系统保存的状态包括 INCOMPLETE、TRIALING、ACTIVE、UNPAID 和 CANCELED;subscription.modified 是 Webhook 事件,不是名为 MODIFIED 的订阅状态。
根据业务需要,在 ACTIVE、CANCELED 或其他状态分支中启用、暂停或收回订阅权益。
配置续费订单
invoice.finalized 会进入订阅续费处理。系统根据 Invoice ID 获取或创建当期支付记录,并打开 Airwallex 订阅续费处理行为流。
在该行为流预留的创建订单位置:
- 根据首次订阅订单创建本期业务订单,并填写金额、账户和其他业务字段。
- 将新增订单的 id 交给后续系统节点,使当期支付记录关联该订单。
- 在对应支付回调确认成功后,再发放本期权益。
模板会检查当期支付记录是否已有订单 id,以避免重复创建续费订单;用户添加的其他业务节点仍需自行保证幂等。
常见问题
- Webhook 校验失败:检查 Notification URL、Webhook secret、API version 和所选账户是否与 Zion 配置一致。
- 支付状态没有更新:确认所需事件已经勾选,并检查 Airwallex 支付处理行为流是否已发布。
- 支付被取消却进入其他分支:单次支付取消状态为
CANCELLED,不是FAILED。 - 订阅授权完成但权益未启用:以周期性支付表的
ACTIVE状态为准,不要只使用前端成功分支。 - 续费产生支付记录但没有订单:配置 Airwallex 订阅续费处理行为流中的创建订单节点。