API 授權

本文件將逐步說明如何在 應用程式存取飯店 API (例如 Travel Partner API 和 Price) Feed API。請參閱「使用 OAuth 2.0 存取 Google API」一文,為應用程式授權。

OAuth 2.0 設定

OAuth 2.0 會要求您使用服務帳戶進行識別 。服務帳戶傳送您的私人資訊 金鑰並用來交換 OAuth 2.0 存取權杖。接著,您可以將這個權杖用於 針對唯讀資料 (例如價格、飯店和 飯店價格動態饋給的診斷報表資料。

存取權杖的有效期限為一小時 (3,600 秒)。

如果您先前實作了 ClientLogin,OAuth 2.0 方法也很類似。 但下列差異:

  • 應用程式透過 Google 服務帳戶存取 API。
  • 您在 Authorization HTTP 標頭中傳遞 OAuth 2.0 存取權杖。 呼叫 API

如要設定帳戶來搭配任何 Hotels API 使用 OAuth 2.0,請在 步驟:

  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 均不重複。例如: 如果您輸入「我的新專案」,Google Cloud 控制台就會指派如下的 ID: my-new-project-266022

  4. 按一下「建立」按鈕,即可建立新專案。

  5. 使用導覽選單選取 API 和服務 >資訊主頁。

    fig3

    下圖顯示 Google Cloud 控制台左上方的導覽選單。這樣就會顯示您的「資訊主頁」檢視畫面: 專案:

    fig4

詳情請參閱建立及管理專案

步驟 2:建立服務帳戶並產生憑證

服務帳戶會使用服務帳戶進行伺服器對伺服器的互動 網頁應用程式和飯店資料

如要建立及設定服務帳戶,請按照下列步驟操作:

  1. 在 Google API 控制台主畫面中,按一下左側導覽面板中的「憑證」。Google Cloud 控制台會顯示「憑證」 檢視畫面。

    「Credentials」(憑證) 檢視畫面會顯示 專案。應用程式在要求 OAuth 2.0 存取權杖。新專案沒有任何用戶端或憑證 。

  2. 按一下「API 和服務中的憑證」連結。

  3. 按一下「建立憑證」按鈕,然後選取「服務帳戶金鑰」。 。系統隨即會顯示「建立服務帳戶金鑰」檢視畫面。

  4. 在「服務帳戶」篩選器中選取「新增服務帳戶」

  5. 輸入服務帳戶名稱和服務帳戶 ID。

    名稱可以是任何名稱,但帳戶 ID 不得重複 和專案Google Cloud 控制台會為 讓您以輸入的名稱產生影片

  6. 選取「JSON」JSON做為金鑰類型。必須提供 JSON

  7. 按一下 [Create] (建立) 按鈕。Google Cloud 控制台會產生一組私人映像檔 公開金鑰組。私密金鑰會儲存在預設金鑰中 瀏覽器儲存下載內容的位置。 您必須下載 .JSON 格式的檔案

    您在指令碼或其他會存取應用程式的應用程式中可以使用私密金鑰 您的 API。

    Google Cloud 控制台會顯示「已建立服務帳戶」訊息 (發生) 金鑰產生完畢後

  8. 按一下 [好,我知道了] 按鈕。Google Cloud 控制台會返回 「Credentials」(憑證) 檢視畫面。確認服務帳戶詳細資料 如要查看與專案相關聯的服務帳戶,請按一下「管理」 服務帳戶

    這個服務帳戶現在已具備下列相關聯的憑證:

    • 用戶端 ID:應用程式使用的專屬 ID 要求 OAuth 2.0 存取權杖。
    • 電子郵件地址:系統為服務帳戶產生的電子郵件地址,位於 表單 「<帳戶名稱>account_name@<專案名稱>account_name.google.com.iam.gserviceaccount.com」。
    • Certificate 指紋:您私密金鑰的 ID 已下載完成。
,瞭解如何調查及移除這項存取權。

詳情請參閱「針對伺服器對伺服器應用程式使用 OAuth 2.0」一文。

步驟 3:授權服務帳戶存取您的 Hotel Center 資料

最後一個步驟是授權新服務帳戶存取 Hotel Center:服務帳戶會透過系統產生的電子郵件地址識別 您在上一個步驟中建立的名稱您提供帳戶存取權的方式為: Hotel Center 的共用設定。

如果您沒有適當的存取權,無法在帳戶中新增使用者,請與 Google 飯店團隊使用與我們聯絡表單,要求設定以下地點的擁有權: 即可。您可以要求將一或多封電子郵件傳送給擁有者。 如要進一步瞭解 Hotel Center 存取權,請參閱連結 Hotel Center 和 Google Ads 一文。

如要授權服務帳戶存取 Hotel Center 資料,請按照下列步驟操作:

  1. 在新的瀏覽器視窗中開啟 Hotel Center圖 7

  2. 在「Hotel Center by Google」橫幅中,按一下「新增使用者」圖示即可開啟 共用對話方塊

    fig8

  3. 在「新增更多使用者」欄位中,輸入服務的電子郵件地址 要新增至 Hotel Center 的帳戶。

  4. 保持選取「通知邀請對象」選項。

  5. 選取篩選器中的「管理」

  6. 按一下「邀請」按鈕。

  7. 將使用者加入 Hotel Center 後,服務帳戶應該已啟用 取得 API 存取權。

Google 通知您服務已啟用 API 存取權之後 您就可以開始透過 OAuth 2.0 存取 API。

如何使用 OAuth 2.0

如要存取 API,您的應用程式必須使用服務帳戶產生的電子郵件地址和私密金鑰,向 Google 驗證自身身分。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"

價格動態饋給 API:"https://www.googleapis.com/auth/travel-partner-price-upload"

建立憑證時,您必須指定服務帳戶。詳情請參閱 建立服務帳戶並產生其憑證

開發應用程式時,請務必遵循 驗證您的應用程式瞭解詳情

範例

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)

