API-Autorisierung

OAuth 2.0 zum Autorisieren Ihrer Anwendung verwenden beim Zugriff auf Hotel-APIs.

Einrichtung von OAuth 2.0

OAuth 2.0 erfordert, dass du dich mit einem Dienstkonto identifizierst die mit Ihrem Google-Konto verknüpft sind. Das Dienstkonto sendet Ihre private erhalten Sie ein OAuth 2.0-Zugriffstoken. Sie können dieses Token dann Aufrufe der Hotel-APIs für schreibgeschützte Daten wie Preise, Hotels und Diagnoseberichtsdaten zu Ihrem Hotelpreisfeed.

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

Der OAuth 2.0-Ansatz ist ähnlich wie beim bisherigen ClientLogin. mit den folgenden Unterschieden:

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

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 ein Tool für Entwickler von Google. zum Verwalten und Aufrufen von Verkehrsdaten, Authentifizierungs- und Zahlungsinformationen für die von Ihren Projekten verwendeten Google APIs.

In der DevConsole ist ein Projekt eine Sammlung von Einstellungen, Anmeldedaten und Metadaten der Anwendung(en), an der du gerade arbeitest. das Google Developer APIs und Google Cloud-Ressourcen nutzt.

In der DevConsole verwalten Sie diese Aspekte Ihres Projekts, z. B. API-Anmeldedaten generieren, APIs aktivieren sowie Team und Abrechnung verwalten Informationen, die mit Ihrem Projekt verknüpft sind.

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 ein Schaltfläche CREATE PROJECT (Projekt erstellen):

    fig1

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

    fig2

    Geben Sie im Feld Projektname einen Namen für das neue Projekt ein. Eingabefeld. Unter dem Feld generiert die DevConsole eine Projekt-ID für Sie. und dafür sorgen, dass die ID projektübergreifend eindeutig ist. Wenn Sie beispielsweise „My New Project“ eingeben, weist die DevConsole eine ID wie my-new-project-266022

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

  5. Wählen Sie im Navigationsmenü die Option APIs und Dienste > Dashboard:

    fig3

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

    fig4

Weitere Informationen finden Sie unter Projekte verwalten auf der Seite „Entwickler“ Console

Wenn Sie ein neues Projekt erstellen, sind ihm noch keine APIs zugeordnet. Im 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. Daraufhin wird die Willkommensnachricht der API-Bibliothek angezeigt. Seite.

  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. 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 Aktivieren und Deaktivieren APIs

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 eine Webanwendung und Ihre Hoteldaten.

So erstellen und konfigurieren Sie ein Dienstkonto:

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

    In der Ansicht Anmeldedaten werden die Client-IDs und Anmeldedaten für Ihre Projekt arbeiten. Ihre Anwendung verwendet die Client-ID bei der Anforderung eines OAuth 2.0-Zugriffstoken. Neue Projekte haben keine Clients oder Anmeldedaten noch nicht.

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

  3. Klicken Sie auf Anmeldedaten erstellen und wählen Sie Dienstkontoschlüssel aus. im Drop-down-Menü 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 eingeben, die Konto-ID muss jedoch eindeutig sein in allen Projekten. Die DevConsole generiert eine eindeutige Konto-ID für Sie. basierend auf dem eingegebenen Namen.

  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 Paar aus privatem und öffentlichem Schlüssel für Ihr Projekt. Der private Schlüssel wird an dem Standardspeicherort gespeichert, in Ihrem Browser Downloads gespeichert werden. Sie müssen die .p12-Format (binär) im Gegensatz zum Dateiformat .json.

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

    Die DevConsole zeigt den folgenden Hinweis an, wenn die Generierung des Schlüssel:

    fig6

  8. Klicken Sie auf die Schaltfläche OK. Die DevConsole kehrt zur Ansicht Anmeldedaten Um die Details zu Ihrem Dienstkonto und die mit Ihrem Projekt verknüpften Dienstkonten anzeigen möchten, klicken Sie auf Verwalten Dienstkonten in dieser Ansicht.

    Dem Dienstkonto sind jetzt die folgenden Anmeldedaten zugeordnet:

    • Client-ID: Eine eindeutige Kennung, die Ihre Anwendung verwendet, wenn: ein OAuth 2.0-Zugriffstoken anfordert.
    • E-Mail-Adresse:Eine für das Dienstkonto in das Formular account_name@account_name.google.com.iam.gserviceaccount.com
    • Zertifikat-Fingerabdrücke:Die ID des privaten Schlüssels, den Sie heruntergeladen.

Weitere Informationen finden Sie unter OAuth 2.0 für Server verwenden, um Serveranwendungen.

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

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

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

Wenn Sie nicht über die erforderlichen Zugriffsrechte zum Hinzufügen von Nutzern zum Konto verfügen, wenden Sie sich an den Das Google Hotels-Team über das Kontaktformular, um die Inhaberschaft für in Ihrem Konto. 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 verknüpfen und Google Ads

  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 sie zu öffnen. Freigabedialogfeld öffnen.

    fig8

  3. Geben Sie im Feld Weitere Personen hinzufügen die E-Mail-Adresse des Dienstes ein. Konto, 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 24 Stunden für den API-Zugriff aktiviert werden.

