API-Autorisierung

Verwenden Sie OAuth 2.0, um Ihre Anwendung beim Zugriff auf die Hotel-APIs zu autorisieren.

Einrichtung von OAuth 2.0

Für OAuth 2.0 musst du dich mit einem Dienstkonto identifizieren, das mit deinem Google-Konto verknüpft ist. Das Dienstkonto sendet Ihren privaten Schlüssel als Gegenleistung für ein OAuth 2.0-Zugriffstoken. Sie können dieses Token dann in Aufrufen der Hotel-APIs für schreibgeschützte Daten verwenden, z. B. Preis-, Hotel- und Diagnoseberichtsdaten zu Ihrem Hotelpreisfeed.

Zugriffstokens sind für eine Stunde (3.600 Sekunden) gültig.

Wenn Sie ClientLogin bereits implementiert haben, ist der Ansatz für OAuth 2.0 ähnlich, mit den folgenden Unterschieden:

  • Ihre Anwendung greift über ein Google-Dienstkonto auf die API zu.
  • Beim Aufrufen von APIs übergeben Sie ein OAuth 2.0-Zugriffstoken im HTTP-Header Authorization.

Führe die folgenden Schritte aus, um dein Konto für die Verwendung von OAuth 2.0 mit dem Travel Partner API einzurichten:

  1. Neues Projekt in der Google Developers Console (DevConsole) erstellen

  2. Aktivieren Sie den Zugriff auf die Travel Partner API für das neue Projekt.

  3. Dienstkonto und Anmeldedaten erstellen

  4. Ihrem Dienstkonto Zugriff auf Ihre Hoteldaten gewähren

Jeder dieser Schritte wird in den folgenden Abschnitten beschrieben.

Schritt 1: Neues DevConsole-Projekt erstellen

Die Google Developers Console („DevConsole“) ist eine Entwicklerplattform von Google zum Verwalten und Aufrufen von Traffic-, Authentifizierungs- und Abrechnungsinformationen für die Google APIs, die von Ihren Projekten verwendet werden.

In der DevConsole ist ein Projekt eine Sammlung von Einstellungen, Anmeldedaten und Metadaten für die Anwendung oder Anwendungen, an denen Sie arbeiten und die Google Developer APIs und Google Cloud-Ressourcen verwenden.

In der DevConsole verwalten Sie diese Aspekte Ihres Projekts. Sie können z. B. API-Anmeldedaten generieren, APIs aktivieren und Team- und Abrechnungsinformationen im Zusammenhang mit Ihrem Projekt verwalten.

So erstellen Sie ein neues DevConsole-Projekt:

  1. Melden Sie sich in Ihrem Gmail-/Google-Konto an.

  2. Öffnen Sie die Google Developer Console. Wenn dies Ihr erstes Projekt ist, wird in der Hauptansicht eine einfache Schaltfläche PROJEKT ERSTELLEN angezeigt:

    fig1

  3. Klicken Sie auf die Schaltfläche PROJEKT ERSTELLEN. Die DevConsole zeigt das Dialogfeld Neues Projekt an:

    fig2

    Geben Sie im Eingabefeld Projektname einen Namen für das neue Projekt ein. Unter dem Feld generiert die DevConsole eine Projekt-ID für Sie. Dadurch wird sichergestellt, dass diese ID projektübergreifend eindeutig ist. Wenn Sie beispielsweise „Mein neues Projekt“ eingeben, weist die DevConsole eine ID wie my-new-project-266022 zu.

  4. Klicken Sie auf die Schaltfläche Erstellen, um Ihr neues Projekt zu erstellen.

  5. Wählen Sie im Navigationsmenü APIs und Dienste > Dashboard aus.

    fig3

    Das Bild unten zeigt das Navigationsmenü oben links in der DevConsole. Daraufhin wird die Ansicht Dashboard für Ihr Projekt angezeigt:

    fig4

Weitere Informationen finden Sie unter Projekte in der Developers Console verwalten.

Wenn Sie ein neues Projekt erstellen, sind ihm noch keine APIs zugeordnet. Im nächsten Schritt aktivieren Sie die Travel Partner API für Ihr neues Projekt.

