你的智能体需要调用一个接口。常规路径全是为人类设计的:注册账号、验证邮箱、绑信用卡、拿 API 密钥、选订阅档位——为了用 17 次,先买 10000 次的包。 其实还有第四条路,而且它已经 30 岁了:HTTP 状态码 402 Payment Required,在最初的 HTTP 规范里就被预留、注明「供未来使用」。未来到了。x402 协议(v2,由 Coinbase 牵头维护)把 402 变成了一套能用的支付握手:服务器回一个报价,智能体签一份稳定币支付授权,结算方在链上完成转账,接口随即返回结果——没有账号、没有密钥、没有订阅。付款本身就是身份验证。 这不是白皮书导览。下面每一步都对着线上真实接口实测过(测试服务:call402.com,一个公开在运行的 x402 服务),出现的报价和返回都是真实数据,没有一处是示意图。 第一步:先问价——一张真实的报价单 不付钱直接调任意接口,你会拿到 HTTP 402 和一张机器可读的报价单: BASH复制 curl -X POST https://call402.com/api/phone-lookup -H &#039Content-Type: application/json&#039 -d &#039%7b&quotnumber&quot: &quot+14155552671&quot%7d&#039 JSON复制 %7b &quotx402Version&quot: 2, &quotaccepts&quot: [%7b &quotscheme&quot: &quotexact&quot, &quotnetwork&quot: &quoteip155:8453&quot, &quotamount&quot: &quot5000&quot, &quotasset&quot: &quot0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&quot, &quotpayTo&quot: &quot0xAc6F1C3C3b17040730F16dC24Ee9993e9565BE4A&quot, &quotmaxTimeoutSeconds&quot: 300, &quotextra&quot: %7b &quotname&quot: &quotUSD Coin&quot, &quotversion&quot: &quot2&quot %7d %7d] %7d 把它当价签读:amount 是最小单位,5000 就是 0.005 美元(USDC 是 6 位小数);asset 是 Base 链上的 USDC 合约;payTo 是收款方;你有 300 秒按这张报价付钱。 第二步:付款并调用——买家代码一共这么多 用官方 TypeScript 库,完整的买家就是这几行: TYPESCRIPT复制 import %7b wrapFetchWithPayment %7d from &quot@x402/fetch&quot import %7b x402Client %7d from &quot@x402/core/client&quot import %7b ExactEvmScheme %7d from &quot@x402/evm/exact/client&quot import %7b privateKeyToAccount %7d from &quotviem/accounts&quot const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x$%7bstring%7d`) const client = new x402Client() client.register(&quoteip155:&quot, new ExactEvmScheme(signer)) const fetchWithPay = wrapFetchWithPayment(fetch, client) const res = await fetchWithPay(&quothttps://call402.com/api/phone-lookup&quot, %7b method: &quotPOST&quot, headers: %7b &quotContent-Type&quot: &quotapplication/json&quot %7d, body: JSON.stringify(%7b number: &quot+14155552671&quot %7d), %7d) console.log(await res.json()) // 结算凭证在 PAYMENT-RESPONSE 响应头里返回: const proof = res.headers.get(&quotPAYMENT-RESPONSE&quot) if (proof) %7b const settlement = JSON.parse(Buffer.from(proof, &quotbase64&quot).toString(&quotutf8&quot)) console.log(&quottx:&quot, settlement.transaction, &quotpayer:&quot, settlement.payer) %7d BASH复制 npm i @x402/fetch @x402/core @x402/evm viem 包装器看到 402,会按报价构造一份 EIP-3009 支付授权、附上签名重试,结算方随即在 Base 上完成这笔 USDC 转账。返回的就是普通 JSON: JSON复制 %7b &quotvalid&quot: true, &quotcountry&quot: &quotUS&quot, &quottype&quot: &quotFIXED_LINE_OR_MOBILE&quot, &quote164&quot: &quot+14155552671&quot, &quotnational&quot: &quot(415) 555-2671&quot %7d 这家店的其他接口——以及任何 x402 卖家——用法完全一样。一个买家,走遍所有店。 第三步:别信 200,自己验结算 把 PAYMENT-RESPONSE 响应头解开(它是 Base64 编码的 JSON),核对三件事:这笔交易在 Base 浏览器上真实存在且状态成功;USDC 的转账记录确实从你的地址打到报价里的 payTo;金额和报价 amount 分毫不差。三条有一条对不上,记下来停手——不要直接再付一次。 实际会撞上的坑就这几个: 第四步:给钱包上一道预算纪律 能签名的智能体,就是能花钱的智能体。四条规矩让它无聊起来: 单次上限(比如 0.01 美元)和每日上限(比如 1 美元),都必须在签名之前检查。 域名与资产白名单——买家应拒绝任何白名单之外的报价。 专用钱包,只放封顶的浮存,永远不要用主钱包。 一本只增不改的花销账:交易哈希、接口、金额,定期和链上转账对账。 最后留一个问题 如果你的智能体有一个每天 1 美元预算的钱包,你会先让它自己买什么?又有什么是你绝不让它碰的?支付这一关一旦打通,智能体能自己做的事会多出一大截——而每个人把线画在哪,可能比技术本身更决定这件事往哪走。