אימות API

במסמך הזה מפורטות הוראות מפורטות להגדרת OAuth2.0 באפליקציה שלכם כשאתם ניגשים ל-API של המלונות, כמו Travel Partner API ו-Price Feeds API. במאמר שימוש ב-OAuth 2.0 כדי לגשת ל-Google APIs מוסבר איך לאשר את האפליקציה.

הגדרת OAuth 2.0

ב-OAuth 2.0 צריך לזהות את עצמכם באמצעות חשבון שירות שמשויך לחשבון Google שלכם. חשבון השירות שולח את המפתח הפרטי בתמורה לאסימון גישה מסוג OAuth 2.0. לאחר מכן תוכלו להשתמש בטוקן הזה בקריאות לממשקי ה-API של המלונות כדי לקבל נתונים לקריאה בלבד, כמו נתוני תמחור, נתונים על המלון ונתוני דיווח אבחוניים לגבי פיד המחירים של המלון.

אסימוני הגישה תקפים למשך שעה (3,600 שניות).

אם הטמעתם בעבר את ClientLogin, הגישה של OAuth 2.0 דומה, עם ההבדלים הבאים:

  • האפליקציה משתמשת בחשבון שירות של Google כדי לגשת ל-API.
  • כשקוראים לממשקי API, מעבירים אסימון גישה מסוג OAuth 2.0 בכותרת ה-HTTP‏ Authorization.

כדי להגדיר את החשבון לשימוש ב-OAuth 2.0 עם כל ממשק API של מלונות, מבצעים את הפעולות הבאות:

  1. יצירת פרויקט חדש במסוף Google Cloud

  2. יצירה של חשבון שירות ופרטי הכניסה שלו

  3. מתן גישה לנתוני המלון לחשבון השירות

כל אחד מהשלבים האלה מתואר בקטעים הבאים.

שלב 1: יוצרים פרויקט חדש במסוף Google Cloud

במסוף Google Cloud אפשר לנהל ולראות את נתוני התנועה, האימות ופרטי החיוב של ממשקי ה-API של Google שבהם הפרויקטים שלכם משתמשים.

במסוף Google Cloud, פרויקט הוא אוסף של הגדרות, פרטי כניסה ומטא-נתונים לגבי האפליקציה שאתם עובדים עליה, שמשתמשת בממשקי Google Developer API ובמשאבים של Google Cloud.

אפשר גם להשתמש במסוף Google Cloud כדי ליצור פרטי כניסה ל-API, להפעיל ממשקי API ולנהל את פרטי הצוות והחיוב שמשויכים לפרויקט.

כדי ליצור פרויקט חדש במסוף Google Cloud:

  1. נכנסים לחשבון Gmail או לחשבון Google.

  2. פותחים את מסוף Google Cloud. אם זה הפרויקט הראשון שלכם, יופיע בחלון הראשי הלחצן CREATE PROJECT:

    fig1

  3. לוחצים על הלחצן CREATE PROJECT. במסוף Google Cloud תוצג תיבת הדו-שיח New Project:

    fig2

    מזינים שם ידידותי לפרויקט החדש בשדה הקלט Project name. מתחת לשדה, מסוף Google Cloud יוצר בשבילכם מזהה פרויקט, כדי לוודא שהמזהה יהיה ייחודי בכל הפרויקטים. לדוגמה, אם מזינים 'הפרויקט החדש שלי', מסוף Google Cloud מקצה מזהה כמו my-new-project-266022.

  4. לוחצים על הלחצן Create (יצירה) כדי ליצור את הפרויקט החדש.

  5. בתפריט הניווט, בוחרים באפשרות APIs & Services‏ > Dashboard.

    fig3

    בתמונה הבאה מוצג תפריט הניווט בפינה הימנית העליונה של מסוף Google Cloud. תוצג התצוגה Dashboard של הפרויקט:

    fig4

מידע נוסף זמין במאמר יצירה וניהול של פרויקטים.

שלב 2: יוצרים חשבון שירות ויוצרים את פרטי הכניסה שלו

חשבונות שירות משמשים לאינטראקציות בין שרתים, כמו אינטראקציות בין אפליקציית אינטרנט לבין נתוני המלון שלכם.

