Autorizzazione API

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:

  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

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:

  1. Accedi al tuo account Gmail o Google.

  2. Apri la Google Developers Console. Se questo è il tuo primo progetto, la vista principale mostra 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 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.

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

  5. Utilizza il menu di navigazione per selezionare API e Servizi > Fitbit.com.

    fig3

    L'immagine seguente mostra il menu di navigazione in alto a sinistra di in DevConsole. Viene visualizzata la Dashboard per il tuo progetto:

    fig4

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:

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

  2. Fai clic su Abilita API e servizi. Viene visualizzato il messaggio 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. DevConsole mostra una descrizione dell'API.

  5. 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:

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

  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.

    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.

  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 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:

    fig6

  8. 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.
di Gemini Advanced.

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.

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

  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 Creare l'ID client e selezionare 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 su il pulsante Condividi questo account?
  6. Hai inviato l'indirizzo email dell'account di servizio e il tuo ID partner a al tuo Technical Account Manager (TAM)?
  7. Le tue chiamate Travel Partner API trasmettono un token ottenuto di recente in Authorization intestazione?
  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 riscontri questo errore, verifica quanto segue:
  • Hai specificato un'intestazione Authorization con un valore di connessione valido di accesso.
  • Il token di connessione è stato generato da meno di un'ora. Un token è valido solo per un'ora.
  • Hai specificato il nome partner corretto (con partner della stringa di query). Il valore è il tuo ID partner univoco, non il tuo nome partner visualizzato in Hotel Ads Center. Se non conosci il tuo partner di assistenza, contatta il tuo Technical Account Manager (TAM).
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:
  • L'indirizzo email del tuo account di servizio non è corretto. Controlla l'email nella Google Developers Console e assicurati di avere l'autorizzazione ad accedere ai tramite Google Cloud CLI o tramite l'API Compute Engine.
  • L'indirizzo email non ha accesso all'API. Controlla che l'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 la DevConsole per scaricare un nuovo certificato .p12 e assicurati di che l'app Python stia puntando a quella giusta.
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.