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:
Neues Projekt in der Google Developers Console (DevConsole) erstellen
Aktivieren Sie den Zugriff auf die Travel Partner API für das neue Projekt.
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:
Melden Sie sich in Ihrem Gmail-/Google-Konto an.
Öffnen Sie die Google Developer Console. Wenn dies Ihr erstes Projekt ist, wird in der Hauptansicht ein Schaltfläche CREATE PROJECT (Projekt erstellen):
Klicken Sie auf die Schaltfläche PROJEKT ERSTELLEN. Die DevConsole zeigt die Dialogfeld Neues Projekt:
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
Klicken Sie auf die Schaltfläche Erstellen, um Ihr neues Projekt zu erstellen.
Wählen Sie im Navigationsmenü die Option APIs und Dienste > Dashboard:
Das Bild unten zeigt das Navigationsmenü oben links im der DevConsole. Die Ansicht Dashboard für Ihr Projekt wird angezeigt:
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:
Rufen Sie wie oben beschrieben die Dashboard-Ansicht Ihres Projekts auf.
Klicken Sie auf APIs und Dienste aktivieren. Daraufhin wird die Willkommensnachricht der API-Bibliothek angezeigt. Seite.
Geben Sie im Suchfeld Travel Partner API ein. Die Google API Console zeigt eine Liste von APIs an, die Ihrer Eingabe entsprechen.
Klicken Sie in der Tabelle der übereinstimmenden APIs auf Travel Partner API. DevConsole zeigt eine Beschreibung der API an.
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:
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.
Klicken Sie auf den Link Anmeldedaten in APIs und Diensten.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie Dienstkontoschlüssel aus. im Drop-down-Menü aus. Die Ansicht Dienstkontoschlüssel erstellen wird angezeigt.
Wählen Sie im Drop-down-Menü Dienstkonto die Option Neues Dienstkonto aus.
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.
Wählen Sie wie unten gezeigt P12 als Schlüsseltyp aus. P12 ist erforderlich.
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:
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
Öffnen Sie das Hotel Center in einem neuen Browserfenster.
Klicken Sie im Banner Hotel Center by Google auf das Symbol zum Hinzufügen von Nutzern, um sie zu öffnen. Freigabedialogfeld öffnen.
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.
Lassen Sie die Option Personen benachrichtigen aktiviert.
Wählen Sie im Drop-down-Menü Verwalten aus.
Klicke auf Einladen.
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.
- Haben Sie ein Projekt in der Google Developer Console erstellt?
- Haben Sie die Travel Partner API gefunden und aktiviert?
- Haben Sie eine
.p12
-Datei heruntergeladen? Das ist ein privater Schlüssel, nachdem Sie darauf geklickt haben. Client-ID erstellen und Dienstkonto auswählen? - Haben Sie die Client-ID-E-Mail-Adresse des Dienstkontos eines Formulars erhalten?
nnnnnnn@app_name.google.com.iam.gserviceaccount.com
? - Haben Sie Ihr Hotel Ads Center-Konto für das Dienstkonto freigegeben, indem Sie auf Schaltfläche Dieses Konto freigeben?
- Haben Sie die E-Mail-Adresse des Dienstkontos und Ihre Partner-ID an Technical Account Manager (TAM)?
- Wird bei Ihren Travel Partner API-Aufrufen ein kürzlich erhaltenes Token im
Authorization
-Header? - 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">
|
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">
|
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. |