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 获取收款参数。该接口只做查询:不创建订单、不校验金额。
三个字段都来自 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 事件类型。
模式对比
订单状态语义(
PAY_IN_PROGRESS、AUTHORIZATION_REQUIRED 等)与其他支付方式一致,参见支付生命周期。
金额与小数位(两层单位)
同一笔交易中的金额有两层表示,不要混用:
换算规则:原子单位 = 金额 × 106。币种与金额中 USDC 的 2 位小数指 Waffo API 层的
orderAmount;402 challenge 与 EIP-3009 签名中的金额始终是原子单位。模式一中两层金额必须对应同一数值,否则结算校验失败。
错误码
x402 复用 Waffo 既有对外错误码,msg 会说明具体原因:
完整错误码列表见错误码参考。
常见问题
沙箱环境用的是哪条链?
沙箱环境用的是哪条链?
沙箱走 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的完整字段定义