Schritt 2: Travel Partner API für das neue Projekt aktivieren

Wenn Sie die Hotel-APIs verwenden möchten, müssen Sie Travel Partner API in Ihrem neuen DevConsole-Projekt aktivieren.

So aktivieren Sie die Hotel-APIs für Ihr neues Projekt:

  1. Rufen Sie wie oben beschrieben die Dashboard-Ansicht Ihres Projekts auf.

  2. Klicken Sie auf APIs und Dienste aktivieren. Die Begrüßungsseite der API-Bibliothek wird angezeigt.

  3. Geben Sie im Suchfeld Travel Partner API ein. Die Google API Console zeigt eine Liste von APIs an, die Ihrer Eingabe entsprechen.

  4. Klicken Sie in der Tabelle der übereinstimmenden APIs auf Travel Partner API. Die DevConsole zeigt eine Beschreibung der API an.

  5. Klicken Sie auf die Schaltfläche API aktivieren, um diese API für Ihr Projekt zu aktivieren.

Weitere Informationen finden Sie unter APIs aktivieren und deaktivieren.

Die Hotel APIs sind jetzt für das neue Projekt Ihres Google-Kontos aktiviert.

Im nächsten Schritt erstellen Sie ein Dienstkonto und generieren dafür Schlüssel.

Schritt 3: Dienstkonto mit Anmeldedaten erstellen

Dienstkonten werden für Interaktionen zwischen Servern verwendet, z. B. zwischen einer Webanwendung und Ihren Hoteldaten.

So erstellen und konfigurieren Sie ein Dienstkonto:

  1. Klicken Sie in der Hauptansicht der Google API Console im linken Navigationsmenü auf Anmeldedaten. Die DevConsole zeigt die Ansicht Anmeldedaten an.

    In der Ansicht Anmeldedaten werden die Client-IDs und Anmeldedaten für Ihr Projekt angezeigt. Die Anwendung verwendet die Client-ID, um ein OAuth 2.0-Zugriffstoken anzufordern. Neue Projekte haben noch keine Clients oder Anmeldedaten.

  2. Klicken Sie auf den Link Anmeldedaten in APIs und Diensten.

  3. Klicken Sie auf die Schaltfläche Anmeldedaten erstellen und wählen Sie im Drop-down-Menü die Option Dienstkontoschlüssel aus. Die Ansicht Dienstkontoschlüssel erstellen wird angezeigt.

  4. Wählen Sie im Drop-down-Menü Dienstkonto die Option Neues Dienstkonto aus.

  5. Geben Sie einen Dienstkontonamen und eine Dienstkonto-ID ein.

    Sie können den Namen beliebig wählen, die Konto-ID muss jedoch projektübergreifend eindeutig sein. Die DevConsole generiert eine eindeutige Konto-ID, die auf dem von Ihnen eingegebenen Namen basiert.

  6. Wählen Sie wie unten gezeigt P12 als Schlüsseltyp aus. P12 ist erforderlich.

    fig5

  7. Klicken Sie auf Erstellen. Die DevConsole generiert ein Schlüsselpaar aus privatem und öffentlichem Schlüssel für Ihr Projekt. Der private Schlüssel wird an dem Standardspeicherort Ihres Browsers für Downloads gespeichert. Laden Sie das .p12-Format (binär) und nicht das .json-Dateiformat herunter.

    Sie verwenden den privaten Schlüssel in Ihren Skripts oder anderen Anwendungen, die auf den Travel Partner API zugreifen.

    Die DevConsole zeigt die folgende Meldung an, wenn die Schlüssel generiert wurden:

    fig6

  8. Klicken Sie auf die Schaltfläche OK. Die DevConsole kehrt zur Ansicht Anmeldedaten zurück. Klicken Sie in dieser Ansicht auf Dienstkonten verwalten, um die Details zu Ihrem Dienstkonto zu bestätigen und die mit Ihrem Projekt verknüpften Dienstkonten aufzurufen.

    Dem Dienstkonto sind jetzt die folgenden Anmeldedaten zugeordnet:

    • Client-ID:Eine eindeutige Kennung, mit der Ihre Anwendung ein OAuth 2.0-Zugriffstoken anfordert.
    • E-Mail-Adresse:Eine für das Dienstkonto im Format account_name@account_name.google.com.iam.gserviceaccount.com erstellte E-Mail-Adresse.
    • Zertifikat-Fingerabdrücke: Die ID des privaten Schlüssels, den Sie heruntergeladen haben.

