API 授权

本文档提供了有关如何在您的 应用(如 Travel Partner API 和 Price) Feeds API。请参阅使用 OAuth 2.0 访问 Google API 为您的应用授权

OAuth 2.0 设置

OAuth 2.0 要求您使用服务账号来表明自己的身份 与您的 Google 账号相关联。该服务账号会将您的 密钥来换取 OAuth 2.0 访问令牌。然后,您可以在 调用 Hotel API 以获取只读数据,例如定价、酒店和 与您的酒店价格 Feed 有关的诊断报告数据。

访问令牌的有效期为 1 小时(3,600 秒)。

如果您之前实现了 ClientLogin,OAuth 2.0 方法与之类似,但存在以下差异:

  • 您的应用使用 Google 服务账号来访问 API。
  • 在以下情况下,您会在 Authorization HTTP 标头中传递 OAuth 2.0 访问令牌: 调用 API。

如需设置您的账号以将 OAuth 2.0 与任何 Hotels API 搭配使用,请执行以下操作: 步骤:

  1. 在 Google Cloud 控制台中创建一个新项目

  2. 创建服务账号及其凭据

  3. 向服务账号授予对酒店数据的访问权限

后续几个部分将介绍其中每个步骤。

第 1 步:创建新的 Google Cloud 控制台项目

Google Cloud 控制台用于管理和查看流量数据, 项目的 Google API 的身份验证和结算信息 。

在 Google Cloud 控制台中,项目是一系列设置的集合, 凭据以及您所处理的应用的元数据 使用 Google Developer API 和 Google Cloud 资源。

Google Cloud 控制台还用于生成 API 凭据、激活 API 管理与项目关联的团队和结算信息。

如需创建新的 Google Cloud 控制台项目,请执行以下操作:

  1. 登录您的 Gmail 或 Google 账号。

  2. 打开 Google Cloud 控制台。 如果这是您的第一个项目,主视图会显示创建项目 按钮:

    fig1

  3. 点击创建项目按钮。Google Cloud 控制台会显示 New Project 对话框:

    fig2

    项目名称中,为新项目输入一个易记名称。 输入字段。在该字段下方,Google Cloud 控制台会生成一个项目 ID,确保此 ID 在所有项目中都是唯一的。例如: 如果您输入“My New Project”,Google Cloud 控制台会分配一个 ID,例如 my-new-project-266022

  4. 点击 Create 按钮以创建新项目。

  5. 在导航菜单中选择 API 和服务 >信息中心

    fig3

    下图显示了左上角的导航菜单 Google Cloud 控制台系统将显示您媒体资源的信息中心 项目:

    fig4

如需了解详情,请参阅创建和管理项目

第 2 步:创建服务账号并生成其凭据

服务账号用于服务器与服务器之间的互动,例如 Web 应用和您的酒店数据。

如需创建和配置服务账号,请执行以下操作:

  1. 在 Google API 控制台主视图中,点击凭据 “管理”部分Google Cloud 控制台会显示凭据 视图。

    凭据视图会显示 项目。在请求 OAuth 2.0 访问令牌。新项目没有任何客户端或凭据 。

  2. 点击 API 和服务中的凭据链接。

  3. 点击创建凭据按钮,然后选择服务账号密钥 。系统随即会显示创建服务账号密钥视图。

  4. 服务账号过滤条件中,选择新的服务账号

  5. 输入服务账号名称和服务账号 ID。

    您可以任意设置名称,但账号 ID 必须是唯一的 跨所有项目。Google Cloud 控制台会为 根据您输入的姓名显示。

  6. 选择 JSON 作为密钥类型。必须提供 JSON

  7. 点击创建按钮。Google Cloud 控制台会为您的项目生成私钥或公钥对。私钥会保存到默认值 保存下载内容的位置 您必须下载 .JSON 格式文件

    您在自己的脚本或其他访问 。

    Google Cloud 控制台会显示“服务账号已创建”提示 完成密钥生成过程。

  8. 点击知道了按钮。Google Cloud 控制台会让您返回 凭据视图。确认有关您的服务账号的详细信息 要查看与您的项目关联的服务账号,请点击管理 服务账号

    该服务账号现在拥有以下关联的凭据:

    • 客户端 ID:您的应用在广告展示时使用的唯一标识符 请求 OAuth 2.0 访问令牌。
    • 电子邮件地址:为服务账号生成的电子邮件地址,位于 表单 “account_name@project_name.google.com.iam.gserviceaccount.com”。account_nameaccount_name
    • 证书指纹:您验证过的私钥的 ID 已下载。

有关详情,请参阅针对服务器对服务器应用使用 OAuth 2.0

第 3 步:向服务账号授予对您 Hotel Center 数据的访问权限

最后一步是为新服务账号提供访问您的 Hotel Center。服务账号由 您在上一步中创建的代码您可以使用 Hotel Center 共享设置。

