Skip to main content
除了直接按 API 请求付费,Ace Data Cloud 也支持用 X402 支付控制台订单。订单支付和 API 调用的核心协议相同:第一次请求返回 402,客户端签出 PAYMENT-SIGNATURE,然后用同一个请求重试。 区别在于订单支付属于平台 API,需要账户令牌;而直接调用 x402.acedata.cloud 的 AI API 可以只用 X402,不需要 API Token。

准备订单

进入 Ace Data Cloud 控制台,选择需要支付的订单,记录订单 ID。 如果你还没有订单,可以在套餐页面创建一个待支付订单。订单价格以页面显示为准,X402 402 响应中的 amount 是最终签名依据。

创建账户令牌

订单支付请求需要账户令牌。打开 平台 Token 页面,创建一个 platform-v1-... 格式的 token。 后续请求使用:
账户令牌不同于普通 API Token。普通 API Token 用于消费 API 额度;账户令牌用于代表你的账户操作平台资源,例如订单支付。

触发 402

先发送一次不带 PAYMENT-SIGNATURE 的请求:
返回状态为 402,响应中包含 accepts:
订单支付走的是官方 x402 v2:x402Version 为 2,network 使用 CAIP-2 标识,金额字段是 amount。 创建 10 Credits 订单并触发 402 的程序运行结果:
以下交易记录为旧政策下的历史实测样本,金额和交易哈希保留原样。新 X402 订单不再享支付方式折扣;请以本次 402 响应的 amount 为签名和付款依据。
结果说明:
  • 订单创建成功后状态是 Pending,此时还没有链上付款。
  • 第一次 pay/ 请求没有携带 PAYMENT-SIGNATURE,所以返回 HTTP 402。
  • accepts 同时给出 Base exact 和 Solana exact,本教程后续选择 Base。
  • 订单创建时价格是 1.26,在旧 X402 支付优惠政策期间支付,实际签名和结算金额为 1.2 USDC,对应 1200000 atomic USDC。
注意这里 resource 是服务端返回并参与签名的字段,客户端不要把其中的协议、路径或订单 ID 自己改写。

签名并重试

订单支付可以复用 @acedatacloud/x402-client 或 acedatacloud-x402 的低层签名函数。下面是 TypeScript 示例:
同一个订单用 Base exact 签名并重试后的程序运行结果:
链上确认结果:
结果说明:
  • status 200 表示平台订单支付接口接受了这次 PAYMENT-SIGNATURE。
  • has_x_payment_response True 表示响应头包含 Base64 编码的 PAYMENT-RESPONSE 收据。
  • settle_header.success=True 且 network=base 表示 Facilitator 已完成 Base settlement。
  • 订单最终状态是 Finished,pay_way 是 X402,pay_id 写入链上交易哈希。
  • BaseScan 上的 Transfer 事件显示付款地址向平台收款地址转账 1200000 atomic USDC,也就是 1.2 USDC。

成功响应与收据

订单支付成功后,响应体是订单信息。平台还会在响应头 PAYMENT-RESPONSE 中携带 Base64 编码的 settlement response,解码后常见字段包括: 如果你需要对账,建议同时保存订单 ID、付款钱包地址、transaction 和订单最终状态。

注意事项

  • 订单支付需要平台账户令牌,不能只靠 X402 钱包签名完成。
  • amount 使用 USDC atomic units,1200000 表示 1.2 USDC。
  • 不要自行拼收款地址或资产地址,以 402 响应中的 accepts 为准。
  • 如果同一个 PAYMENT-SIGNATURE 被重复提交,Facilitator 会按 nonce 做重放保护。

支付失败响应

未携带 PAYMENT-SIGNATURE 的第一次 HTTP 402 是正常支付挑战,不代表支付失败。签名后的验证或结算失败仍保留标准的字符串 error 作为兼容兜底,并在 extensions.acedatacloud.paymentError 返回稳定的错误结构:
客户端应优先按 code 本地化,未知 code 回退到通用支付失败。charged 是三态字段:只有明确在结算前拒绝时才会返回 false;字段缺失表示扣款状态未知,不能解释为“未扣款”。当前订单进入 Failed 后不能原单重试,请修正钱包问题后创建新订单。 不要记录或提交完整 PAYMENT-SIGNATURE、钱包签名、授权 payload、Facilitator 原始诊断或 RPC 响应。客服排查只需订单 ID 和公开的错误 code。