旅遊合作夥伴 API

旅遊合作夥伴 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. 按一下「啟用 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"

價格動態饋給 API

Price Feed API 可讓住宿合作夥伴為飯店業者提供自訂價格資料 每間飯店。Google 住宿合作夥伴可以使用 OAuth2.0 來驗證和 是否授權自己將價格上傳至 Google請按照 OAuth 2.0 設定說明,取得價格動態饋給 API 的授權。

重點回顧

請注意,價格動態饋給授權操作說明中的主要差異 也能使用 Google Cloud CLI 或 Compute Engine API

  1. 合作夥伴應建立新的價格動態饋給 OAuth2.0 專案 ,使用與 OAuth 2.0 設定中的操作說明相同。

  2. 不必在 Google Cloud 控制台中啟用 Price Feed API,且 可以忽略只需要一個服務帳戶然後使用同一組金鑰 服務帳戶鍵,可授予價格動態饋給專案存取權給飯店 中心資料。按照 OAuth2.0 設定中所述的其餘步驟操作, 完成 API 設定

取得價格動態饋給的 OAuth2.0 存取權杖

接著要透過上傳住宿價格取得 OAuth2.0 存取權杖 定義範圍您可以授權給 查看「價格動態饋給」專案 準備發出委派 API 呼叫 然後從已取得的憑證中擷取存取權杖並設定為 "Authorization" HTTP 標頭。

住宿價格上傳範圍如下: "https://www.googleapis.com/auth/travel-partner-price-upload"

上傳價格

取得存取權杖後,合作夥伴即可上傳價格動態饋給,例如: 針對下列內容使用靜態 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 Feed 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. 您是否點選下列連結來與服務帳戶共用 Hotel Ads Center 帳戶 該如何分享「共用這個帳戶」按鈕?
  6. 您是否傳送服務帳戶的電子郵件地址和合作夥伴 ID 給 您的客戶技術顧問 (TAM)?
  7. 您的 API 呼叫是否在 Authorization 標頭中傳遞最近取得的權杖?
  8. 您的權杖是否已建立超過 1 小時?

下表列出一些常見錯誤和可能的解決方法:

錯誤 說明
Invalid credentials 這可能表示多種情況。如果遇到這項錯誤,請檢查以下事項:
  • 您指定的 Authorization 標頭包含有效的 不記名權杖
  • 不記名權杖存在不到一小時。權杖只能用 一小時。
  • 您使用 partner 查詢字串參數指定了正確的合作夥伴名稱。這個值是您的不重複夥伴 ID,而非 Hotel Ads Center 中顯示的合作夥伴名稱。如果您不 與客戶技術顧問 (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。