如果您没有适当的访问权限,无法向账号添加用户,请联系 Google 酒店团队,使用与我们联系表单申请获得以下商家信息的所有权: 您的账号。您可以申请将一封或多封电子邮件发送给某个所有者。 如需详细了解 Hotel Center 访问权限,请参阅将 Hotel Center 与 Google Ads 相关联

如需向服务账号授予对您的 Hotel Center 数据的访问权限,请执行以下操作:

  1. 在新的浏览器窗口中,打开 Hotel Centerfig7

  2. Hotel Center by Google 横幅中,点击“添加用户”图标以打开 共享对话框。

    fig8

  3. 添加更多人字段中,输入相应服务的电子邮件地址 账号。

  4. 通知对方选项保持选中状态。

  5. 从过滤器中选择管理

  6. 点击邀请按钮。

  7. 将用户添加到 Hotel Center 后,您的服务账号应启用 在大约 24 小时内即可获得 API 访问权限。

当 Google 通知您已为服务启用 API 访问权限后 您就可以开始使用 OAuth 2.0 访问该 API

如何使用 OAuth 2.0

要访问该 API,您的应用必须通过 服务账号生成的电子邮件地址和私钥。Google 的 身份验证机制使用该密钥交换 OAuth 2.0 访问令牌, 您在应用的 API 调用中传入 Authorization 标头。

请参阅准备进行委托 API 调用

范围

以下是 Hotels API 的 SCOPES

Travel Partner API:"https://www.googleapis.com/auth/travelpartner"

Travel Partner Prices API:"https://travelpartnerprices.googleapis.com"

Price Feeds API:"https://www.googleapis.com/auth/travel-partner-price-upload"

您应在创建凭据时指定服务账号。请参阅 创建服务账号并生成其凭据

在开发应用时,请务必遵循最佳实践, 使用 API 密钥对应用进行身份验证了解详情

示例

from google.oauth2 import service_account
from google.auth.transport.requests import Request

# You can use a single or multiple scopes
SCOPES =
['https://www.googleapis.com/auth/travel-partner-price-upload','https://travelpartnerprices.googleapis.com','https://www.googleapis.com/auth/travelpartner']
SERVICE_ACCOUNT_FILE = 'service_account_key_file.json'

cred = service_account.Credentials.from_service_account_file(
                        SERVICE_ACCOUNT_FILE,
                        scopes=SCOPES)
cred.refresh(Request())
headers = {}
cred.apply(headers)

Travel Partner API

借助 Travel Partner API,住宿合作伙伴可以检索 Hotel Center 信息,以及更改 Hotel Center 数据,以管理大型或复杂账号。

按照 OAUTH 2.0 设置说明进行操作,以获取以下项目的授权: 您的 Travel Partner API。

在为 Travel Partners API 创建新项目时,您需要启用访问权限 创建新的 Google Cloud 控制台项目

请按照以下步骤启用对 Travel Partners API 的访问权限:

  1. 转到项目的“信息中心”视图。

  2. 点击启用 API 和服务。系统会显示 API 库欢迎界面 页面。

  3. 在搜索字段中,开始输入“Travel Partner API”,然后输入控制台 会显示与您输入的内容相匹配的 API 列表。

  4. 点击与表格中匹配的 API。Google Cloud 控制台会显示 有关该 API 的说明。

  5. 点击 Enable API(启用 API)按钮,为您的项目启用此 API。

如需了解详情,请参阅启用和停用服务

您 Google 账号的新项目现已启用 Travel Partner API。

Travel Partner API 的范围如下: "https://www.googleapis.com/auth/travelpartner"

Travel Partner API 的端点是: "https://travelpartner.googleapis.com/v3/accounts/<account_id>/<path>"

Travel Partner Prices API

借助 Travel Partner Prices API,住宿合作伙伴可以将房价发送到 Google。这也称为住宿晚数 (LoS) 价格

按照 OAUTH 2.0 设置说明进行操作,以获取以下项目的授权: Travel Partner Prices API 的介绍。

为 Travel Partners Prices API 创建新项目时,您需要执行以下操作: 启用对新 Google Cloud 控制台项目的访问权限,该项目类似于 Travel Partner API 中提供的说明。

请参阅 Travel Partner API 中提供的步骤并替换 “Travel Partner API”的所有实例包含“Travel Partner Prices API”即可启用 自己的项目

Travel Partner Prices API 的范围如下: "https://travelpartnerprices.googleapis.com"

Travel Partner Prices API 的上传路径为: "/travel/lodging/uploads/accounts/<account_id>/property_data"

价格 Feed API

借助 Price Feeds API,住宿合作伙伴可以为每家酒店提供自定义价格数据。Google 住宿合作伙伴可以使用 OAuth2.0 进行身份验证和 在将价格上传到 Google 时自行授权。遵循 OAUTH 2.0 获取 Price Feeds API 授权的设置说明。

