// WHY THIS MATTERS
Agent 能查、能想、能调工具,但一到「付钱」就断了——因为整个支付栈是为「人点按钮」设计的,不是为「agent 代人结算」设计的。2025 下半年起,这一层突然长出三套协议:Google 的 AP2、OpenAI/Stripe 的 ACP、Coinbase 的 x402。这一期不讲「电商是什么」「稳定币是什么」——那是生态背景,见来源。这里只讲四个工程决策:三套协议各解决什么、怎么选;AP2 的 Mandate 如何把「授权」变成可验证、可追责的密码学对象;x402 如何用一个尘封 30 多年的 HTTP 状态码做机器原生的按次支付;以及把 agent 接上钱之后,授权边界、重放、问责这些必踩的坑怎么治理。核心反直觉:签名解决的是问责的「谁授权了」,不是决策的「买得对不对」——两件事都得管,别混为一谈。
// 01
协议全景与选型:三条不同的路
论断:AP2 / ACP / x402 不是三选一的竞品,而是「授权 / 结账 / 结算」三个不同层,多数真实系统会叠着用。
背景与原理
三者常被并列成「agent 支付协议」,但它们切的是不同的面,搞混就会选错。
- AP2(Agent Payments Protocol, Google,2025-09 发布,60+ 伙伴)— 授权层。回答「用户到底授权 agent 买什么、花多少」。它支付方式无关(卡、稳定币、实时转账都行),用密码学签名的 Mandate 承载授权,扩展自 A2A、与 MCP 协同。定位:跨 agent、跨商户的可信授权底座。
- ACP(Agentic Commerce Protocol, OpenAI + Stripe + Meta)— 结账层。让 agent 在对话里直接完成一次商户结账(ChatGPT 的 Instant Checkout 即基于它)。商户仍是 merchant of record,Stripe 的 Shared Payment Token 传递支付凭证。定位:把「你的商品被 agent 买走」这条链路标准化。
- x402(Coinbase + Cloudflare)— 结算层。用 HTTP 402 让一次 API 调用本身可以按次收费,稳定币(USDC)秒级链上结算,无账户无 API key。定位:agent↔API、agent↔agent 的机器原生微支付。
你要解决哪一层?
│
┌────────┼─────────────────┬──────────────────┐
▼ ▼ ▼ ▼
「谁授权agent 「让agent在对话里 「按次卖我的
买什么」 结完这单账」 API/数据/工具」
│ │ │
▼ ▼ ▼
AP2 ACP x402
(授权/信任) (商户结账) (HTTP 402 结算)
│ │
└──────── 常叠加使用 ──────────────┘
AP2 承载「用户授权了这次代购」,
底层再用 x402 或卡完成实际结算。
选型一句话:代人购物、要跨商户可信授权 → AP2;你是商户、想被 ChatGPT 这类 agent 买到 → ACP;你在卖 API/工具、想让调用方(人或 agent)按次付费 → x402。复杂系统往往同时出现:AP2 定「授权语义」,x402 或卡做「实际结算」。
失败模式:把它们当竞品做二选一评测,或以为「上了 AP2 就不用别的」。AP2 本身不结算、x402 不管跨商户授权语义——它们是可组合的层,不是替代关系。按「你缺哪一层」来选,别按「哪个协议更火」来选。
// 02
AP2 的 Mandate:可验证的授权委托
论断:AP2 的核心不是「支付」,是把「用户授权」做成一张可验证凭证(VC)——它同时锁死了授权范围、真实身份和事后问责。
背景与原理
AP2 要解决 agent 支付的三难:授权(authorization)——agent 真的被允许买这个吗?真实性(authenticity)——这笔请求真是这个用户/agent 发的、没被篡改吗?问责(accountability)——出事后能不能证明是谁、在什么约束下批准的?三者都靠 Mandate 解决。Mandate 是一张 W3C Verifiable Credential(JSON-LD),用 ECDSA P-256 签名、SHA-256 完整性哈希,内含请求载荷、时间戳、nonce、公钥引用与签名——防篡改、不可否认、可移植。
两种关键 Mandate 对应两种场景:
- Intent Mandate(意图授权)— 人不在场。装的是用户的自然语言请求 + 硬约束:最高价、商品规格、有效期(TTL)、允许的商户、agent 身份引用。等于「我授权你在这些边界内替我买」,agent 之后可自主成交。
- Cart Mandate(购物车授权)— 人在场。由商户按用户请求生成具体购物车,用户用设备上硬件密钥当场签名,绑定 payer/payee 身份、tokenized 支付方式、风控载荷、最终交易明细。
第三种 Payment Mandate 传给支付网络,让发卡行/网络也能看到「这是 agent 发起的交易」信号。价值:每一步授权都留下密码学证据链,谁在什么约束下批了什么,事后可验、不可赖。
实战示例
一个 Intent Mandate 的结构(简化):
{
"@context": ["https://www.w3.org/ns/credentials/v2",
"https://ap2-protocol.org/context/v1"],
"type": ["VerifiableCredential", "IntentMandate"],
"issuer": "did:user:8f3a...", // 用户身份
"issuanceDate": "2026-07-01T09:00:00Z",
"credentialSubject": {
"agent": "did:agent:bigcat-shopper", // 被授权的 agent
"intent": "买一台 65 分贝以下的便携榨汁机",
"constraints": {
"maxPrice": {"amount": 80, "currency": "USD"},
"allowedMerchants": ["merchant:xyz-store"],
"expiry": "2026-07-03T00:00:00Z" // TTL:过期即失效
}
},
"proof": { // 密码学签名
"type": "EcdsaSecp256r1Signature2019",
"nonce": "a1b2c3...", // 防重放
"jws": "eyJ..."
}
}
验证方(商户/网络)做三件事:验签(真实性)、检查 constraints 是否覆盖本次购买(授权)、把整张 VC 连同 nonce 存档(问责)。心智:你不是在传「一句话指令」,是在传「一份带边界、带签名、带时效的委托书」。
失败模式:(1) 约束写太松(maxPrice 很高、allowedMerchants 空)→ 等于给 agent 一张空白支票,授权层形同虚设。(2) 不校验 expiry/nonce → mandate 被重放,一次授权被花两次。(3) 只验签不比对 constraints → 签名真但买超范围照样放行。签名保证「没被篡改」,不保证「没越权」——两件事都要查。
// 03
x402:HTTP 402 的机器原生支付流
论断:x402 把「付费」塞进一次普通 HTTP 往返——服务端答 402 报价、客户端签名重试、facilitator 秒级结算,让 API 本身成为可按次售卖的商品。
背景与原理
HTTP 402 Payment Required 是 1990 年代就留在协议里、却尘封 30 多年的状态码。x402(Coinbase + Cloudflare)把它激活成机器原生支付层。流程三步:
- 报价:客户端无凭证调用付费端点 → 服务端返回 402,body 里
accepts[] 列出可接受的支付选项(链、币种、金额、收款地址、facilitator)。
- 授权:客户端选一个选项,钱包用 EIP-3009 TransferWithAuthorization 对这些确切条款签名,把签名载荷 base64 后放进 X-PAYMENT 头,重放同一请求。
- 结算:服务端验签,通过 facilitator 在链上结算(USDC 等稳定币),然后返回真正的响应。
整个来回约 2 秒,无需账户、无需 API key,支持 Base / Ethereum / Arbitrum / Polygon / Solana。对超级个体的意义:你写的一个工具/数据 API,可以直接对「任何 agent」按次收费,不用注册体系、不用发 key、不用月度账单。x402 生态已归入 Linux Foundation,Stripe、Cloudflare 接入。
实战示例
HTTP 层(与语言无关)的一次完整往返:
# 1) agent 首次请求,无支付
GET /api/premium-forecast HTTP/1.1
Host: data.example.com
# 2) 服务端报价
HTTP/1.1 402 Payment Required
Content-Type: application/json
{
"accepts": [{
"scheme": "exact", "network": "base",
"asset": "USDC", "amount": "0.01",
"payTo": "0xMerchant...",
"facilitator": "https://facilitator.example"
}]
}
# 3) agent 用钱包签 EIP-3009,带 X-PAYMENT 重试
GET /api/premium-forecast HTTP/1.1
Host: data.example.com
X-PAYMENT: eyJzY2hlbWUiOiJleGFjdCIsInNpZ25hdHVyZSI6...
# 4) 验签 + 链上结算后返回内容
HTTP/1.1 200 OK
X-PAYMENT-RESPONSE: {"settled":true,"tx":"0xabc..."}
{ "forecast": "..." }
心智:402 把「计价、鉴权、结算」从「注册-发 key-开发票」的重流程,压缩成一次 HTTP 挑战-应答。适合 pay-per-call 的数据、推理、工具服务。
失败模式:(1) 把 x402 接到大额、需退款的场景 → 稳定币结算即时且难逆,没有信用卡的 chargeback 保护,大额风险自负。(2) 服务端不设每请求/每 agent 的限额与幂等 → 被循环调用刷爆钱包。(3) 忽略 facilitator 的信任假设 → 你把结算外包给了一个第三方,得评估它靠不靠谱。
// 04
工程落地与失败模式:授权边界、重放、问责
论断:给 agent 接上钱,真正的工程量不在「发起支付」,在「约束授权、防重放、留问责」——这三件事决定它是资产还是事故。
背景与原理
把前三节拼成能上线的系统,必须补上四道治理:
- 授权边界(scope):Intent Mandate 的 constraints 是第一道闸——每次授权都给最小必要范围(单次预算、白名单商户、TTL)。绝不发「无上限、无过期、无商户限制」的 mandate。
- 重放与幂等:每个 mandate/支付带 nonce + expiry,服务端记录已用 nonce;x402 侧对每请求做幂等键,防止一次授权被结算多次。
- 人在环分级(HITL):低额、白名单内 → agent 自动成交;超阈值、新商户、异常 → 暂停并升级给人批准(承接 Day 34 的置信度路由 auto/ask/deny)。Intent Mandate 本质就是一种「预授权的 HITL」——把人的批准提前固化成带边界的凭证。
- 问责与审计:每笔交易连同它的 mandate/签名/nonce/结算 tx 一起入库,可回放「谁、在什么约束下、批了这笔」。这是出事时唯一能自证的东西。
实战示例
一个下单前的守卫,把三难落成可执行的检查——顺序不能省:
def authorize_purchase(mandate, cart):
verify_signature(mandate) # 真实性
assert not nonce_seen(mandate.proof.nonce) # 防重放
assert now() < mandate.expiry # 时效
c = mandate.constraints
assert cart.total <= c.maxPrice # 授权边界
assert cart.merchant in c.allowedMerchants
if cart.total > HITL_THRESHOLD or cart.merchant not in TRUSTED:
return escalate_to_human(mandate, cart) # 分级:升级
record_audit(mandate, cart) # 问责
return settle(cart) # 结算(AP2/x402/卡)
顺序即防线:验签 → 防重放 → 查边界 → 分级 → 审计 → 结算。少一环,就多一个能被利用的口子。
失败模式:(1) 只验签就放行(§2 的老坑),越权照过。(2) 没有 kill switch / 预算熔断——agent 逻辑出错时,没有「今日已花 X,停」的硬闸。(3) 审计只记结果不记授权凭证 → 出事无法自证「这是被授权的」,问责链断裂。(4) 「人在环」设成一刀切:全人工 → 退化成没有 agent;全自动 → 失控。分级才是关键。
进阶资源 ·
Identity Management for Agentic AI(agent 世界的授权/认证/问责综述),
arXiv 2510.25819
// 综合实战 · 给一个购物 agent 端到端接上支付
把四节串成一条能落地的链路:
- 授权(§2):用户签一张 Intent Mandate,constraints = 单次 ≤ $80、白名单商户、48h TTL。人的批准被固化成一份可验证的委托书。
- 选路(§1):跨商户代购 → 用 AP2 承载授权语义;买的是 API/数据 → 直接走 x402;要卖进 ChatGPT → ACP。按「缺哪一层」选。
- 结算(§3):成交时商户侧生成 Cart Mandate 由用户(或预授权)签,底层用 x402 / 卡完成约 2 秒结算,留下结算 tx。
- 治理(§4):下单前跑守卫(验签 → 防重放 → 查边界 → HITL 分级 → 审计),超阈值升级给人,全程留证据链;配预算熔断与 kill switch。
做完这套,你的 agent 从「能查会想但不敢付」,升级为「能在密码学边界内替你花钱、且每一笔都可追责」——这才是 agent 真正接入经济活动的门槛。
// ENGLISH GLOSSARY
- AP2 (Agent Payments Protocol)
- Google 主导的 agent 支付授权协议:用签名 Mandate 承载授权,支付方式无关,扩展自 A2A。
- Mandate
- AP2 中承载用户授权的可验证凭证,密码学签名、带约束(价格/商户/时效)。
- Intent / Cart / Payment Mandate
- 分别对应人不在场(意图+硬约束)、人在场(具体购物车+当场签名)、传给支付网络三类授权凭证。
- Verifiable Credential (VC)
- W3C 标准的防篡改、可验证、可移植的签名数据结构(JSON-LD)。
- ACP (Agentic Commerce Protocol)
- OpenAI+Stripe+Meta 的 agent 结账协议,ChatGPT Instant Checkout 的基础。
- x402
- Coinbase+Cloudflare 基于 HTTP 402 的稳定币机器原生支付协议。
- HTTP 402 Payment Required
- 尘封 30 余年的 HTTP 状态码,x402 将其激活为支付挑战。
- EIP-3009 (TransferWithAuthorization)
- 以太坊代币授权转账标准,x402 用它对支付条款离线签名。
- Facilitator
- x402 中代为在链上验签与结算的第三方服务。
- A2A (Agent2Agent)
- agent 间互操作协议,AP2 在其上扩展支付语义。
- Non-repudiation(非否认性)
- 签名使授权方事后无法否认曾批准该交易。
// 深入思考
AP2 用密码学 mandate 解决了「问责」,但当 agent 在约束内买错了东西,链条上到底谁担责?
签名解决的是「谁授权了、授权范围是什么」,不是「这个决策对不对」——这是两层问责。mandate 能证明「用户确实授权了 agent 在 ≤$80、这家店范围内买榨汁机」,所以如果 agent 在范围内买了一台用户其实不满意的机器,责任落在用户的授权而非商户或网络——就像你给了店员一张有额度的委托书,他在额度内买错了,是你的委托问题。真正的灰区在约束之外:如果 agent 越了界(买超价、买错店),验证方本应拦下,拦不下就是实现方(验证逻辑)的责任。所以 mandate 把问责从「说不清」变成「按边界切」:范围内=授权方担,越界放行=验证方担。它没消灭「买得对不对」的判断风险,只是让「谁该为此负责」变得可裁定。
x402 让一次 API 调用能 per-call 收费,这会不会催生一个「agent 只为另一个 agent 服务」的机器经济?对超级个体意味着什么?
会,而且这正是设计意图。当支付的摩擦降到「一次 HTTP 往返、2 秒、零手续费门槛」,低于人类会为之注册账号的金额(一次调用几厘钱)也变得可结算,于是 agent 之间可以互相买数据、买算力、买工具调用,形成人不在回路里的微交易网。对超级个体是双刃:机会是你写的一个小工具/数据源可以直接对全世界的 agent 按次变现,不用做用户体系、不用谈 BD;风险是你的 agent 也在花你的钱买别人的服务,成本从「可预期的月度订阅」变成「一堆微交易的长尾」,没有预算熔断就会阴性失血。超级个体的护城河从此不只是「会用工具」,还包括「能设计一个自己会赚钱、也守得住预算的 agent」。
AP2(授权层)、ACP(结账层)、x402(结算层)会走向统一,还是分层共存?
更可能分层共存,类比 TCP/IP:没有一个协议既管路由又管应用,是因为不同层的变化速率和关注点不同。授权语义(谁能花多少)演化慢、要跨生态可信;结算轨道(卡/稳定币/银行)多样且互斥,谁也吃不掉谁;结账体验(在哪个界面成交)绑具体平台。硬把三层塞进一个协议,等于让「换结算方式」牵动「授权模型」,反而更脆。真实趋势是接口标准化 + 实现多样化:AP2 的 mandate 可以背书一笔最终走 x402 或走卡的交易,就像 HTTP 之上可以跑各种应用。要警惕的不是「不统一」,而是某一层被单一供应商垄断——那才是把分层的自由重新锁死。
Intent Mandate 让 agent 在人不在场时花钱——这和 Day 34「高风险必须人在环」矛盾吗?
不矛盾,Intent Mandate 恰恰是 HITL 的一种时间平移:它把「人的批准」从「交易发生的那一刻」提前到「签发授权的那一刻」,并用密码学把批准的边界固化下来。这和「高风险人在环」的精神一致——高风险的部分(要不要授权、授权多少、给谁、多久)依然是人当场决定的,只是决定被前置了。真正违背 HITL 的是无边界的预授权(空白支票 mandate),那等于把人踢出了回路。所以工程上正确的姿势是:用约束的紧致度来编码风险等级——低风险给宽约束+长 TTL 让 agent 自主跑,高风险要么收紧约束(单次小额、白名单),要么干脆退回实时 Cart Mandate 让人当场签。HITL 不是「必须实时」,是「必须有人划定边界」。
稳定币原生结算绕过了传统 chargeback / 退款保护——agent 付错了钱能追回吗?
大概率追不回,这是 x402 这类链上即时结算的结构性代价:没有中心化清算方,就没有「拨回一笔已确认交易」的按钮。信用卡的 chargeback 本质是发卡行作为可信中介垫付争议风险,链上结算把中介去掉了,也就去掉了这层保护。这意味着风险治理必须前移到支付之前而非事后:额度熔断、白名单、幂等键、人在环分级、可回滚的「先冻结再结算」模式。换句话说,传统支付把安全网放在事后(争议、退款、拒付),agent 原生支付逼你把安全网放在事前(授权边界、守卫、审计)。这也解释了为什么大额、易争议的场景更适合走 AP2+卡(保留 chargeback),而 x402 更适合小额、幂等、可接受损失的机器微交易——协议选型本身就是风险选型。