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 müssen Sie sich mithilfe eines Dienstkontos identifizieren, das mit Ihrem Google-Konto verknüpft ist. Das Dienstkonto sendet Ihren privaten Schlüssel, um ein OAuth 2.0-Zugriffstoken zu erhalten. Sie können dieses Token dann in Aufrufen der Hotel-APIs für schreibgeschützte Daten verwenden, z. B. zu Preis-, Hotel- und Diagnoseberichtsdaten zu Ihrem Hotelpreisfeed.

Zugriffstokens gelten für eine Stunde (3.600 Sekunden).

Der OAuth 2.0-Ansatz ist ähnlich, wenn Sie bereits ClientLogin implementiert haben. Es gibt jedoch folgende Unterschiede:

  • 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.

So richtest du dein Konto für die Verwendung von OAuth 2.0 mit Travel Partner API ein:

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

  2. Zugriff auf Travel Partner API für das neue Projekt aktivieren

  3. Dienstkonto und zugehörige Anmeldedaten erstellen

  4. Dem 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 zum Verwalten und Aufrufen von Traffic-Daten, Authentifizierungs- und Abrechnungsinformationen für die Google APIs, die in Ihren Projekten verwendet werden.

In der DevConsole ist ein Projekt eine Sammlung von Einstellungen, Anmeldedaten und Metadaten zu den 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 generieren dort beispielsweise API-Anmeldedaten, aktivieren APIs und verwalten die mit Ihrem Projekt verknüpften Team- und Rechnungsinformationen.

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 die 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 Ihr neues Projekt ein. Unterhalb des Felds generiert die DevConsole eine Projekt-ID für Sie, damit die ID für alle Projekte 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 & Dienste > Dashboard aus.

    fig3

    Die folgende Abbildung zeigt das Navigationsmenü oben links in der DevConsole. Hier wird die Dashboard-Ansicht 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 Travel Partner API für Ihr neues Projekt.

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

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

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

  1. Wechseln Sie wie oben beschrieben zur Dashboard-Ansicht Ihres Projekts.

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

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

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

  5. Klicken Sie auf die Schaltfläche API aktivieren, um die 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 erstellen und Anmeldedaten generieren

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. Ihre Anwendung verwendet die Client-ID zur Anforderung eines Zugriffstokens für OAuth 2.0. Neue Projekte haben noch keine Clients oder Anmeldedaten.

  2. Klicken Sie auf den Link Anmeldedaten unter „APIs und Dienste“.

  3. Klicken Sie auf die Schaltfläche Anmeldedaten erstellen und wählen Sie im Drop-down-Menü 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 einen beliebigen Namen verwenden, die Konto-ID muss jedoch für alle Projekte eindeutig sein. Die DevConsole generiert anhand des eingegebenen Namens eine eindeutige Konto-ID.

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

    fig5

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

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

    Wenn die Schlüsselgenerierung abgeschlossen ist, wird in der DevConsole folgender Hinweis angezeigt:

    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 Ihres Dienstkontos 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, die Ihre Anwendung zum Anfordern eines OAuth 2.0-Zugriffstokens verwendet.
    • E-Mail-Adresse:Eine generierte E-Mail-Adresse für das Dienstkonto im Format account_name@account_name.google.com.iam.gserviceaccount.com.
    • 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 erteilt.

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

Wenn Sie nicht die entsprechenden Zugriffsrechte haben, um dem Konto Nutzer hinzuzufügen, wenden Sie sich über das Kontaktformular an das Google Hotels-Team und bitten Sie uns, 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 „Nutzer hinzufügen“, 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 die Schaltfläche 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 ist, 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 generierten E-Mail-Adresse und dem privaten Schlüssel des Dienstkontos bei Google identifizieren. Durch den Authentifizierungsmechanismus von Google wird dieser Schlüssel gegen ein OAuth 2.0-Zugriffstoken eingetauscht, das Sie bei den API-Aufrufen Ihrer Anwendung an den 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 die HTTP-Beispielheader einer Anfrage zum Zugriff auf die Reports 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

Erstellen Sie zum Generieren eines Zugriffstokens eine Anwendung in einer beliebigen Sprache. 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>

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

Im Python-Beispielskript wird das Inhabertoken eines Authorization-Headers ausgegeben, wie im folgenden Beispiel gezeigt:

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

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

Fehlerbehebung

Treten Probleme auf? Die folgenden Punkte können Ihnen helfen, das Problem zu lösen.

  1. Haben Sie ein Projekt in der Google Developer Console erstellt?
  2. Haben Sie Travel Partner API gefunden und aktiviert?
  3. Haben Sie eine .p12-Datei heruntergeladen, also einen privaten Schlüssel, nachdem Sie auf Client-ID erstellen geklickt und Dienstkonto ausgewählt hatten?
  4. Haben Sie eine E-Mail-Adresse mit der Client-ID eines Dienstkontos mit dem Formular nnnnnnn@app_name.google.com.iam.gserviceaccount.com erhalten?
  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 im Authorization-Header übergeben?
  8. Ist das Inhabertoken des Authorization-Headers älter als eine Stunde?

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

Fehler Beschreibung
Invalid credentials Das kann verschiedene Gründe haben. Wenn dieser Fehler auftritt, prüfen Sie, ob Folgendes zutrifft:
  • 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 angegeben (mit dem Abfragestringparameter partner). Der Wert ist Ihre eindeutige Partner-ID und nicht der 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 formatiert. Prüfen Sie, ob Sie eine GET-Anfrage senden und ob die Anfrage-URL gültig ist. Sie entspricht der API-Syntax, auf die Sie zugreifen möchten.
Invalid string value Mindestens ein Teil des Endpunkts enthält eine ungültige Syntax. Vielleicht haben Sie einen Teil des Pfads falsch geschrieben. Prüfen Sie, ob Sie im gesamten Pfad die Unterstriche, die 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. Die Reports API unterstützt kein JSON.
AccessTokenRefreshError/Invalid grant Wenn Sie die Python-Beispielanwendung ausführen, kann dieser Fehler folgende Ursachen haben:
  • Die E-Mail-Adresse Ihres Dienstkontos ist falsch. Sehen Sie in der Google Developer Console nach, ob das E-Mail-Konto für den Zugriff auf die API autorisiert ist.
  • Die E-Mail-Adresse hat keinen API-Zugriff. Prüfen Sie, ob die E-Mail-Adresse berechtigt ist, auf Ihre Hoteldaten zuzugreifen (über das Hotel Center freigegeben).
  • 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-Anwendung auf das richtige Zertifikat verweist.
HotelAdsAPIConnection object has no attribute credentials Wenn Sie die Python-Beispielanwendung ausführen, 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 Die von Ihnen verwendete Konto-ID ist für Sie nicht autorisiert. Wenn Sie Inhaber eines Unterkontos sind, können Sie möglicherweise nicht auf die ID des übergeordneten oder Stammkontos zugreifen.