אימות API

שימוש ב-OAuth 2.0 כדי לאשר את הבקשה שלך כשניגשים לממשקי ה-API של המלון.

הגדרת OAuth 2.0

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

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

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

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

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

  1. יצירת פרויקט חדש ב-Google Developers Console (DevConsole)

  2. הפעלת גישה אל Travel Partner API של הפרויקט החדש

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

  4. איך מעניקים לחשבון השירות גישה לנתוני המלון

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

שלב 1: יוצרים פרויקט חדש ב-DevConsole

Google Developers Console ('DevConsole') הוא חוויית המפתחים של Google לניהול והצגה של נתוני תנועה, אימות ונתוני חיוב עבור ממשקי ה-API של Google שבהם משתמשים הפרויקטים שלכם.

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

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

כדי ליצור פרויקט DevConsole חדש:

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

  2. פותחים את Google Developer Console. אם זה הפרויקט הראשון שלכם, בתצוגה הראשית לחצן פשוט CREATE PROJECT:

    fig1

  3. לוחצים על הלחצן יצירת פרויקט. ב-DevConsole אפשר לראות את תיבת הדו-שיח New Project (פרויקט חדש):

    fig2

    מזינים שם מתאים לפרויקט החדש בקטע Project name (שם הפרויקט). שדה להזנת קלט. מתחת לשדה, DevConsole יוצר מזהה פרויקט עבורכם, והמזהה יהיה ייחודי בכל הפרויקטים. לדוגמה, אם מזינים "My New Project", DevConsole מקצה מזהה כמו my-new-project-266022

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

  5. משתמשים בתפריט הניווט כדי לבחור באפשרות APIs & שירותים > מרכז השליטה.

    fig3

    התמונה שלמטה מציגה את תפריט הניווט בפינה הימנית העליונה של ב-DevConsole. תופיע התצוגה של מרכז הבקרה של הפרויקט:

    fig4

למידע נוסף, קראו את המאמר ניהול פרויקטים בכלי המפתחים מסוף.

כשיוצרים פרויקט חדש, עדיין לא משויכים אליו ממשקי API. ב בשלב הבא, צריך להפעיל את Travel Partner API בפרויקט החדש.

שלב 2: מפעילים את Travel Partner API בפרויקט החדש

כדי להשתמש בממשקי ה-API של המלון, צריך להפעיל את Travel Partner API בפרויקט DevConsole החדש.

כדי להפעיל את ממשקי ה-API של מלונות בפרויקט החדש:

  1. עוברים לתצוגה Dashboard (לוח הבקרה) של הפרויקט כפי שמתואר למעלה.

  2. לוחצים על Enable APIs and Services. תוצג הודעת הפתיחה של ספריית ה-API הדף הזה.

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

  4. לוחצים על Travel Partner API בטבלת ממשקי ה-API התואמים. DevConsole מציגה תיאור של ה-API.

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

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

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

השלב הבא הוא יצירת חשבון שירות ויצירת מפתחות עבורו.

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

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

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

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

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

  2. לוחצים על הקישור Credentials in APIs and services.

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

  4. בתפריט הנפתח Service account, בוחרים באפשרות New service account.

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

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

  6. בוחרים באפשרות P12 לסוג המפתח, כפי שמוצג בהמשך. נדרש ערך P12.

    fig5

  7. לוחצים על הלחצן Create. DevConsole יוצר זוג מפתחות פרטיים/ציבוריים לפרויקט שלך. המפתח הפרטי נשמר במיקום ברירת המחדל הדפדפן מאחסן את ההורדות. עליכם להוריד את הפורמט .p12 (בינארי), בניגוד לפורמט הקובץ .json.

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

    בסיום היצירה של DevConsole תוצג ההודעה הבאה מפתחות:

    fig6

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

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

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

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

שלב 4: מעניקים לחשבון השירות גישה לנתונים שלכם ב-Hotel Center

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

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

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

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

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

    fig8

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

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

  5. בתפריט הנפתח, בוחרים באפשרות ניהול.

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

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

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

שימוש ב-OAuth 2.0

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

