Autorizzazione API

Utilizza OAuth 2.0 per autorizzare la tua applicazione quando accedi alle API per hotel.

Impostazione OAuth 2.0

OAuth 2.0 richiede di identificarti utilizzando un account di servizio associato al tuo Account Google. L'account di servizio invia la tua chiave privata in cambio di un token di accesso OAuth 2.0. Puoi quindi utilizzare questo token nelle chiamate alle API per gli hotel per i dati di sola lettura, come quelli relativi a prezzi, hotel e report diagnostici e 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 durante la chiamata alle API.

Per configurare l'account per l'utilizzo di OAuth 2.0 con Travel Partner API, segui questi passaggi:

  1. Creare un nuovo progetto in Google Developers Console (DevConsole)

  2. Abilita l'accesso a Travel Partner API per il nuovo progetto

  3. Creare un account di servizio e le relative credenziali

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

Google Developers Console ("DevConsole") è l'esperienza di sviluppo offerta da Google per la gestione e la visualizzazione dei dati sul traffico, sull'autenticazione e sulla fatturazione per le API di Google utilizzate nei tuoi progetti.

In DevConsole, un progetto è un insieme di impostazioni, credenziali e metadati relativi all'applicazione o alle applicazioni su cui stai lavorando che utilizza le API Google Developer e le risorse Google Cloud.

In DevConsole puoi gestire questi aspetti del progetto, ad esempio la generazione di credenziali API, l'attivazione delle API e la gestione dei dati del team e di fatturazione associati al progetto.

Per creare un nuovo progetto DevConsole:

  1. Accedi al tuo account Gmail o Google.

  2. Apri Google Developer Console. Se si tratta del tuo primo progetto, la visualizzazione principale mostra un semplice pulsante CREA PROGETTO:

    fig1

  3. Fai clic sul pulsante CREA PROGETTO. In DevConsole viene visualizzata la finestra di dialogo Nuovo progetto:

    fig2

    Inserisci un nome intuitivo per il nuovo progetto nel campo di immissione Nome progetto. Sotto il campo, DevConsole genera un ID progetto per te, garantendo che l'ID sia univoco per tutti i progetti. Ad esempio, se inserisci "My New Project", DevConsole assegna un ID simile a my-new-project-266022.

  4. Fai clic sul pulsante Crea per creare il nuovo progetto.

  5. Utilizza il menu di navigazione per selezionare API e servizi > Dashboard.

    fig3

    L'immagine seguente mostra il menu di navigazione in alto a sinistra di DevConsole. Viene mostrata la visualizzazione Dashboard del progetto:

    fig4

Per ulteriori informazioni, consulta Gestione dei progetti nella Console per gli sviluppatori.

Quando crei un nuovo progetto, non è ancora associato ad alcuna API. Nel passaggio successivo, abiliterai 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 nuovo progetto:

  1. Vai alla visualizzazione Dashboard del progetto come descritto sopra.

  2. Fai clic su Abilita API e servizi. Viene visualizzata la pagina di benvenuto della libreria API.

  3. Nel campo di ricerca, inizia a digitare Travel Partner API. Nella Console API di Google viene visualizzato un elenco di API corrispondenti al testo digitato.

  4. Fai clic su Travel Partner API nella tabella delle API corrispondenti. In DevConsole viene visualizzata una descrizione dell'API.

  5. Fai clic sul pulsante Abilita API per abilitare l'API in questione per il tuo progetto.

Per ulteriori informazioni, consulta Attivare e disattivare 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 degli hotel.

Per creare e configurare un account di servizio:

  1. Nella visualizzazione principale della console API di Google, fai clic su Credenziali nel pannello di navigazione a sinistra. In DevConsole compare la vista Credenziali.

    La visualizzazione Credenziali mostra gli ID client e le credenziali per il progetto. L'applicazione utilizzerà l'ID client per richiedere un token di accesso OAuth 2.0. I nuovi progetti non avranno ancora client o credenziali.

  2. Fai clic sul link Credenziali in API e servizi.

  3. Fai clic sul pulsante Crea credenziali e seleziona Chiave account di servizio dal menu a discesa. Viene visualizzata la visualizzazione Crea chiave account di servizio.

  4. Dal menu a discesa Account di servizio, seleziona Nuovo account di servizio.

  5. Inserisci il nome dell'account di servizio e l'ID dell'account di servizio.

    Puoi scegliere qualsiasi nome, ma l'ID account deve essere univoco in tutti i progetti. DevConsole genererà un ID account univoco basato sul nome inserito.

  6. Seleziona P12 come tipo di chiave, come mostrato di seguito. P12 è obbligatorio.

    fig5

  7. 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 in cui il browser archivia i download. Devi scaricare il formato .p12 (binario), anziché il .json formato file.

    La chiave privata viene utilizzata negli script o in altre applicazioni che accedono a Travel Partner API.

    Al termine della generazione delle chiavi, in DevConsole viene visualizzato il seguente avviso:

    fig6

  8. Fai clic sul pulsante OK. DevConsole torna alla visualizzazione Credenziali. Per confermare i dettagli dell'account di servizio e visualizzare gli account di servizio associati al progetto, fai clic su Gestisci account di servizio in questa visualizzazione.

    All'account di servizio sono ora associate le seguenti credenziali:

    • ID client:identificatore univoco utilizzato dall'applicazione quando richiedi un token di accesso per OAuth 2.0.
    • Indirizzo email: un indirizzo email generato per l'account di servizio, nel formato "account_name@project_name.google.com.iam.gserviceaccount.com".
    • Fingerprint del certificato:ID della chiave privata scaricata.