注意事项

请注意价格 Feed 授权说明中的重要区别 API。

  1. 合作伙伴应按照 OAuth 2.0 设置中提供的说明,在 Google Cloud 控制台中创建新的价格 Feed OAuth2.0 项目

  2. 需要在 Google Cloud 控制台中启用 Price Feeds API, 可以忽略。您只需要一个服务账号,键,然后使用与 服务账号和用于向价格 Feed 项目授予对酒店的访问权限的键 数据。按照 OAuth2.0 设置中列出的其余步骤 并完成 API 配置

获取适用于价格 Feed 的 OAuth2.0 访问令牌

下一步是通过上传住宿价格获取 OAuth2.0 访问令牌 使用服务账号密钥文件指定范围您可以向 定价 Feed 项目的 准备进行委托 API 调用 然后从获得的凭据中提取访问令牌,并在 "Authorization" HTTP 标头。

上传住宿价格的范围如下: "https://www.googleapis.com/auth/travel-partner-price-upload"

上传价格

获取访问令牌后,合作伙伴可以上传其价格 Feed,方法与使用静态 IP 进行身份验证和授权类似,只需进行以下修改即可:

  • "Authorization" HTTP 标头中设置访问令牌
curl -X POST -H "Authorization: Bearer <access token>"
www.google.com/travel/lodging/uploads/accounts/<account_id>/ota/hotel_rate_amount_notif --data-binary @<price_feed_file_location>

测试适用于 Price Feeds API 的 OAuth2.0 设置

您可以通过上传空文件或使用实际价格来测试 OAuth2.0 设置 将数据上传到任意上传路径使用表格检查您的 HTTP 响应 状态。

HTTP 响应状态 消息
200 Successful (OK)
401 Service account creation or access token fetch was not successful
403 Service account access wasn't granted to the Hotel Center account or both the service account key and access token has expired

问题排查

遇到问题?快速检查以下各项也许能解决问题 问题。

  1. 您是否在 Google Cloud 控制台中创建了项目?
  2. 您是否在项目中启用了该服务?
  3. 您是否下载了 .JSON 文件(在点击后看到的私钥) 创建客户端 ID 并选择服务账号
  4. 您是否获得了以下表单的服务账号客户端 ID 电子邮件地址: nnnnnnn@app_name.google.com.iam.gserviceaccount.com
  5. 您是否通过点击 共享此账号按钮?
  6. 您是否已向您的技术支持客户经理 (TAM) 发送服务账号的电子邮件地址和您的合作伙伴 ID?
  7. 您的 API 调用是否传递了 Authorization标头?
  8. 您的令牌是否已超过 1 小时?

下表列出了一些常见错误和可能的解决方法:

错误 说明
Invalid credentials 这可能意味着多种多样的。如果您遇到此错误, 请检查:
  • 您指定的 Authorization 标头包含有效的 不记名令牌
  • 不记名令牌存在时间未满一小时。一个令牌只有 1 小时
  • 您已指定正确的合作伙伴名称(使用 partner 查询字符串参数)。此值是您的唯一合作伙伴 ID,而不是 Hotel Ads Center 中显示的合作伙伴名称。如果您 了解您的合作伙伴 ID,请与您的技术支持客户经理 (TAM) 联系。
Not found 您的端点很可能格式有误。检查您是否正在提交 GET 请求,并且该请求网址有效(符合 您尝试访问的 API 语法)。
Invalid string value 端点的一个或多个部分包含无效的语法。例如: 您可能拼错了路径的某些部分。检查您使用的是否正确无误 整个路径中使用下划线、大写字母和文字等字词。
Unsupported output format 此错误最常在使用 Reports API 时发生。您必须 在 GET 的网址中指定 "alt=csv" 请求。Reports API 不支持 JSON。
AccessTokenRefreshError/Invalid grant 在运行您的应用时,如果 以下:
  • 您的服务账号电子邮件地址不正确。查收电子邮件 位于 Google Cloud 控制台 ,并确保其有权访问您的 API。
  • 此电子邮件地址没有 API 访问权限。检查电子邮件是否 地址有权访问您分享的酒店数据 (通过 Hotel Center 访问)。
  • 该密钥文件不是服务账号的正确文件。使用 Google Cloud 控制台,下载新的 .JSON 并确保应用指向正确的证书
HotelAdsAPIConnection object has no attribute credentials 运行应用时,.JSON 文件的路径为 错误。
Invalid scope 运行应用时,您的 API 范围必须是下列其中一项:
  • &quot;https://www.googleapis.com/auth/travelpartner&quot;
  • &quot;https://travelpartnerprices.googleapis.com&quot;
  • &quot;https://www.googleapis.com/auth/travel-partner-price-upload&quot;
Forbidden 您使用的账号 ID 是您未获授权的账号 ID 访问。如果您是子账号所有者,则可能无法访问 父级或根账号 ID。