Weitere Informationen finden Sie unter OAuth 2.0 für Server-zu-Server-Anwendungen verwenden.

Schritt 4: Dem Dienstkonto Zugriff auf Ihre Hotel Center-Daten gewähren

Im letzten Schritt gewähren Sie dem neuen Dienstkonto Zugriff auf Ihr Hotel Center. Das Dienstkonto wird durch die E-Mail-Adresse identifiziert, die Sie im vorherigen Schritt erstellt haben. Der Zugriff auf dieses Konto wird über die Freigabeeinstellungen im Hotel Center gewährt.

So gewähren Sie einem Dienstkonto Zugriff auf Ihre Hotel Center-Daten:

Wenn Sie nicht die erforderlichen Zugriffsrechte haben, um dem Konto Nutzer hinzuzufügen, wenden Sie sich über das Kontaktformular an das Google Hotels-Team und beantragen Sie, die Inhaberschaft für Ihr Konto einzurichten. Sie können beantragen, dass eine oder mehrere E-Mail-Adressen an einen Inhaber gesendet werden. Weitere Informationen zum Zugriff auf das Hotel Center finden Sie unter Hotel Center und Google Ads verknüpfen.

  1. Öffnen Sie das Hotel Center in einem neuen Browserfenster. fig7

  2. Klicken Sie im Banner Hotel Center by Google auf das Symbol zum Hinzufügen von Nutzern, um das Freigabedialogfeld zu öffnen.

    fig8

  3. Geben Sie im Feld Weitere Personen hinzufügen die E-Mail-Adresse des Dienstkontos ein, das Sie Ihrem Hotel Center hinzufügen möchten.

  4. Lassen Sie die Option Personen benachrichtigen aktiviert.

  5. Wählen Sie im Drop-down-Menü Verwalten aus.

  6. Klicke auf Einladen.

  7. Nachdem Sie Ihrem Hotel Center Nutzer hinzugefügt haben, sollte Ihr Dienstkonto innerhalb von etwa 24 Stunden für den API-Zugriff aktiviert werden.

Nachdem Sie von Google darüber informiert wurden, dass der API-Zugriff für Ihr Dienstkonto aktiviert wurde, können Sie mit OAuth auf die API zugreifen.

Verwenden von OAuth 2.0

Damit Sie auf die API zugreifen können, muss sich Ihre Anwendung mit der vom Dienstkonto generierten E-Mail-Adresse und dem privaten Schlüssel gegenüber Google identifizieren. Durch den Authentifizierungsmechanismus von Google wird dieser Schlüssel gegen ein OAuth 2.0-Zugriffstoken ausgetauscht, das Sie bei den API-Aufrufen Ihrer Anwendung im Authorization-Header übergeben.

Zugriffstokens (auch als Inhabertokens bezeichnet) sind Teil des OAuth 2.0-Standards. Die Syntax zum Angeben eines Zugriffstokens in einem HTTP-Header lautet:

Authorization: Bearer *oauth2_access_token*

Das folgende Beispiel zeigt Beispiel-HTTP-Header einer Anfrage, die auf die Reports API zugreift:

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

Erstellen Sie eine Anwendung in einer beliebigen Sprache, um ein Zugriffstoken zu generieren. Im folgenden Beispiel wird das Token in Python generiert. Sie können dieses Token dann in den Authorization-Headern Ihrer Anfragen verwenden, wenn Sie auf Travel Partner API zugreifen.

#!/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>

Halten Sie sich bei der Entwicklung Ihrer Anwendung an die Best Practices zur sicheren Verwendung von API-Schlüsseln.

Das Python-Beispielskript gibt das Inhabertoken eines Authorization-Headers aus, wie das folgende Beispiel zeigt:

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

Verwenden Sie den Wert des Tokens in Ihren Anfragen. Nach der Generierung ist eine Stunde lang gültig.

Fehlerbehebung

