PAYMENT-SIGNATURE 提交方式,Agent 侧交互不需要商户 API Key。
两种集成模式
模式一:商户自持 402
你的服务端自己充当 x402 server:向 Agent 返回 402 challenge、接收签名,再通过
order/create 把签名转交 Waffo 结算。适合希望 Agent 全程停留在自己 API 上、愿意实现 x402 协议细节的商户。模式二:Waffo 托管 402
你只创建订单,把 Waffo 返回的托管地址交给 Agent;402 challenge、签名接收与结算全部由 Waffo 收银台完成。适合不想实现 x402 协议细节、快速上线的商户。
order/create 接口,区分方式只有一个:请求的 x402Info 里带不带 paymentSignatureHeader——带签名走模式一,不带走模式二。
前提条件
x402 收单需要先通过 Waffo 对接团队完成两项开通:
- 商户合同开通 CRYPTO / USDC 支付产品
- Waffo 侧配置你的链上收款参数
wallet/inquiry 与 order/create 返回错误码 A0010(商户合同不允许此操作)。当前支持范围
获取链上收款参数
模式一构造 402 challenge 前,先调用POST /api/v1/wallet/inquiry 获取收款参数。该接口只做查询:不创建订单、不校验金额。
| 字段 | 说明 |
|---|---|
network | CAIP-2 网络标识。沙箱返回 Base Sepolia eip155:84532,生产返回 Base 主网 eip155:8453 |
asset | USDC 代币合约地址(随环境与网络变化,生产 Base 主网为 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) |
payTo | Waffo 平台收款地址。Waffo 链上收款后按合同结算给你 |
三个字段都来自 Waffo 配置,请原样用于构造 challenge:
payTo 不能替换为你自己的钱包地址,Agent 签名中的收款地址与金额会在结算前被链上校验。模式一:商户自持 402
你需要做四件事:- 调
wallet/inquiry取network/asset/payTo,按定价构造 402 challenge(金额用原子单位,scheme固定exact)返回给 Agent - 从 Agent 的重试请求头
PAYMENT-SIGNATURE中取出签名,原样放入order/create的x402Info.paymentSignatureHeader(不要解码后重新组装) - 按同步响应的
orderStatus决定放行:PAY_SUCCESS放行,PAY_IN_PROGRESS等 Webhook 或order/inquiry终态,ORDER_CLOSE拒绝 - 放行时把响应中的
x402Info.x402Response作为PAYMENT-RESPONSE头返回给 Agent,作为符合 x402 协议的结算回执
goodsInfo、orderRequestedAt 等)与普通一次性支付建单一致,以 API Reference 为准。
paymentSignatureHeader 是 base64 编码的 x402 PaymentPayload,解码后结构如下(由 Agent 侧 x402 SDK 生成,商户无需构造):
x402Response 是 base64 编码的结算回执(x402 SettlementResponse),仅在 orderStatus = PAY_SUCCESS 时返回,解码后:
transaction 是链上交易 hash,可用于对账与链上核验;payer 是 Agent 的付款钱包地址。
模式二:Waffo 托管 402
你需要做三件事:order/create传x402Info: { "x402Request": true }(不带签名),并带上successRedirectUrl/failedRedirectUrl- 解析响应中的
orderAction(JSON 字符串)取出webUrl,将 Agent 302 重定向过去;之后的 402 challenge、签名接收、结算全部发生在 Waffo 收银台 - 以 Webhook 或
order/inquiry返回的orderStatus为准放行资源
webUrl 收到 HTTP 402,challenge 在响应体中(x402 协议规定 challenge 位于 body,没有专门的响应头):
PAYMENT-SIGNATURE 请求头(对应 x402 规范中的 X-PAYMENT),无需任何商户凭证:
successRedirectUrl 或 failedRedirectUrl。该托管地址同时兼容浏览器访问(渲染收银台页面)与 x402 client 访问(返回协议响应)。
支付成功后,Webhook 通知与 order/inquiry 响应会附带 x402Info.x402Response(字段结构与模式一相同),其余通知结构与普通订单一致,参见 Webhook 事件类型。
模式对比
| 维度 | 模式一:商户自持 402 | 模式二:Waffo 托管 402 |
|---|---|---|
| 谁充当 x402 server(发 402、收签名) | 商户服务端 | Waffo 收银台 |
| 是否需要实现 x402 协议细节 | 是(构造 challenge、解析签名头) | 否 |
order/create 是否带签名 | 带(x402Info.paymentSignatureHeader) | 不带 |
| 建单响应 | 直接返回终态或 PAY_IN_PROGRESS | AUTHORIZATION_REQUIRED + 托管地址 |
| 跳转 | 无(Agent 全程请求商户 API) | 商户 302 → 收银台 302 回跳 |
| 资源放行依据 | 同步响应 / Webhook / inquiry 的 orderStatus | Webhook / inquiry 的 orderStatus |
| 适合 | 自建 x402 服务、深度定制的商户 | 快速上线、不碰协议细节的商户 |
PAY_IN_PROGRESS、AUTHORIZATION_REQUIRED 等)与其他支付方式一致,参见支付生命周期。
金额与小数位(两层单位)
同一笔交易中的金额有两层表示,不要混用:| 层 | 字段 | 表示方式 | 示例(9.99 USDC) |
|---|---|---|---|
| Waffo API 层 | orderAmount | String,最多 2 位小数 | "9.99" |
| 链上 / x402 协议层 | value、maxAmountRequired | String,原子单位整数(USDC 链上精度 6 位) | "9990000" |
orderAmount;402 challenge 与 EIP-3009 签名中的金额始终是原子单位。模式一中两层金额必须对应同一数值,否则结算校验失败。
错误码
x402 复用 Waffo 既有对外错误码,msg 会说明具体原因:
| 错误码 | 含义 | x402 场景下的常见触发 |
|---|---|---|
A0003 | 参数校验失败 | challenge / 签名的 scheme 不是 exact;缺少 paymentRequestId |
A0007 | 不支持的交易币种 | orderCurrency 不是 USDC,或商户没有可用的同币种 USDC 合同 |
A0010 | 商户合同不允许此操作 | 未开通 CRYPTO/USDC 支付产品,或链上收款参数未配置 |
常见问题
沙箱环境用的是哪条链?
沙箱环境用的是哪条链?
沙箱走 Base Sepolia 测试网(
eip155:84532),USDC 合约地址为 0x036CbD53842c5426634e7929541eC2318f3dCF7e;生产走 Base 主网(eip155:8453),USDC 合约地址为 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913。两个环境的 network / asset / payTo 都以 wallet/inquiry 实际返回为准。支持其他币种或其他网络吗?
支持其他币种或其他网络吗?
当前仅支持 USDC + Base 网络,
orderCurrency 传其他币种会返回 A0007。orderStatus 是 PAY_IN_PROGRESS,可以先放行资源吗?
orderStatus 是 PAY_IN_PROGRESS,可以先放行资源吗?
不可以。
PAY_IN_PROGRESS 只表示链上处理中,最终可能成功也可能失败。只有 orderStatus = PAY_SUCCESS 才能放行资源,终态通过 Webhook 或 order/inquiry 收敛。402 challenge 在响应头还是响应体里?
402 challenge 在响应头还是响应体里?
在响应体(JSON body)里,没有携带 challenge 的响应头。x402 交互中唯一的协议请求头是 Agent 提交签名用的
PAYMENT-SIGNATURE(对应 x402 规范的 X-PAYMENT);结算回执通过 x402Info.x402Response 字段返回,对应规范的 X-PAYMENT-RESPONSE。这和「AI 集成工具(waffo-integrate)」是一回事吗?
这和「AI 集成工具(waffo-integrate)」是一回事吗?
不是。AI 集成工具是用 AI 编码工具帮你生成 Waffo SDK 集成代码;本页是 AI Agent 作为付款方用稳定币购买你的服务。两者可以同时使用,但解决的问题不同。
延伸阅读
- 支付生命周期:订单状态机与终态收敛
- 币种与金额:金额格式与小数位规则
- 幂等机制:
paymentRequestId的幂等语义 - Webhook 概览:签名验证与重试策略
- API Reference:
order/create、order/inquiry、wallet/inquiry的完整字段定义