跳到主要内容

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-20rfcs/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-341rfcs/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:48rfcs/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.mdPOST /checkout_sessions/completestatusready_for_paymentauthentication_required
Authoritative cart 数据模型rfcs/rfc.agentic_checkout.mdline_itemstotalsTotal.typeselected_fulfillment_optionsfulfillment_details
Idempotency 规则(§6)rfcs/rfc.agentic_checkout.mdIdempotency-Keyidempotency_conflictidempotency_in_flightIdempotent-Replayed
消息/错误两通道rfcs/rfc.agentic_checkout.mdmessages[]resolutionrequires_buyer_inputintervention_required
Delegate Paymentrfcs/rfc.delegate_payment.mdPOST /agentic_commerce/delegate_paymentAllowancereason: one_timeRiskSignalcard_testing
Payment Handlers 框架rfcs/rfc.payment_handlers.mdcapabilities.payment.handlersrequires_delegate_paymentrequires_pci_compliancepspdev.acp.tokenized.card、SPT(vt_)
Seller-backed handlerrfcs/rfc.seller_backed_payment_handler.mddev.acp.seller_backedseller_managedsaved_card/gift_card/points/store_credit
能力协商rfcs/rfc.capability_negotiation.mdcapabilitiesinterventions.supportedrequiredenforcement、交集语义
Extensions 框架rfcs/rfc.extensions.mdcapabilities.extensionsextends(JSONPath)、schema、reverse-domain 命名
Discount 扩展rfcs/rfc.discount_extension.mdspec/2026-04-17/json-schema/schema.discount.jsondiscountsapplied_discount、allocations
内联 3DSrfcs/rfc.agentic_checkout.mdauthentication_metadataauthentication_resultrequires_3dsthree_ds_cryptogram、ECI
Delegate Authenticationrfcs/rfc.delegate_authentication.mdPOST /delegate_authentication/authenticatefingerprint_completionaction.typechallenge
Discoveryrfcs/rfc.discovery.md/.well-known/acp.jsonDiscoveryResponseapi_base_urltransportscapabilities.services
Product Feedsrfcs/rfc.product_feeds.mdspec/2026-04-17/openapi/openapi.feed.yaml/feedsPATCH /feeds/{id}/productsProductVariantFeedMetadata
Orders 富化rfcs/rfc.orders.mdOrderLineItemquantity.{ordered,current,fulfilled}FulfillmentAdjustmentamount_refunded
Order Webhookspec/2026-04-17/openapi/openapi.agentic_checkout_webhook.yamlorder_eventsMerchant-SignatureEventDataOrder、HMAC-SHA256
Cartrfcs/rfc.cart.mdspec/2026-04-17/openapi/openapi.cart.yamlPOST /cartsPUT /carts/{id}continue_url、估算 totals
Intent Tracesrfcs/rfc.intent_traces.mdintent_tracereason_code、cancel body
MCP 传输绑定spec/2026-04-17/openrpc/openrpc.agentic_checkout.jsonOpenRPC、5 个 MCP 工具映射、meta(映射 HTTP headers)
机器可读总入口spec/2026-04-17/openapi/spec/2026-04-17/json-schema/openapi.agentic_checkout.yamlschema.agentic_checkout.json
版本演进changelog/日期版本目录、unreleased/ 单条目

6.5 最后,一句话总结整套协议

ACP = 一套让 AI agent 在「它不拥有的商家」那里安全下单的窄而深的领域契约:商家永远是 system of record,卡永远先变成限额一次性 token,响应永远权威,未知永远被优雅忽略。