DAY 52 / PHASE 6 · 新前沿工程化

智能体商务与支付协议

AP2 授权 · x402 结算 · ACP 结账 · 授权·真实性·问责三难

2026-07-01 · BigCat

让 agent 花钱,难的不是「发起支付」,是「证明这笔钱被谁、在什么约束下授权」。

前置协议 → 本仓 Day 18 (MCP) · Day 13 (多智能体协作)

// WHY THIS MATTERS

Agent 能查、能想、能调工具,但一到「付钱」就断了——因为整个支付栈是为「人点按钮」设计的,不是为「agent 代人结算」设计的。2025 下半年起,这一层突然长出三套协议:Google 的 AP2、OpenAI/Stripe 的 ACP、Coinbase 的 x402。这一期不讲「电商是什么」「稳定币是什么」——那是生态背景,见来源。这里只讲四个工程决策:三套协议各解决什么、怎么选AP2 的 Mandate 如何把「授权」变成可验证、可追责的密码学对象x402 如何用一个尘封 30 多年的 HTTP 状态码做机器原生的按次支付;以及把 agent 接上钱之后,授权边界、重放、问责这些必踩的坑怎么治理。核心反直觉:签名解决的是问责的「谁授权了」,不是决策的「买得对不对」——两件事都得管,别混为一谈。

// 01

协议全景与选型:三条不同的路

论断:AP2 / ACP / x402 不是三选一的竞品,而是「授权 / 结账 / 结算」三个不同层,多数真实系统会叠着用。

背景与原理

三者常被并列成「agent 支付协议」,但它们切的是不同的面,搞混就会选错。

你要解决哪一层? │ ┌────────┼─────────────────┬──────────────────┐ ▼ ▼ ▼ ▼ 「谁授权agent 「让agent在对话里 「按次卖我的 买什么」 结完这单账」 API/数据/工具」 │ │ │ ▼ ▼ ▼ AP2 ACP x402 (授权/信任) (商户结账) (HTTP 402 结算) │ │ └──────── 常叠加使用 ──────────────┘ AP2 承载「用户授权了这次代购」, 底层再用 x402 或卡完成实际结算。

选型一句话:代人购物、要跨商户可信授权 → AP2你是商户、想被 ChatGPT 这类 agent 买到 → ACP你在卖 API/工具、想让调用方(人或 agent)按次付费 → x402。复杂系统往往同时出现:AP2 定「授权语义」,x402 或卡做「实际结算」。

失败模式:把它们当竞品做二选一评测,或以为「上了 AP2 就不用别的」。AP2 本身不结算、x402 不管跨商户授权语义——它们是可组合的层,不是替代关系。按「你缺哪一层」来选,别按「哪个协议更火」来选。
进阶资源 · Google Cloud Announcing Agent Payments Protocol (AP2), cloud.google.com/blog/.../ap2-protocol
// 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 对应两种场景:

第三种 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 → 签名真但买超范围照样放行。签名保证「没被篡改」,不保证「没越权」——两件事都要查。
进阶资源 · AP2 官方规范(Mandate / VC 结构), ap2-protocol.org/specification
// 03

x402:HTTP 402 的机器原生支付流

论断:x402 把「付费」塞进一次普通 HTTP 往返——服务端答 402 报价、客户端签名重试、facilitator 秒级结算,让 API 本身成为可按次售卖的商品。

背景与原理

HTTP 402 Payment Required 是 1990 年代就留在协议里、却尘封 30 多年的状态码。x402(Coinbase + Cloudflare)把它激活成机器原生支付层。流程三步:

  1. 报价:客户端无凭证调用付费端点 → 服务端返回 402,body 里 accepts[] 列出可接受的支付选项(链、币种、金额、收款地址、facilitator)。
  2. 授权:客户端选一个选项,钱包用 EIP-3009 TransferWithAuthorization 对这些确切条款签名,把签名载荷 base64 后放进 X-PAYMENT 头,重放同一请求。
  3. 结算:服务端验签,通过 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 的信任假设 → 你把结算外包给了一个第三方,得评估它靠不靠谱。
进阶资源 · Coinbase x402(协议与 facilitator), github.com/coinbase/x402
// 04

工程落地与失败模式:授权边界、重放、问责

论断:给 agent 接上钱,真正的工程量不在「发起支付」,在「约束授权、防重放、留问责」——这三件事决定它是资产还是事故。

背景与原理

把前三节拼成能上线的系统,必须补上四道治理:

实战示例

一个下单前的守卫,把三难落成可执行的检查——顺序不能省:

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 端到端接上支付

把四节串成一条能落地的链路:

  1. 授权(§2):用户签一张 Intent Mandate,constraints = 单次 ≤ $80、白名单商户、48h TTL。人的批准被固化成一份可验证的委托书。
  2. 选路(§1):跨商户代购 → 用 AP2 承载授权语义;买的是 API/数据 → 直接走 x402;要卖进 ChatGPT → ACP。按「缺哪一层」选。
  3. 结算(§3):成交时商户侧生成 Cart Mandate 由用户(或预授权)签,底层用 x402 / 卡完成约 2 秒结算,留下结算 tx。
  4. 治理(§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 更适合小额、幂等、可接受损失的机器微交易——协议选型本身就是风险选型

// 延伸阅读