第 4 步:实现预订服务器

您需要创建预订服务器,以允许 Actions Center 进行回调,以便代表您创建和更新预订。

  • 标准实现。这样,Actions Center 就可以代表用户创建预约、预订和预订。

请参阅合作伙伴门户文档,了解如何配置与沙盒和生产环境预订服务器的连接。

实现 REST API 接口

实现基于 REST 的 API 接口,以便 Google 能够通过 HTTP 发送预订服务器请求。

首先,请设置一个可连接到 Actions Center 沙盒环境的开发或沙盒预订服务器。请仅在沙盒服务器经过全面测试后再迁移到生产环境。

方法

对于每种类型的预订服务器,您都需要使用不同的 API 方法。您也可以选择下载 proto 格式的服务定义,以便开始进行 API 实现。下表显示了每种实现的方法,并添加了指向服务 proto 格式的链接。

标准实现
标准服务定义:下载 proto 服务定义文件。
方法 HTTP 请求
HealthCheck GET /v3/HealthCheck/
BatchAvailabilityLookup POST /v3/BatchAvailabilityLookup/
CreateBooking POST /v3/CreateBooking/
UpdateBooking POST /v3/UpdateBooking/
GetBookingStatus POST /v3/GetBookingStatus/
ListBookings POST /v3/ListBookings/

API 资源

预订

标准实现需要以下资源类型:

  • 广告位:广告资源广告位。
  • 预订:对商品目录空档的预约。

流程:创建预订

本部分介绍如何为标准实现创建预订。

图 1:从空档创建预订的工作流程
图 1:从空档创建预订的工作流程

用户创建预订后,Google 会向您发送用户的名字、姓氏、电话号码和电子邮件地址。从您的角度来看,此预订需要被视为访客结账,因为 Actions Center 无法在您的系统中查找用户的帐号。请确保最终的预订信息与商家通过预订系统获得的预订信息一致。

安全和身份验证

与预订服务器的所有通信均通过 HTTPS 进行,因此您的服务器必须具有与其 DNS 名称匹配的有效 TLS 证书。为帮助您设置服务器,我们建议您使用公开发布的 SSL/TLS 验证工具,例如 Qualys 的 SSL 服务器测试

Google 向您的预订服务器发出的所有请求都将使用 HTTP 基本身份验证进行身份验证。您可以在合作伙伴门户的“预订服务器配置”页面中输入预订服务器的基本身份验证凭据(用户名和密码)。密码必须每 6 个月轮替一次。

框架实现示例

首先,查看针对 Node.js 和 Java 框架编写的预订服务器的以下示例骨架:

这些服务器已弃用 REST 方法。

要求

HTTP 错误和业务逻辑错误

您的后端在处理 HTTP 请求时可能会发生两种类型的错误。

  • 与基础架构或数据不正确相关的错误
  • 与业务逻辑相关的错误
    • 返回设置为 200 OK 的 HTTP 状态代码,并在响应正文中指定业务逻辑失败。您可能会遇到的业务逻辑错误类型因服务器实现类型不同而异。

对于标准实现,系统会在预订失败中捕获可能的业务逻辑错误,并在 HTTP 响应中返回这些错误。创建或更新资源时可能会遇到业务逻辑错误。例如,当您处理 CreateBookingUpdatingBooking 方法时。相关示例包括但不限于:

  • 如果请求的槽不再可用,请使用 SLOT_UNAVAILABLE
  • 如果系统不接受所提供的信用卡类型,请使用 PAYMENT_ERROR_CARD_TYPE_REJECTED

幂等性

通过网络进行的通信并非始终可靠,如果 Google 未收到任何响应,可能会重试 HTTP 请求。因此,更改状态的所有方法都必须具有幂等性:

  • CreateBooking
  • UpdateBooking

对于除 UpdateBooking 之外的所有请求消息,都包括幂等令牌以唯一标识请求。这样,您就可以区分重试的 REST 调用(旨在创建单个请求)和两个单独的请求。 UpdateBooking 分别由其预订条目 ID 进行唯一标识,因此其请求中不包含幂等性令牌。

以下是一些有关预订服务器如何处理幂等性的示例:

  • 成功的 CreateBooking HTTP 响应包含已创建的预订。在某些情况下,付款会在预订流程中进行处理。如果再次收到完全相同的 CreateBookingRequest(具有相同 idempotency_token),则必须返回相同的 CreateBookingResponse。系统不会再次创建预订,并且向用户收取一次费用(如适用)。

    请注意,如果 CreateBooking 尝试失败,且重新发送了同一请求,在这种情况下,您的后端应进行重试。

幂等性要求适用于更改状态的所有方法。