代理结账规范
商家通过实施代理结账规范与 OpenAI 的结账流程集成
使用代理商务协议进行构建对所有人开放。ChatGPT 中的即时结账目前仅对批准的合作伙伴可用。要申请参与即时结账,请在此处填写表单。
概述
使商家能够在 ChatGPT 内运行端到端结账流程,同时在其现有商务堆栈上保留订单、支付和合规性。
工作原理
- 创建会话(REST)。ChatGPT 调用您的
POST /checkout_sessions
以使用购物车内容和买家上下文启动会话;您的响应必须包括丰富、权威的购物车状态。 - 更新会话(REST)。当用户更改商品、配送或折扣时,ChatGPT 调用
POST /checkout_sessions/{checkout_session_id}
;每个响应都返回完整的购物车状态以供显示和验证。 - 订单事件(webhooks)。您的系统将订单生命周期事件(例如
order.created
、order.updated
)发布到提供的 webhook,以便 ChatGPT 与履行级真实性保持同步。 - 完成结账(REST)。ChatGPT 通过
POST /checkout_sessions/{checkout_session_id}/complete
最终确定;您确认订单创建并返回最终购物车和订单标识符。 - (可选)使用
POST /checkout_sessions/{checkout_session_id}/cancel
取消结账,并使用GET /checkout_sessions/{checkout_session_id}
获取结账信息。 - 在您的轨道上支付。您使用现有 PSP 处理支付;如果使用委托支付,接受令牌并应用正常的授权/捕获流程。
关键要点
- 必需端点。 实现创建、更新和完成结账会话 REST 端点;所有响应必须返回丰富的购物车状态(商品、定价、税费/费用、配送、折扣、总额、状态)。
- 权威 webhooks。 向提供的 webhook 发出订单事件,以在重试和边缘情况中保持状态一致。
- 保持支付在原处。 使用您当前的 PSP 和结算流程;仅在适用时集成委托支付。
- 安全性和稳健性。 验证每个请求、验证签名、强制幂等性、验证输入并支持安全重试。
- 认证集成。 通过一致性检查(模式、错误代码、速率限制、webhook 交付)以确保在 ChatGPT 中可靠结账。
结账会话
要让用户通过 ChatGPT 下订单,您必须创建、更新和完成结账会话。此结账会话保存有关要购买的商品、履行信息和支付信息的信息。
随着用户在结账流程中的进展,结账会话将被更新并在各种状态之间移动。
对更新调用的响应应返回所有要向用户显示的结账选项、消息和错误。一旦客户点击"购买",结账会话将使用所选支付方式完成。
REST 端点
商家必须实现以下五个端点才能代表 ChatGPT 用户下订单。
将来,代理结账规范将支持 MCP 服务器。
所有端点的公共功能
所有端点必须使用 HTTPS 并返回 JSON。
请求标头
所有端点将使用以下标头调用:
字段 | 描述 | 示例值 |
---|---|---|
Authorization | 用于发出请求的 API 密钥 | Bearer api_key_123 |
Accept-Language | 内容(如消息和错误)的首选语言环境 | en-US |
User-Agent | 有关发出此请求的客户端的信息 | ChatGPT/2.0 (Mac OS X 15.0.1; arm64; build 0) |
Idempotency-Key | 用于确保请求幂等的密钥 | idempotency_key_123 |
Request-Id | 用于跟踪目的的每个请求的唯一密钥 | request_id_123 |
Content-Type | 请求内容的类型 | application/json |
Signature | 请求正文的 Base64 编码签名 | eyJtZX... |
Timestamp | 格式化为 RFC 3339 字符串 | 2025-09-25T10:30:00Z |
API-Version | API 版本 | 2025-09-12 |
响应标头
字段 | 描述 | 示例值 |
---|---|---|
Idempotency-Key | 请求中传递的幂等性密钥 | idempotency_key_123 |
Request-Id | 请求中传递的请求 ID | request_id_123 |
POST /checkout_sessions
调用方向:OpenAI -> 商家
这是创建结账会话的初始调用。该调用将包含有关客户希望购买的商品的信息,并应返回行项目信息以及要向客户显示的任何消息或错误。它应始终返回结账会话 ID。所有响应应以 201 状态返回。
请求
字段 | 类型 | 必需 | 描述 | 验证 |
---|---|---|---|---|
buyer | Buyer | 否 | 有关买家的可选信息。 | 无 |
items | List[Item] | 是 | 用于启动结账会话的初始商品列表。 | 应为非空列表 |
fulfillment_address | Address | 否 | 可选的履行地址(如果存在)。 | 无 |
响应
字段 | 类型 | 必需 | 描述 | 验证 |
---|---|---|---|---|
id | String | 是 | 标识结账会话的唯一 ID。此 ID 将用于在后续调用中更新结账会话。 | 无 |
buyer | Buyer | 否 | 买家信息(如果提供) | 无 |
payment_provider | PaymentProvider | 是 | 将用于完成此交易的支付提供商。 | 无 |
status | String enum | 是 | 结账会话的当前状态。可能的值为:not_ready_for_payment ready_for_payment completed canceled | 无 |
currency | String | 是 | 符合 ISO 4217 标准的货币代码 | 应遵循小写的 ISO 4217 标准 |
line_items | List[LineItem] | 是 | 商品和计算成本列表。 | 无 |
fulfillment_address | Address | 否 | 配送商品的地址。 | 无 |
fulfillment_options | List[FulfillmentOption] | 是 | 所有可用的履行选项和相关成本。 | 无 |
fulfillment_option_id | String | 否 | 所选履行选项的 ID。 | 无 |
totals | List[Total] | 是 | 总额列表。 | 无 |
messages | List[Message] | 是 | 要向客户显示的信息和错误消息列表。 | 无 |
links | List[Link] | 是 | 要向客户显示的链接列表(例如服务条款/隐私政策/等)。 | 无 |
POST /checkout_sessions/
调用方向:OpenAI -> 商家
此端点将在结账会话更新时调用,例如履行地址或履行选项的更改。端点应返回更新的成本、新选项(例如基于履行地址更新的新履行选项)和任何新错误。
POST /checkout_sessions/{checkout_session_id}/complete
调用方向:OpenAI -> 商家
将使用支付方式调用端点以完成购买。预计在此调用之后将完成结账会话并创建订单。任何阻止这种情况发生的错误都应在响应中返回。
POST /checkout_sessions/{checkout_session_id}/cancel
如果可以取消结账会话,此端点将用于取消结账会话。如果无法取消结账会话(例如,如果结账会话已取消或已完成),则服务器应发送状态为 405 的响应。状态不等于已完成或已取消的任何结账会话都应该是可取消的。
GET /checkout_sessions/
此端点用于返回有关结账会话的最新信息。如果找不到结账会话,则服务器应返回状态为 404 的响应。
响应错误
如果服务器无法返回 201 响应,则应返回以下形状的错误,状态为 4xx/5xx。
错误
字段 | 类型 | 必需 | 描述 |
---|---|---|---|
type | String enum | 是 | 错误类型。可能的值为:invalid_request |
code | String enum | 是 | 错误代码。可能的值为:request_not_idempotent |
message | String | 是 | 人类可读的错误描述。 |
param | String | 否 | 指向违规请求正文字段的 JSONPath(如果适用)。 |
Webhook
商家必须实现接收订单事件的能力。这些事件将发送到商家在申请过程中提供的 webhook URL。
有关完整的规范详细信息,请参阅英文版本或访问 OpenAI 开发者文档。