כדי ליצור ולהגדיר חשבון שירות:

  1. בתצוגה הראשית של Google API Console, לוחצים על Credentials בסרגל הניווט הימני. במסוף Google Cloud תוצג התצוגה Credentials.

    בתצוגה Credentials מוצגים מזהי לקוח ופרטי כניסה לפרויקט. האפליקציה משתמשת במזהה הלקוח כשמבקשים אסימון גישה של OAuth 2.0. לפרויקטים חדשים עדיין אין לקוחות או פרטי כניסה.

  2. לוחצים על הקישור פרטי כניסה בממשקי API ובשירותים.

  3. לוחצים על הלחצן Create credentials ובוחרים באפשרות Service account key מהמסנן. התצוגה Create service account key (יצירת מפתח לחשבון שירות) תוצג.

  4. במסנן Service account, בוחרים באפשרות New service account.

  5. מזינים שם ו-ID של חשבון שירות.

    השם יכול להיות כל שם שתרצו, אבל מזהה החשבון חייב להיות ייחודי בכל הפרויקטים. מסוף Google Cloud ייצור בשבילכם מזהה חשבון ייחודי על סמך השם שהזנתם.

  6. בוחרים באפשרות JSON בתור סוג המפתח. חובה להשתמש ב-JSON.

  7. לוחצים על הלחצן Create. מסוף Google Cloud יוצר זוג מפתחות פרטי או ציבורי לפרויקט. המפתח הפרטי נשמר במיקום ברירת המחדל שבו הדפדפן שומר הורדות. צריך להוריד קובץ בפורמט .JSON.

    משתמשים במפתח הפרטי בסקריפטים או באפליקציות אחרות שמקבלות גישה ל-API.

    כשהמערכת מסיימת ליצור את המפתחות, במסוף Google Cloud תוצג ההודעה 'Service account created'.

  8. לוחצים על הלחצן OK, got it. תוחזרו לתצוגה Credentials במסוף Google Cloud. כדי לאשר את הפרטים של חשבון השירות ולראות את חשבון השירות שמשויך לפרויקט, לוחצים על Manage service accounts בתצוגה הזו.

    עכשיו פרטי הכניסה הבאים משויכים לחשבון השירות:

    • מזהה לקוח: מזהה ייחודי שבו האפליקציה משתמשת כשמבקשים אסימון גישה מסוג OAuth 2.0.
    • כתובת אימייל: כתובת אימייל שנוצרה עבור חשבון השירות, בפורמט account_name@project_name.google.com.iam.gserviceaccount.com.
    • טביעות אצבע של אישורים: המזהה של המפתח הפרטי שהורדתם.

למידע נוסף, ראו שימוש ב-OAuth 2.0 לאפליקציות שרת-אל-שרת.

שלב 3: נותנים לחשבון השירות גישה לנתונים ב-Hotel Center

השלב האחרון הוא לתת לחשבון השירות החדש גישה ל-Hotel Center. חשבון השירות מזוהה באמצעות כתובת האימייל שנוצרה שיצרתם בשלב הקודם. אתם נותנים גישה לחשבון הזה באמצעות הגדרות השיתוף ב-Hotel Center.

אם אין לכם גישה מתאימה להוספת משתמשים לחשבון, תוכלו לפנות לצוות Google Hotels באמצעות הטופס ליצירת קשר ולבקש להגדיר בעלות על החשבון. אתם יכולים לבקש שנשלח אימייל אחד או יותר לבעלים. מידע נוסף על הגישה ל-Hotel Center זמין במאמר קישור בין Hotel Center לבין Google Ads.

כדי לתת לחשבון שירות גישה לנתונים שלכם ב-Hotel Center:

  1. פותחים את Hotel Center בחלון דפדפן חדש. fig7

  2. בבאנר של Hotel Center by Google, לוחצים על סמל הוספת המשתמשים כדי לפתוח את תיבת הדו-שיח של השיתוף.

    fig8

  3. בשדה Add more people, מזינים את כתובת האימייל של חשבון השירות שרוצים להוסיף ל-Hotel Center.

  4. משאירים את האפשרות לשלוח הודעה לאנשים מסומנת.

  5. בוחרים באפשרות ניהול במסנן.

  6. לוחצים על הלחצן הזמנה.

  7. אחרי שמוסיפים משתמשים ל-Hotel Center, חשבון השירות אמור להיות מופעל לגישה ל-API תוך כ-24 שעות.

