Autorizzazione API

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

Impostazione OAuth 2.0

OAuth 2.0 richiede l'identificazione tramite 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 i dati dei report relativi a prezzi, hotel e di diagnostica relativi al tuo 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 chiama le API.

Per configurare il tuo account in modo che utilizzi OAuth 2.0 con Travel Partner API, segui questi passaggi:

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

  2. Attiva 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 degli sviluppatori di Google che consente di gestire e visualizzare i dati sul traffico, l'autenticazione e i dati di fatturazione per le API di Google utilizzate dai tuoi progetti.

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

In DevConsole puoi gestire questi aspetti del progetto, come la generazione di credenziali dell'API, l'attivazione delle API e la gestione delle informazioni sul team e sulla fatturazione associate al progetto.

Per creare un nuovo progetto DevConsole:

  1. Accedi al tuo account Gmail o Google.

  2. Apri la Google Developers Console. Se questo è il 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 semplice per il nuovo progetto nel campo di immissione Nome progetto. Sotto il campo, DevConsole genera un ID progetto, assicurandoti che sia univoco per tutti i progetti. Ad esempio, se inserisci "Il mio nuovo progetto", 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 in DevConsole. Viene visualizzata la Dashboard per il tuo progetto:

    fig4

Per ulteriori informazioni, consulta l'articolo Gestire i progetti nella Developers Console.

Quando crei un nuovo progetto, non ha ancora alcuna API associata. 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 tuo 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. La console API di Google mostra 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 per il progetto.

Per maggiori informazioni, consulta la pagina 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 Credentials (Credenziali) nel riquadro di navigazione a sinistra. In DevConsole viene visualizzata la vista Credenziali.

    La visualizzazione Credenziali mostra gli ID client e le credenziali del tuo 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 vista Crea chiave account di servizio.

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

  5. Inserisci un nome e un ID account di servizio per l'account di servizio.

    Può essere qualsiasi nome tu voglia, ma l'ID account deve essere univoco per tutti i progetti. DevConsole genererà un ID account univoco in base al nome inserito.

  6. Seleziona P12 come tipo di token, come mostrato di seguito. È richiesto il codice P12.

    fig5

  7. Fai clic su pulsante Crea. DevConsole genera una coppia di chiavi pubblica/privata per il progetto. La chiave privata viene salvata nel percorso predefinito in cui il browser archivia i download. Devi scaricare il formato .p12 (binario), anziché il formato file .json.

    Utilizzi la chiave privata nei tuoi script o in altre applicazioni che accedono a Travel Partner API.

    Al termine della generazione delle chiavi, in DevConsole viene visualizzata la seguente notifica:

    fig6

  8. Fai clic sul pulsante OK. DevConsole torna alla vista Credenziali. Per confermare i dettagli del tuo 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: un identificatore univoco utilizzato dall'applicazione per richiedere un token di accesso 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:l'ID della chiave privata scaricata.

Per ulteriori informazioni, consulta la pagina sull'utilizzo di OAuth 2.0 per applicazioni server-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 a Hotel Center. L'account di servizio è identificato dall'indirizzo email generato che hai 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 team di Google Hotels utilizzando il modulo Contattaci e richiedici di impostare la proprietà del tuo account. Puoi richiedere l'invio di una o più email a un proprietario. Per saperne di più sull'accesso a Hotel Center, consulta la pagina Collegare Hotel Center e Google Ads.

  1. Apri Hotel Center in una nuova finestra del browser. fig7

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

OAuth 2.0

Per accedere all'API, l'applicazione deve identificarsi con Google tramite l'indirizzo email generato dall'account di servizio e la chiave privata. Il meccanismo di autenticazione di Google 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 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. Puoi quindi utilizzare questo token nelle intestazioni Authorization delle tue richieste per accedere 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>

Quando sviluppi la 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 mostrato nell'esempio seguente:

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

Utilizza il valore del token nelle richieste. È valido per un'ora dopo essere stato generato.

Risoluzione dei problemi

Stai riscontrando problemi? Per risolvere il problema, controlla rapidamente i 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, una chiave privata dopo aver fatto clic su Crea ID client e aver selezionato Account di servizio?
  4. Hai ricevuto l'indirizzo email di un ID client dell'account di servizio di 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 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?

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

Errore Descrizione
Invalid credentials Ciò può avere vari motivi. Se si verifica questo errore, verifica quanto segue:
  • Hai specificato un'intestazione Authorization con un token di connessione valido.
  • Il token di connessione è stato generato da meno di un'ora. 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. Verifica 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 una parte del percorso. Verifica di aver utilizzato trattini bassi, lettere maiuscole e parole corrette nell'intero percorso.
Unsupported output format Questo errore si verifica solitamente quando si utilizza l'API Reports. Devi specificare "alt=csv" nell'URL della tua 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 l'app Python stia puntando al file 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 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 principale.