除了直接按 API 请求付费,Ace Data Cloud 也支持用 X402 支付控制台订单。订单支付和 API 调用的核心协议相同:第一次请求返回 402,客户端签出 X-Payment,然后用同一个请求重试。
区别在于订单支付属于平台 API,需要账户令牌;而直接调用 api.acedata.cloud 的 AI API 可以只用 X402,不需要 API Token。
准备订单
进入 Ace Data Cloud 控制台,选择需要支付的订单,记录订单 ID。
如果你还没有订单,可以在套餐页面创建一个待支付订单。订单价格以页面显示为准,X402 402 响应中的 maxAmountRequired 是最终签名依据。
创建账户令牌
订单支付请求需要账户令牌。打开 平台 Token 页面,创建一个 platform-v1-... 格式的 token。
后续请求使用:
1 |
Authorization: Bearer {platform_token} |
账户令牌不同于普通 API Token。普通 API Token 用于消费 API 额度;账户令牌用于代表你的账户操作平台资源,例如订单支付。
触发 402
先发送一次不带 X-Payment 的请求:
1 |
POST https://platform.acedata.cloud/api/v1/orders/{order_id}/pay/ |
返回状态为 402,响应中包含 accepts:
1 |
{ |
创建 10 Credits 订单并触发 402 的程序运行结果:
1 |
created order 78481793-304e-47f7-bc0c-8231aec9cc1e |
结果说明:
- 订单创建成功后状态是
Pending,此时还没有链上付款。 - 第一次
pay/请求没有携带X-Payment,所以返回 HTTP 402。 accepts同时给出 Baseexact和 Solanaexact,本教程后续选择 Base。- 订单创建时价格是
1.26,进入 X402 支付流程后应用 X402 支付折扣,实际签名和结算金额为1.2USDC,对应1200000atomic USDC。
注意这里 resource 是服务端返回并参与签名的字段,客户端不要把其中的协议、路径或订单 ID 自己改写。
签名并重试
订单支付可以复用 @acedatacloud/x402-client 或 acedatacloud-x402 的低层签名函数。下面是 TypeScript 示例:
1 |
import { Wallet } from 'ethers'; |
同一个订单用 Base exact 签名并重试后的程序运行结果:
1 |
status 200 |
链上确认结果:
1 |
tx 0xfec08cc00a159ea1ec692b32faa9bf3d17595a986301169e689d94f58bc44151 |
结果说明:
status 200表示平台订单支付接口接受了这次X-Payment。has_x_payment_response True表示响应头包含 Base64 编码的X-PAYMENT-RESPONSE收据。settle_header.success=True且network=base表示 Facilitator 已完成 Base settlement。- 订单最终状态是
Finished,pay_way是X402,pay_id写入链上交易哈希。 - BaseScan 上的
Transfer事件显示付款地址向平台收款地址转账1200000atomic USDC,也就是1.2USDC。
成功响应与收据
订单支付成功后,响应体是订单信息。平台还会在响应头 X-PAYMENT-RESPONSE 中携带 Base64 编码的 settlement response,解码后常见字段包括:
| 字段 | 说明 |
|---|---|
success |
Facilitator settlement 是否成功。 |
transaction |
链上结算交易哈希。 |
network |
支付网络。 |
payer |
付款钱包地址。 |
amount |
实际结算金额,使用 atomic units。 |
如果你需要对账,建议同时保存订单 ID、付款钱包地址、transaction 和订单最终状态。
注意事项
- 订单支付需要平台账户令牌,不能只靠 X402 钱包签名完成。
maxAmountRequired使用 USDC atomic units,1200000表示1.2USDC。- 不要自行拼收款地址或资产地址,以 402 响应中的
accepts为准。 - 如果同一个
X-Payment被重复提交,Facilitator 会按 nonce 做重放保护。