אחרי ש-Google תודיע לכם שגישת ה-API מופעלת בחשבון השירות שלכם, תוכלו להתחיל לגשת ל-API באמצעות OAuth 2.0.

איך משתמשים ב-OAuth 2.0

כדי לגשת ל-API, האפליקציה צריכה לזהות את עצמה בפני Google באמצעות כתובת האימייל והמפתח הפרטי שנוצרו לחשבון השירות. מנגנון האימות של Google מחליף את המפתח הזה באסימון גישה מסוג OAuth 2.0, שאותו מעבירים בכותרת Authorization בקריאות ה-API של האפליקציה.

אפשר לעיין במאמר הכנה לקריאה להענקת גישה ל-API.

טווחים

אלה הערכים של SCOPES ב-Hotels API:

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

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://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. לוחצים על Enable APIs and Services. תוצג דף הפתיחה של ספריית ה-API.

  3. בשדה החיפוש, מתחילים להקליד 'Travel Partner API', ואז במסוף תוצג רשימה של ממשקי API שתואמים למה שהקלדתם.

  4. לוחצים על ממשק ה-API התואם בטבלה. במסוף Google Cloud תוצג תיאור של ה-API הזה.

  5. לוחצים על הלחצן Enable API כדי להפעיל את ממשק ה-API הזה בפרויקט.

מידע נוסף זמין במאמר הפעלה והשבתה של שירותים.

ה-Travel Partner API מופעל עכשיו בפרויקט החדש בחשבון Google שלך.

היקף Travel Partner API הוא: "https://www.googleapis.com/auth/travelpartner"

נקודת הקצה של Travel Partner API היא: "https://travelpartner.googleapis.com/v3/accounts/<account_id>/<path>"

Price Feeds API

Price Feeds API מאפשר לשותפי לינה לספק נתוני תמחור מותאמים אישית לכל מלון. שותפי האירוח של Google יכולים להשתמש ב-OAuth 2.0 כדי לאמת את עצמם ולקבל הרשאה להעלאת מחירים ל-Google. פועלים לפי הוראות ההגדרה של OAUTH 2.0 כדי לקבל הרשאה ל-Price Feeds API.

נקודות שכדאי לזכור

חשוב לשים לב להבדלים החשובים בהוראות ההרשאה של Price Feeds API.

  1. השותפים צריכים ליצור פרויקט חדש של Price Feeds OAuth2.0 במסוף Google Cloud לפי אותן ההוראות שמפורטות במאמר הגדרת OAuth 2.0.

  2. לא NOT להפעיל את Price Feeds API במסוף Google Cloud, וניתן להתעלם ממנו. אתם צריכים רק חשבון שירות ומפתח אחד, ואז תוכלו להשתמש באותו חשבון שירות ובאותו מפתח כדי להעניק לפרויקט של פידים של מחירים גישה לנתונים שלכם ב-Hotel Center. פועלים לפי השלבים הנותרים שמפורטים בהגדרת OAuth2.0 כדי להשלים את הגדרת ה-API.

אחזור אסימון גישה מסוג OAuth2.0 עבור פידים של מחירים

בשלב הבא מקבלים אסימון גישה מסוג OAuth2.0 עם היקף ההעלאה של מחירי המלונות באמצעות קובץ המפתח של חשבון השירות. כדי לאשר בקשות לפרויקט של פידים של מחירים, פועלים לפי ההוראות שמפורטות בקטע הכנה לביצוע קריאה להענקת גישה ל-API, ולאחר מכן מחלצים את אסימון הגישה מפרטי הכניסה שנרכשו ומגדירים אותו בכותרת ה-HTTP ‏"Authorization".

ההיקף של העלאת מחירים של חדרים הוא: "https://www.googleapis.com/auth/travel-partner-price-upload"

העלאת מחירים

