Utilizza OAuth 2.0 per autorizzare la tua applicazione quando si accede alle API degli hotel.
Impostazione OAuth 2.0
OAuth 2.0 richiede di identificarti utilizzando un account di servizio associati al tuo Account Google. L'account di servizio invia i dati in cambio di un token di accesso OAuth 2.0. Puoi quindi utilizzare questo token Chiamate alle API hotel per dati di sola lettura, come prezzi, hotel e i dati dei report diagnostici relativi al feed prezzo dell'hotel.
I token di accesso sono validi per un'ora (3600 secondi).
Se in precedenza hai implementato ClientLogin, l'approccio per OAuth 2.0 è simile, con le seguenti differenze:
- L'applicazione utilizza un account di servizio Google per accedere all'API.
- Passi un token di accesso OAuth 2.0 nell'intestazione HTTP
Authorization
quando che chiama le API.
Per configurare il tuo account in modo che utilizzi OAuth 2.0 con Travel Partner API, segui questi passaggi:
Creare un nuovo progetto nella Google Developers Console (DevConsole)
Consentire all'account di servizio di accedere ai dati degli hotel
Ciascuno di questi passaggi è descritto nelle sezioni seguenti.
Passaggio 1: crea un nuovo progetto DevConsole
La Google Developers Console ("DevConsole") è l'esperienza degli sviluppatori di Google per la gestione e la visualizzazione dei dati sul traffico, sull'autenticazione e sulla fatturazione per le API di Google utilizzate dai tuoi progetti.
In DevConsole, un progetto è una raccolta di impostazioni, credenziali, e i metadati relativi all'applicazione o alle applicazioni su cui stai lavorando che utilizza API Google Developers e risorse Google Cloud.
In DevConsole puoi gestire alcuni aspetti del tuo progetto, generazione di credenziali API, attivazione delle API e gestione del team e della fatturazione associate al progetto.
Per creare un nuovo progetto DevConsole:
Accedi al tuo account Gmail o Google.
Apri la Google Developers Console. Se questo è il tuo primo progetto, la vista principale mostra semplice pulsante CREA PROGETTO:
Fai clic sul pulsante CREA PROGETTO. In DevConsole viene visualizzata la Finestra di dialogo Nuovo progetto:
Inserisci un nome intuitivo per il nuovo progetto in Nome progetto campo di immissione. Sotto il campo, DevConsole genera un ID progetto, garantendo che l'ID sia univoco in tutti i progetti. Ad esempio, se inserisci "Il mio nuovo progetto", DevConsole assegna un ID come
my-new-project-266022
.Fai clic sul pulsante Crea per creare il nuovo progetto.
Utilizza il menu di navigazione per selezionare API e Servizi > Fitbit.com.
L'immagine seguente mostra il menu di navigazione in alto a sinistra di in DevConsole. Viene visualizzata la Dashboard per il tuo progetto:
Per ulteriori informazioni, consulta l'articolo sulla gestione dei progetti nella sezione Google Cloud.
Quando crei un nuovo progetto, non ha ancora alcuna API associata. Nella al prossimo passaggio, attiverai Travel Partner API per il tuo nuovo progetto.
Passaggio 2: attiva Travel Partner API per il nuovo progetto
Per utilizzare le API per gli hotel, devi attivare Travel Partner API nel nuovo progetto DevConsole.
Per abilitare le API per gli hotel per il tuo nuovo progetto:
Vai alla visualizzazione Dashboard del progetto come descritto sopra.
Fai clic su Abilita API e servizi. Viene visualizzato il messaggio di benvenuto della Libreria API .
Nel campo di ricerca, inizia a digitare Travel Partner API. La console API di Google mostra un elenco di API corrispondenti al testo digitato.
Fai clic su Travel Partner API nella tabella delle API corrispondenti. DevConsole mostra una descrizione dell'API.
Fai clic sul pulsante Abilita API per abilitare l'API per il progetto.
Per ulteriori informazioni, consulta l'articolo Attivare e disattivare per le API.
Le API Hotel sono ora abilitate per il nuovo progetto del tuo Account Google.
Il passaggio successivo consiste nel creare un account di servizio e generare le relative chiavi.
Passaggio 3: crea un account di servizio e genera le relative credenziali
Gli account di servizio vengono utilizzati dalle interazioni server-to-server, come quelle tra un'applicazione web e i dati dei tuoi hotel.
Per creare e configurare un account di servizio:
Nella visualizzazione principale della console API di Google, fai clic su Credenziali nella nel menu di navigazione a sinistra. In DevConsole viene visualizzata la vista Credenziali.
Nella visualizzazione Credenziali vengono mostrati gli ID client e le credenziali dei tuoi progetto. La tua applicazione utilizzerà l'ID client per richiedere un Token di accesso OAuth 2.0. I nuovi progetti non avranno client o credenziali .
Fai clic sul link Credenziali in API e servizi.
Fai clic sul pulsante Crea credenziali e seleziona Chiave account di servizio dal menu a discesa. Viene visualizzata la vista Crea chiave account di servizio.
Dal menu a discesa Account di servizio, seleziona Nuovo account di servizio.
Inserisci un nome e un ID account di servizio per l'account di servizio.
Il nome può essere qualsiasi cosa tu voglia, ma l'ID account deve essere univoco in tutti i progetti. DevConsole genererà un ID account univoco per te, in base al nome inserito.
Seleziona P12 come tipo di token, come mostrato di seguito. È richiesto il codice P12.
Fai clic su pulsante Crea. DevConsole genera una coppia di chiavi pubblica/privata per il tuo progetto. La chiave privata viene salvata nella posizione predefinita il browser archivia i download. Devi scaricare il
.p12
(binario), a differenza del.json
formato file.Utilizzi la chiave privata nei tuoi script o in altre applicazioni che accedono Travel Partner API.
In DevConsole viene visualizzata la seguente notifica al termine della generazione del modulo chiavi:
Fai clic sul pulsante OK. DevConsole ti riporta Visualizzazione Credenziali. Per confermare i dettagli del tuo account di servizio vedere gli account di servizio associati al progetto, fai clic su Gestisci o account di servizio in questa vista.
All'account di servizio sono ora associate le seguenti credenziali:
- ID client:un identificatore univoco utilizzato dall'applicazione quando richiedendo un token di accesso OAuth 2.0.
- Indirizzo email: un indirizzo email generato per l'account di servizio, in il modulo "account_name@account_name.google.com.iam.gserviceaccount.com".
- Impronte digitali del certificato:l'ID della chiave privata che scaricato.
Per ulteriori informazioni, consulta l'articolo sull'utilizzo di OAuth 2.0 per il server applicazioni server.
Passaggio 4: consenti all'account di servizio di accedere ai tuoi dati di Hotel Center
Il passaggio finale consiste nel fornire al nuovo account di servizio l'accesso ai tuoi Hotel Center L'account di servizio è identificato dall'indirizzo email generato che creato nel passaggio precedente. Fornisci l'accesso a questo account utilizzando Le impostazioni di condivisione di Hotel Center.
Per concedere a un account di servizio l'accesso ai dati di Hotel Center:
Se non disponi dell'accesso appropriato per aggiungere utenti all'account, contatta il Il team di Google Hotels utilizzando il modulo Contattaci per chiederci di impostare la proprietà per al tuo account. Puoi richiedere l'invio di una o più email a un proprietario. Per saperne di più sull'accesso a Hotel Center, consulta l'articolo Collegare Hotel Center e Google Ads.
Apri Hotel Center in una nuova finestra del browser.
Sul banner di Hotel Center by Google, fai clic sull'icona Aggiungi utente per aprire la finestra di dialogo di condivisione.
Nel campo Aggiungi altre persone, inserisci l'indirizzo email del servizio che vuoi aggiungere a Hotel Center.
Lascia selezionata l'opzione Invia notifiche.
Dal menu a discesa, seleziona Gestisci.
Fai clic sul pulsante Invita.
Dopo aver aggiunto gli utenti a Hotel Center, l'account di servizio dovrebbe essere abilitato per l'accesso all'API entro circa 24 ore.
Dopo che Google ti informerà che l'accesso all'API è abilitato per il tuo servizio. puoi iniziare ad accedere all'API con OAuth.
OAuth 2.0
Per accedere all'API, la tua applicazione deve identificarsi con Google tramite
l'indirizzo email e la chiave privata generati dall'account di servizio. di Google
meccanismo di autenticazione scambia questa chiave con un token di accesso OAuth 2.0
che passi nell'intestazione Authorization
nelle chiamate API della tua app.
I token di accesso (noti anche come token di connessione) fanno parte del programma OAuth 2.0 standard. La sintassi per specificare un token di accesso in un'intestazione HTTP è la seguente:
Authorization: Bearer *oauth2_access_token*
L'esempio seguente mostra intestazioni HTTP di esempio di una richiesta che accede a API Reports:
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
Per generare un token di accesso, crea un'applicazione in una lingua qualsiasi.
L'esempio seguente genera il token in Python. Puoi quindi utilizzare questo
il token di sicurezza nell'interfaccia Authorization
durante l'accesso alle intestazioni 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>
Quando sviluppi la tua applicazione, assicurati di seguire le best practice per l'uso sicuro delle chiavi API.
Lo script Python di esempio restituisce la connessione dell'intestazione Authorization
come illustrato nell'esempio seguente:
$ python sample.py Authorization: Bearer ya29.42424242sample_420icu8122KSvoh4T42cRoG3rW1lc0Q $
Utilizza il valore del token nelle richieste. È valido per 1 ora dopo che hai generarlo.
Risoluzione dei problemi
Stai riscontrando problemi? Potresti risolvere un rapido controllo dei seguenti elementi risolvere il problema.
- Hai creato un progetto in Google Developer Console?
- Hai trovato e attivato Travel Partner API?
- Hai scaricato un file
.p12
, una chiave privata dopo aver fatto clic Creare l'ID client e selezionare Account di servizio? - Hai ricevuto l'indirizzo email di un ID client dell'account di servizio di un modulo:
nnnnnnn@app_name.google.com.iam.gserviceaccount.com
? - Hai condiviso il tuo account Hotel Ads Center con l'account di servizio facendo clic su il pulsante Condividi questo account?
- Hai inviato l'indirizzo email dell'account di servizio e il tuo ID partner a al tuo Technical Account Manager (TAM)?
- Le tue chiamate Travel Partner API trasmettono un token ottenuto di recente in
Authorization
intestazione? - Il token di connessione dell'intestazione
Authorization
risale a più di un'ora?
Nella tabella seguente sono elencati alcuni errori comuni e le possibili risoluzioni:
Errore | Descrizione |
---|---|
Invalid credentials | Ciò può avere vari motivi. Se riscontri questo errore, verifica quanto segue:
|
Not found | È molto probabile che il formato del tuo endpoint non sia corretto. Verificare di inviare un
richiesta GET e che l'URL della richiesta sia valido (è conforme
alla sintassi dell'API a cui stai tentando di accedere). |
Invalid string value | Una o più parti dell'endpoint contengono una sintassi non valida. Ad esempio: potresti aver sbagliato a scrivere una parte del percorso. Verifica di aver utilizzato trattini bassi, lettere maiuscole e parole nell'intero percorso. |
Unsupported output format | Questo errore si verifica solitamente quando si utilizza l'API Reports. Devi
specifica "alt=csv" nell'URL di GET
richiesta. L'API Reports non supporta JSON. |
AccessTokenRefreshError/Invalid grant | Durante l'esecuzione dell'app Python di esempio, questo errore potrebbe essere causato da
dei seguenti:
|
HotelAdsAPIConnection object has no attribute credentials | Durante l'esecuzione dell'app Python di esempio, il percorso del percorso .p12
non è corretto. |
Invalid scope | Quando esegui l'app Python di esempio, l'ambito dell'API deve essere
https://www.googleapis.com/auth/travelpartner . |
Forbidden | L'ID account che utilizzi non è autorizzato per accedere. Se sei il proprietario di un subaccount, potresti non essere in grado di accedere l'ID account principale o principale. |