06 — 巧妙之处 / 边界 / 横向对比 / 代码地图
把前五章的散点收成「能带走的精华」,再划清它刻意不做什么,最后给一张导航表。
6.1 巧妙之处(可借鉴的设计)
这些设计反复出现在不同子系统里,是 ACP 真正的「精华」。
① merchant of record 不变量。 全协议最顶层的立场:agent 永远不是商家、不是收单方。订单/收款/税/合规全在商家栈上(rfcs/rfc.agentic_checkout.md:9-13)。这一条决定了后面所有支付设计——agent 只能编排,不能持有。
② 最小权限 token(把 OAuth 思路搬到支付)。 delegate_payment 发的 SPT 被 Allowance 焊死:reason:one_time + 限额 + 限币种 + 限单 + 限时(rfcs/rfc.delegate_payment.md:121-128、:65-66)。一张「万能卡」被降级成「一次性、单一用途的代金券」。妙在它还是个通用包装器,能包住底层任意 token 类型(rfcs/rfc.payment_handlers.md:486-493)。
③ 权威响应,客户端不算账。 checkout 每次回权威购物车、feed 永远让位于 checkout——同一套世界观贯穿主线和周边(rfcs/rfc.agentic_checkout.md:19-20、rfcs/rfc.product_feeds.md:204-220)。它把「显示价 ≠ 真实价」这个经典 bug 从根上消灭。
④ 全量幂等 + 「null ≠ 缺失」。 所有 POST 必带幂等键,且把「请求体语义相等」的边角(null vs 缺失、数组顺序、尾零、5xx 不缓存)全写死成规范(rfcs/rfc.agentic_checkout.md:251-302)。这是把「重试安全」从「各家自己琢磨」变成「契约保证」。
⑤ 交集语义消灭客户端兼容性计算。 协商时商家只回交集,响应即最终答案(rfcs/rfc.capability_negotiation.md:63-69)。
⑥ 优雅忽略未知 = 前向兼容的地基。 从能力值到 extension 字段到订单枚举,反复强调「不认识的就忽略/当 other」(rfcs/rfc.capability_negotiation.md:339-341、rfcs/rfc.intent_traces.md:202-206、orders 改为 open enum rfcs/rfc.orders.md:530)。让协议能加东西而不破存量。
⑦ 「为了统一不变量,宁可多一次空转」。 seller-backed handler 哪怕没凭证可委托,也强制走 delegate_payment,只为保住审计/可观测链(rfcs/rfc.seller_backed_payment_handler.md:38-59)。
6.2 边界与局限(它刻意不做什么)
ACP 是契约,不是实现,也不是大一统平台。诚实地列出它的边界:
- 不定义 PSP 的授权/捕获语义、退款语义、税务配置、欺诈建模细节(
rfcs/rfc.agentic_checkout.md:24)。它划到 PSP 边界就停。 - 本仓库没有可运行代码。 它是 RFC + OpenAPI + JSON-Schema + examples。真正的服务实现(OpenAI 的、Stripe 的)在仓库之外(README「Getting Started」)。所以本文所有引用都指向规范行号 + 命名标识符,不是函数/类。
- 凭证类型目前只有 card。
delegate_payment明确「目前恰好支持一种凭证类型:card」(rfcs/rfc.delegate_payment.md:88)。 - delegate_authentication 范围很窄:只 3DS2、只浏览器渠道、只原生集成,不做 app/SDK、不做重定向流(
rfcs/rfc.delegate_authentication.md:18-21)。 - 不做注册表/市场:handler、capability、extension 都是按会话发现,没有中心化注册中心(
rfcs/rfc.payment_handlers.md:48、rfcs/rfc.capability_negotiation.md:47)。 - 多 PSP 路由暂不支持:有多个 PSP 的商家得自己每会话选一个(
rfcs/rfc.capability_negotiation.md:528-531)。 - 不少子系统仍是 Proposal/Draft:cart、discovery、feeds、marketing_consent 头部标的是
unreleased/Proposal,处于活跃演进中。 - 签名大多是 SHOULD 而非 MUST:checkout 主线的
Signature/Timestamp是 RECOMMENDED(rfcs/rfc.agentic_checkout.md:69-70),完整性更多靠 Bearer + TLS;只有 delegate_authentication 把Signature提到 REQUIRED(rfcs/rfc.delegate_authentication.md:67)。
6.3 横向对比(同 shelf 兄弟协议的取舍)
ACP 在「AI 协议」这个 shelf 里属于窄而深的领域协议——它不是通用 agent 通信层,而是专攻「商业交易」这一个垂直。
| 协议 | 解决的层 | 与 ACP 的关系 |
|---|---|---|
| MCP(Model Context Protocol) | agent ↔ 工具/数据的通用连接层 | ACP 把自己作为 MCP 的一种 transport binding(transports: ["mcp"],SEP #135;openrpc 里定义 5 个 MCP 工具 1:1 映射 REST 端点,spec/2026-04-17/openrpc/openrpc.agentic_checkout.json)。即:MCP 是「怎么连」,ACP 是「连上之后,买东西的领域契约」。 |
| A2A / agent 通信协议 | agent ↔ agent 的协作 | 不重叠。ACP 的「对端」是商家服务,不是另一个 agent。 |
| OAuth 2.0(非本 shelf,但思想同源) | 受限授权 | ACP 的 SPT/Allowance 是「支付版 OAuth」:范围受限、可过期的代理凭证。 |
一句话定位:MCP 管「agent 怎么伸手」,ACP 管「伸手买东西时,买家/agent/商家/支付方之间的精确契约」。 二者正交,且 ACP 显式把 MCP 列为可选传输。
6.4 代码地图(导航索引)
提示:本仓库是规范文档,「符号名」一列给的是端点 / schema 名 / 字段 / 枚举值等可 grep 的稳定标识符,而非函数/类。
| 主题 | 文件 | 关键标识符 |
|---|---|---|
| Checkout 五端点 + 状态机 | rfcs/rfc.agentic_checkout.md | POST /checkout_sessions、/complete、status、ready_for_payment、authentication_required |
| Authoritative cart 数据模型 | rfcs/rfc.agentic_checkout.md | line_items、totals、Total.type、selected_fulfillment_options、fulfillment_details |
| Idempotency 规则(§6) | rfcs/rfc.agentic_checkout.md | Idempotency-Key、idempotency_conflict、idempotency_in_flight、Idempotent-Replayed |
| 消息/错误两通道 | rfcs/rfc.agentic_checkout.md | messages[]、resolution、requires_buyer_input、intervention_required |
| Delegate Payment | rfcs/rfc.delegate_payment.md | POST /agentic_commerce/delegate_payment、Allowance、reason: one_time、RiskSignal、card_testing |
| Payment Handlers 框架 | rfcs/rfc.payment_handlers.md | capabilities.payment.handlers、requires_delegate_payment、requires_pci_compliance、psp、dev.acp.tokenized.card、SPT(vt_) |
| Seller-backed handler | rfcs/rfc.seller_backed_payment_handler.md | dev.acp.seller_backed、seller_managed、saved_card/gift_card/points/store_credit |
| 能力协商 | rfcs/rfc.capability_negotiation.md | capabilities、interventions.supported、required、enforcement、交集语义 |
| Extensions 框架 | rfcs/rfc.extensions.md | capabilities.extensions、extends(JSONPath)、schema、reverse-domain 命名 |
| Discount 扩展 | rfcs/rfc.discount_extension.md、spec/2026-04-17/json-schema/schema.discount.json | discounts、applied_discount、allocations |
| 内联 3DS | rfcs/rfc.agentic_checkout.md | authentication_metadata、authentication_result、requires_3ds、three_ds_cryptogram、ECI |
| Delegate Authentication | rfcs/rfc.delegate_authentication.md | POST /delegate_authentication、/authenticate、fingerprint_completion、action.type、challenge |
| Discovery | rfcs/rfc.discovery.md | /.well-known/acp.json、DiscoveryResponse、api_base_url、transports、capabilities.services |
| Product Feeds | rfcs/rfc.product_feeds.md、spec/2026-04-17/openapi/openapi.feed.yaml | /feeds、PATCH /feeds/{id}/products、Product、Variant、FeedMetadata |
| Orders 富化 | rfcs/rfc.orders.md | OrderLineItem、quantity.{ordered,current,fulfilled}、Fulfillment、Adjustment、amount_refunded |
| Order Webhook | spec/2026-04-17/openapi/openapi.agentic_checkout_webhook.yaml | order_events、Merchant-Signature、EventDataOrder、HMAC-SHA256 |
| Cart | rfcs/rfc.cart.md、spec/2026-04-17/openapi/openapi.cart.yaml | POST /carts、PUT /carts/{id}、continue_url、估算 totals |
| Intent Traces | rfcs/rfc.intent_traces.md | intent_trace、reason_code、cancel body |
| MCP 传输绑定 | spec/2026-04-17/openrpc/openrpc.agentic_checkout.json | OpenRPC、5 个 MCP 工具映射、meta(映射 HTTP headers) |
| 机器可读总入口 | spec/2026-04-17/openapi/、spec/2026-04-17/json-schema/ | openapi.agentic_checkout.yaml、schema.agentic_checkout.json |
| 版本演进 | changelog/ | 日期版本目录、unreleased/ 单条目 |
6.5 最后,一句话总结整套协议
ACP = 一套让 AI agent 在「它不拥有的商家」那里安全下单的窄而深的领域契约:商家永远是 system of record,卡永远先变成限额一次性 token,响应永远权威,未知永远被优雅忽略。