אחרי קבלת אסימון הגישה, השותפים יכולים להעלות את פיד המחירים שלהם באופן דומה לשימוש ב-IP סטטי לאימות ולאישור, עם השינוי הבא:

  • הגדרת אסימון הגישה בכותרת ה-HTTP‏ "Authorization"
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>

בדיקת ההגדרה של OAuth2.0 ל-Price Feeds API

כדי לבדוק את ההגדרה של 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 – מפתח פרטי – אחרי שלחצתם על Create client ID ובחרתם באפשרות Service account?
  4. האם קיבלת כתובת אימייל של מזהה לקוח של חשבון שירות בפורמט: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. האם שיתפת את חשבון Hotel Ads Center עם חשבון השירות בלחיצה על הלחצן שיתוף החשבון הזה?
  6. האם שלחת את כתובת האימייל של חשבון השירות ואת מזהה השותף שלך למנהל החשבונות הטכני (TAM)?
  7. האם הקריאות ל-API מעבירות אסימון שהתקבל לאחרונה בכותרת Authorization?
  8. האם האסימון נוצר לפני יותר משעה?

בטבלה הבאה מפורטות כמה שגיאות נפוצות ופתרונות אפשריים:

שגיאה תיאור
Invalid credentials יכולות להיות לכך כמה סיבות. אם אתם נתקלים בשגיאה הזו, צריך לבדוק אם:
  • ציינת כותרת Authorization עם אסימון נושא (bearer) תקף.
  • הטוקן למוכ"ז הונפק לפני פחות משעה. האסימון תקף למשך שעה אחת בלבד.
  • ציינת את שם השותף הנכון (באמצעות הפרמטר של מחרוזת השאילתה partner ). הערך הוא מזהה השותף הייחודי שלכם, ולא שם השותף שמופיע במרכז Hotel Ads. אם אתם לא יודעים מהו מזהה השותף, תוכלו לפנות לנציג החשבונות הטכני (TAM).
Not found סביר להניח שנקודת הקצה בפורמט שגוי. בודקים שאתם שולחים בקשה מסוג GET וכתובת ה-URL של הבקשה תקינה (היא תואמת לתחביר ה-API שאליו אתם מנסים לגשת).
Invalid string value חלק אחד או יותר בנקודת הקצה מכיל תחביר לא חוקי. לדוגמה, יכול להיות ששגיאת איות בחלק מהנתיב. ודאו שהשתמשתם בקו תחתון, באותיות רישיות ובניסוח הנכונים לאורך כל הנתיב.
Unsupported output format השגיאה הזו מתרחשת בדרך כלל כשמשתמשים ב-Reports API. צריך לציין את "alt=csv" בכתובת ה-URL של הבקשה GET. אין תמיכה ב-JSON ב-Reports API.
AccessTokenRefreshError/Invalid grant כשמריצים את האפליקציה, השגיאה הזו עשויה להופיע בגלל:
  • כתובת האימייל של חשבון השירות שגויה. בודקים את חשבון האימייל במסוף Google Cloud ומוודאים שיש לו הרשאה לגשת ל-API.
  • אין לכתובת האימייל הזו גישה ל-API. בודקים אם לכתובת האימייל יש הרשאה לגשת לנתוני המלונות שלכם ששותפו דרך Hotel Center.
  • קובץ המפתח הוא לא המפתח הנכון לחשבון השירות. משתמשים במסוף Google Cloud כדי להוריד אישור .JSON חדש ולוודא שהאפליקציה מפנה לאישור הנכון.
HotelAdsAPIConnection object has no attribute credentials כשמריצים את האפליקציה, הנתיב לקובץ .JSON שגוי.
Invalid scope כשמריצים את האפליקציה, היקף ה-API צריך להיות אחד מהאפשרויות הבאות:
  • "https://www.googleapis.com/auth/travelpartner"
  • "https://www.googleapis.com/auth/travel-partner-price-upload"
Forbidden מספר החשבון שבו אתם משתמשים הוא מספר שאין לכם הרשאה לגשת אליו. אם אתם הבעלים של חשבון משנה, יכול להיות שלא תוכלו לגשת למזהה של חשבון ההורה או של חשבון הבסיס.