Nachdem Google Sie darüber informiert hat, dass der API-Zugriff für Ihren Dienst 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 gegenüber Google mit den der generierten E-Mail-Adresse und des privaten Schlüssels des Dienstkontos. Google Authentifizierungsmechanismus diesen Schlüssel gegen ein OAuth 2.0-Zugriffstoken übergeben Sie den Authorization-Header in den API-Aufrufen Ihrer App.

Zugriffstokens (auch Inhabertokens genannt) sind Teil von OAuth 2.0. Standard. 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 den 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 eine Anwendung in einer beliebigen Sprache, um ein Zugriffstoken zu generieren. Im folgenden Beispiel wird das Token in Python generiert. Sie können diese in Ihren Anfragen Authorization-Header beim Zugriff auf 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>

Befolgen Sie bei der Entwicklung Ihrer Anwendung die Best Practices für die sichere Verwendung von API-Schlüsseln.

Das Python-Beispielskript gibt den Träger eines Authorization-Headers aus Token, wie im folgenden Beispiel gezeigt:

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

Verwenden Sie den Wert des Tokens in Ihren Anfragen. Er ist 1 Stunde lang gültig, nachdem Sie generieren.

Fehlerbehebung

Treten Probleme auf? Eine schnelle Überprüfung der folgenden Punkte könnte das Problem möglicherweise lösen das Problem zu lösen.

  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? Das ist ein privater Schlüssel, nachdem Sie darauf geklickt haben. Client-ID erstellen und Dienstkonto auswählen?
  4. Haben Sie die Client-ID-E-Mail-Adresse des Dienstkontos eines Formulars 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 Schaltfläche Dieses Konto freigeben?
  6. Haben Sie die E-Mail-Adresse des Dienstkontos und Ihre Partner-ID an Technical Account Manager (TAM)?
  7. Wird bei Ihren Travel Partner API-Aufrufen ein kürzlich erhaltenes Token im Authorization-Header?
  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 Das kann verschiedene Gründe haben. Wenn dieser Fehler auftritt, prüfen Sie Folgendes: <ph type="x-smartling-placeholder">
    </ph>
  • Du hast einen Authorization-Header mit einem gültigen Inhaber angegeben Token.
  • 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 partner-Element Abfragestringparameter). Der Wert ist Ihre eindeutige Partner-ID, nicht Ihre Name des Partners, der im Hotel Ads Center angezeigt wird. Wenn Sie Ihren Partner nicht kennen ID erhalten, wenden Sie sich an Ihren Technical Account Manager (TAM).
Not found Der Endpunkt ist höchstwahrscheinlich fehlerhaft. Überprüfen Sie, ob Sie ein GET-Anforderung gesendet werden, und dass die Anfrage-URL gültig ist (sie der API-Syntax, auf die Sie zugreifen möchten).
Invalid string value Mindestens ein Teil des Endpunkts enthält eine ungültige Syntax. Beispiel: haben Sie einen Teil des Pfads möglicherweise falsch geschrieben. Prüfen Sie, ob Sie den richtigen Unterstriche, Groß- und Kleinschreibung und Formulierungen im gesamten Pfad verwenden.
Unsupported output format Dieser Fehler tritt am häufigsten bei Verwendung der Reports API auf. Du musst Geben Sie "alt=csv" in der URL Ihrer GET an. JSON wird von der Reports API nicht unterstützt.
AccessTokenRefreshError/Invalid grant Beim Ausführen der Python-Beispielanwendung kann dieser Fehler durch folgende Ursachen verursacht werden: zu verwenden: <ph type="x-smartling-placeholder">
    </ph>
  • Die E-Mail-Adresse Ihres Dienstkontos ist falsch. Sieh in der E-Mail nach in der Google Developer Console und vergewissern Sie sich, dass es zum Zugriff auf das der API erstellen.
  • Die E-Mail-Adresse hat keinen API-Zugriff. Prüfen Sie, ob die E-Mail Adresse berechtigt ist, auf Ihre Hoteldaten zuzugreifen, die über das Hotel Center freigegeben wurden.
  • Die Schlüsseldatei ist nicht die richtige für das Dienstkonto. Verwenden Sie die Methode die DevConsole herunter, um ein neues .p12-Zertifikat herunterzuladen. dass Ihre Python-App auf die richtige Seite verweist.
HotelAdsAPIConnection object has no attribute credentials Wenn Sie die Python-Beispielanwendung ausführen, ändert sich der Pfad zu Ihrer .p12. Datei ist falsch.
Invalid scope Beim Ausführen der Python-Beispielanwendung muss der API-Bereich https://www.googleapis.com/auth/travelpartner
Forbidden Sie haben keine Autorisierung für die Konto-ID. um darauf zuzugreifen. Wenn Sie Inhaber eines Unterkontos sind, können Sie möglicherweise nicht auf die ID des übergeordneten oder Stammkontos.