אסימוני גישה (שנקראים גם אסימונים למוכ"ז) הם חלק מפרוטוקול OAuth 2.0 רגילה. התחביר לציון אסימון גישה בכותרת HTTP הוא:

Authorization: Bearer *oauth2_access_token*

הדוגמה הבאה מציגה כותרות HTTP לדוגמה של בקשה שמקבלת גישה ממשק API של דוחות:

GET /travelpartner/v2.0/42000042/reports/top_opportunity_7_day HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer nd42.fdLSKkljD98344444444444lSDF42fdLSKkljD98344444444444lSDF42
Cache-Control: no-cache

כדי ליצור אסימון גישה, יוצרים אפליקציה בכל שפה. הדוגמה הבאה יוצרת את האסימון ב-Python. ואז אתם יכולים להשתמש האסימון בבקשות שלכם Authorization כותרות בגישה אל Travel Partner API.

#!/usr/bin/python2.7
#
""" Sample code to get an auth header that you can use in your HTTP requests
    1. Please see https://developers.google.com/api-client-library/python/start/installation
       to download and install the google-api-python-client package.
    2. Edit lines below marked _SERVICE_ACCOUNT, _KEY_FILE,  _PARTNER_NAME,
       and _API_VERSION.
    3. Run the program using: "python sample.py". The app returns the value that
       you use for the Authorization header's Bearer token in your request.
    4. Copy the token and use it in requests to the Travel Partner API.
       For example (2.0):
       https://www.googleapis.com/travelpartner/2.0/42000042/reports/budget
       For example (1.x):
       https://www.googleapis.com/travelpartner/1.2/reports?report_type=BUDGET
"""
import httplib2
import json
import os
import sys
import urllib

HAS_CRYPTO = False

from apiclient import discovery
from oauth2client.client import flow_from_clientsecrets
try:
  # Some systems may not have OpenSSL installed so can't use SignedJwtAssertionCredentials.
  from oauth2client.client import SignedJwtAssertionCredentials
  HAS_CRYPTO = True
except ImportError:
  print "Unable to import SignedJwtAssertionCredentials"

from oauth2client import tools
from oauth2client.file import Storage

# Authorization scope for our requests (do not change)
_DEFAULT_APISCOPE = 'https://www.googleapis.com/auth/travelpartner'

# Use the service account you set up in the Google Developers Platform.
# It will be of the form "gsaccount_name@project_name.google.com.iam.gserviceaccount.com".
_SERVICE_ACCOUNT = ('myserviceaccount@my-hotel-project.google.com.iam.gserviceaccount.com')

# Set this to the full path to your service account's private binary .p12 key file
# that you downloaded from the Google Developer's Console and stored in a secure place.
# DO NOT use the json version of the certificate.
_KEY_FILE = '../mylocaldir/api-keys/8482bb2bdb08.p12'

# Set this to the case-sensitive "Partner Key", NOT the account
# name in the Hotel Ads Center or the numeric partner ID.
# Check with your TAM if you do not know your "Partner Key" name.
_PARTNER_NAME = 'testpartner2'

class HotelAdsAPIConnection(object):
  def __init__(self, service_account=_SERVICE_ACCOUNT, key=_KEY_FILE, partner=_PARTNER_NAME):
    self.key_file = key
    self.account = service_account
    self.partner = partner

  def InitializeCredentials(self, scope):
    '''Get credentials for use in API requests.
    Generates service account credentials if the key file is present,
    and regular user credentials if the file is not found.
    '''
    if os.path.exists(self.key_file):
      if not HAS_CRYPTO:
        raise Exception("Unable to use cryptographic functions "
                        + "Try installing OpenSSL")
      with open (self.key_file, 'rb') as file:
        key = file.read();
      creds = SignedJwtAssertionCredentials(self.account, key, scope)
      self.credentials = creds

  def authorize(self):
    '''Construct a HTTP client that uses the supplied credentials.'''
    return credentials.authorize(httplib2.Http())

  def print_creds(self):
    '''Prints the Authorization header to use in HTTP requests.'''
    cred_dict = json.loads(self.credentials.to_json())

    if 'access_token' in cred_dict:
      print 'Authorization: Bearer %s' % (cred_dict['access_token'],)
    else:
      print 'creds: %s' % (cred_dict,)

  def GetConnection(self):
    http = httplib2.Http()
    self.credentials.refresh(http)
    http = self.credentials.authorize(http)
    self.print_creds()
    return http

def main(args):
  # Create an instance of the HotelAdsAPIConnection inner class
  api = HotelAdsAPIConnection()

  # Generate credentials
  api.InitializeCredentials(_DEFAULT_APISCOPE)

  # Output the Authorization header to use in HTTP requests
  api.GetConnection()

if __name__ == "__main__":
    main(sys.argv)</pre>

כשמפתחים את האפליקציה, חשוב לפעול לפי השיטות המומלצות לשימוש מאובטח במפתחות API.

הסקריפט לדוגמה של Python יוצר פלט של נושא הכותרת Authorization באסימון הבא,

$ python sample.py
Authorization: Bearer ya29.42424242sample_420icu8122KSvoh4T42cRoG3rW1lc0Q
$

שימוש בערך של האסימון בבקשות שלך. זה תקף למשך שעה אחרי היא ליצור אותו.

פתרון בעיות

נתקלת בבעיות? בדיקה מהירה של הפריטים הבאים עשויה לפתור את הבעיה את הבעיה.

  1. האם יצרתם פרויקט ב-Google Developer Console?
  2. האם מצאת את Travel Partner API והפעלת אותה?
  3. האם הורדת קובץ .p12 - מפתח פרטי לאחר לחיצה ליצור מזהה לקוח ולבחור באפשרות חשבון שירות?
  4. האם קיבלת כתובת אימייל של מזהה לקוח של חשבון שירות בטופס: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. האם שיתפת את חשבון Hotel Ads Center עם חשבון השירות על ידי לחיצה על על הלחצן שיתוף החשבון הזה?
  6. האם שלחת את כתובת האימייל של חשבון השירות ואת מזהה השותף שלך אל מנהל החשבונות הטכני (TAM)?
  7. האם הקריאות שלך ל-Travel Partner API מעבירות אסימון שהתקבל לאחרונה ב הכותרת Authorization?
  8. האם האסימון 'מנפיק' של הכותרת Authorization נוצר לפני יותר משעה?

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

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