Treten Probleme auf? Eine kurze Überprüfung der folgenden Punkte könnte das Problem möglicherweise beheben.

  1. Haben Sie ein Projekt in der Google Developer Console erstellt?
  2. Haben Sie die Travel Partner API gefunden und aktiviert?
  3. Haben Sie eine .p12-Datei heruntergeladen – einen privaten Schlüssel, nachdem Sie auf Client-ID erstellen geklickt und Dienstkonto ausgewählt haben?
  4. Haben Sie die Client-ID-E-Mail-Adresse des Dienstkontos mit folgendem Formular erhalten: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Haben Sie Ihr Hotel Ads Center-Konto für das Dienstkonto freigegeben, indem Sie auf die Schaltfläche Dieses Konto teilen geklickt haben?
  6. Haben Sie die E-Mail-Adresse des Dienstkontos und Ihre Partner-ID an Ihren Technical Account Manager (TAM) gesendet?
  7. Wird bei Ihren Travel Partner API-Aufrufen ein kürzlich erhaltenes Token an den Authorization-Header übergeben?
  8. Ist das Inhabertoken des Authorization-Headers älter als 1 Stunde?

In der folgenden Tabelle sind einige häufige Fehler und mögliche Lösungen aufgeführt:

Fehler Beschreibung
Invalid credentials Dies kann verschiedene Gründe haben. Prüfen Sie in diesem Fall Folgendes:
  • Sie haben einen Authorization-Header mit einem gültigen Inhabertoken angegeben.
  • Das Inhabertoken ist weniger als eine Stunde alt. Ein Token ist nur für eine Stunde gültig.
  • Sie haben den richtigen Partnernamen mit dem Abfragestringparameter partner angegeben. Der Wert ist Ihre eindeutige Partner-ID und nicht Ihr Partnername, der im Hotel Ads Center angezeigt wird. Wenn Sie Ihre Partner-ID nicht kennen, wenden Sie sich an Ihren Technical Account Manager (TAM).
Not found Der Endpunkt ist höchstwahrscheinlich fehlerhaft. Prüfe, ob du eine GET-Anfrage sendest und ob die Anfrage-URL gültig ist (sie entspricht der API-Syntax, auf die du zugreifen möchtest).
Invalid string value Mindestens ein Teil des Endpunkts enthält eine ungültige Syntax. Dies kann beispielsweise der Fall sein, wenn Sie einen Teil des Pfads falsch geschrieben haben. Prüfen Sie, ob Sie im gesamten Pfad die Unterstriche, Groß- und Kleinschreibung und den Wortlaut richtig verwendet haben.
Unsupported output format Dieser Fehler tritt am häufigsten bei Verwendung der Reports API auf. Sie müssen "alt=csv" in der URL Ihrer GET-Anfrage angeben. JSON wird von der Reports API nicht unterstützt.
AccessTokenRefreshError/Invalid grant Beim Ausführen der Python-Beispielanwendung kann dieser Fehler folgende Ursachen haben:
  • Die E-Mail-Adresse Ihres Dienstkontos ist falsch. Prüfe, ob das E-Mail-Konto in der Google Developer Console zum Zugriff auf die API berechtigt ist.
  • Die E-Mail-Adresse hat keinen API-Zugriff. Prüfen Sie, ob die E-Mail-Adresse berechtigt ist, auf Ihre Hoteldaten zuzugreifen (geteilt über das Hotel Center).
  • Die Schlüsseldatei ist nicht die richtige für das Dienstkonto. Laden Sie mit der DevConsole ein neues .p12-Zertifikat herunter und achten Sie darauf, dass Ihre Python-App auf das richtige Zertifikat verweist.
HotelAdsAPIConnection object has no attribute credentials Beim Ausführen der Python-Beispielanwendung ist der Pfad zu Ihrer .p12-Datei falsch.
Invalid scope Wenn Sie die Python-Beispielanwendung ausführen, muss der API-Bereich https://www.googleapis.com/auth/travelpartner sein.
Forbidden Sie haben keine Zugriffsberechtigung für die Konto-ID, die Sie verwenden. Wenn Sie Inhaber eines Unterkontos sind, können Sie möglicherweise nicht auf die ID des übergeordneten oder Stammkontos zugreifen.