Per ulteriori informazioni, consulta la sezione sull'utilizzo di OAuth 2.0 per applicazioni da server a server.

Passaggio 4: concedi all'account di servizio l'accesso ai dati di Hotel Center

Il passaggio finale consiste nel fornire al nuovo account di servizio l'accesso a Hotel Center. L'account di servizio è identificato dall'indirizzo email generato che hai creato nel passaggio precedente. Devi fornire 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 team di Google Hotels utilizzando il modulo Contattaci e richiedici di configurare la proprietà per il tuo account. Puoi richiedere l'invio di una o più email a un proprietario. Per ulteriori informazioni sull'accesso a Hotel Center, consulta Collegare Hotel Center e Google Ads.

  1. In una nuova finestra del browser, apri Hotel Center. fig7

  2. Sul banner Hotel Center by Google, fai clic sull'icona Aggiungi utente per aprire la finestra di dialogo di condivisione.

    fig8

  3. Nel campo Aggiungi altre persone, inserisci l'indirizzo email dell'account di servizio che vuoi aggiungere a Hotel Center.

  4. Lascia selezionata l'opzione Invia notifiche.

  5. Dal menu a discesa, seleziona Gestisci.

  6. Fai clic sul pulsante Invita.

  7. 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 ha comunicato che l'accesso API è abilitato per il tuo account di servizio, puoi iniziare ad accedere all'API con OAuth.

Utilizzare 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. Il meccanismo di autenticazione di Google scambia questa chiave con un token di accesso OAuth 2.0, che viene trasmesso nell'intestazione Authorization nelle chiamate API della tua app.

I token di accesso (noti anche come token di connessione) fanno parte dello standard OAuth 2.0. 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 all'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. Potrai quindi utilizzare questo token nelle intestazioni Authorization delle tue richieste quando accedi a 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>

Durante lo sviluppo della tua applicazione, assicurati di seguire le best practice per l'utilizzo sicuro delle chiavi API.

Lo script Python di esempio restituisce un token di 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 un'ora dopo la generazione.

Risolvere i problemi

Stai riscontrando problemi? Potresti risolvere il problema eseguendo un rapido controllo dei seguenti elementi.

  1. Hai creato un progetto in Google Developer Console?
  2. Hai trovato e attivato Travel Partner API?
  3. Hai scaricato un file .p12, ovvero una chiave privata, dopo aver fatto clic su Crea ID client e aver selezionato Account di servizio?
  4. Hai ricevuto l'indirizzo email dell'ID client di un account di servizio per un modulo: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Hai condiviso il tuo account Hotel Ads Center con l'account di servizio facendo clic sul pulsante Condividi questo account?
  6. Hai inviato l'indirizzo email dell'account di servizio e il tuo ID partner al tuo Technical Account Manager (TAM)?
  7. Le tue chiamate Travel Partner API trasmettono un token ottenuto di recente nell'intestazione Authorization?
  8. Il token di connessione dell'intestazione Authorization risale a più di un'ora fa?

Nella tabella seguente sono elencati alcuni errori comuni e le possibili soluzioni:

Errore Descrizione
Invalid credentials Questo potrebbe significare diverse cose. Se si verifica questo errore, verifica quanto segue:
  • Hai specificato un'intestazione Authorization con un token di connessione valido.
  • Il token di connessione risale a meno di un'ora fa. Un token è valido solo per un'ora.
  • Hai specificato il nome del partner corretto (con il parametro della stringa di query partner). Il valore è il tuo ID partner univoco, non il nome partner visualizzato in Hotel Ads Center. Se non conosci il tuo ID partner, contatta il tuo Technical Account Manager (TAM).
Not found È molto probabile che il formato del tuo endpoint non sia corretto. Assicurati di inviare una 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 scritto in modo errato parte del percorso. Verifica di aver utilizzato i trattini bassi, le lettere maiuscole e le parole corrette in tutto il percorso.
Unsupported output format Questo errore si verifica più comunemente quando si utilizza l'API Reports. Devi specificare "alt=csv" nell'URL della richiesta GET. L'API Reports non supporta JSON.
AccessTokenRefreshError/Invalid grant Durante l'esecuzione dell'app Python di esempio, questo errore potrebbe essere causato da quanto segue:
  • L'indirizzo email del tuo account di servizio non è corretto. Controlla l'account email in Google Developer Console e assicurati che sia autorizzato ad accedere all'API.
  • L'indirizzo email non ha accesso all'API. Verifica che l'indirizzo email sia autorizzato ad accedere ai dati degli hotel (condivisi tramite Hotel Center).
  • Il file della chiave non è quello corretto per l'account di servizio. Utilizza DevConsole per scaricare un nuovo certificato .p12 e assicurati che la tua app Python indirizzi a quello corretto.
HotelAdsAPIConnection object has no attribute credentials Durante l'esecuzione dell'app Python di esempio, il percorso del file .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 Non disponi dell'autorizzazione ad accedere all'ID account che utilizzi. Se sei il proprietario di un subaccount, potresti non essere in grado di accedere all'ID account principale o root.