Autorisation de l'API

Utilisez OAuth 2.0 pour autoriser votre application à accéder aux API Hotels.

Configurer OAuth 2.0

OAuth 2.0 nécessite que vous vous identifiiez à l'aide d'un compte de service associé à votre compte Google. Le compte de service envoie votre clé privée en échange d'un jeton d'accès OAuth 2.0. Vous pouvez ensuite utiliser ce jeton dans les appels aux API Hotel pour obtenir des données en lecture seule, telles que les prix, les hôtels et les données de rapport de diagnostic concernant votre flux Prix de l'hôtel.

Les jetons d'accès sont valables une heure (3 600 secondes).

Si vous avez déjà implémenté ClientLogin, l'approche OAuth 2.0 est similaire, avec les différences suivantes:

  • Votre application utilise un compte de service Google pour accéder à l'API.
  • Vous transmettez un jeton d'accès OAuth 2.0 dans l'en-tête HTTP Authorization lors de l'appel d'API.

Pour configurer votre compte afin qu'il utilise OAuth 2.0 avec Travel Partner API, procédez comme suit:

  1. Créer un projet dans la Google Developers Console (DevConsole)

  2. Activer l'accès au Travel Partner API pour le nouveau projet

  3. Créer un compte de service et ses identifiants

  4. Autoriser votre compte de service à accéder aux données de votre hôtel

Toutes ces étapes sont décrites plus en détail dans les sections suivantes.

Étape 1: Créez un projet DevConsole

La Google Developers Console ("DevConsole") permet aux développeurs de gérer et d'afficher les données de trafic, ainsi que les informations d'authentification et de facturation associées aux API Google utilisées par vos projets.

Dans DevConsole, un projet est un ensemble de paramètres, d'identifiants et de métadonnées concernant la ou les applications que vous travaillez, et qui utilise les API Google Developers et les ressources Google Cloud.

DevConsole vous permet de gérer ces aspects de votre projet, tels que la génération d'identifiants pour les API, l'activation des API, et la gestion des informations d'équipe et de facturation associées à votre projet.

Pour créer un projet DevConsole, procédez comme suit:

  1. Connectez-vous à votre compte Gmail/Google.

  2. Ouvrez la Google Developers Console. S'il s'agit de votre premier projet, la vue principale affiche un simple bouton CRÉER UN PROJET:

    fig1

  3. Cliquez sur le bouton CRÉER UN PROJET. La boîte de dialogue New Project (Nouveau projet) s'affiche:

    fig2

    Saisissez un nom convivial pour votre nouveau projet dans le champ de saisie Nom du projet. Sous le champ, DevConsole génère un ID de projet pour vous, ce qui garantit qu'il est unique parmi tous les projets. Par exemple, si vous saisissez "My New Project", DevConsole attribue un ID tel que my-new-project-266022.

  4. Cliquez sur le bouton Créer pour créer votre projet.

  5. Dans le menu de navigation, sélectionnez API et services > Tableau de bord.

    fig3

    L'image ci-dessous montre le menu de navigation en haut à gauche de DevConsole. La vue Dashboard (Tableau de bord) de votre projet s'affiche:

    fig4

Pour en savoir plus, consultez la page Gérer des projets dans la Developers Console.

Lorsque vous créez un projet, aucune API ne lui est encore associée. À l'étape suivante, vous allez activer Travel Partner API pour votre nouveau projet.

Étape 2: Activez Travel Partner API pour le nouveau projet

Pour utiliser les API Hotels, vous devez activer Travel Partner API dans votre nouveau projet DevConsole.

Pour activer les API Hotels pour votre nouveau projet:

  1. Accédez au tableau de bord de votre projet comme décrit ci-dessus.

  2. Cliquez sur Activer les API et les services. La page de bienvenue de la bibliothèque d'API s'affiche.

  3. Dans le champ de recherche, commencez à saisir Travel Partner API. La console Google APIs affiche une liste d'API correspondant à votre saisie.

  4. Cliquez sur Travel Partner API dans le tableau des API correspondantes. DevConsole affiche une description de l'API.

  5. Cliquez sur le bouton Activer l'API pour activer cette API pour votre projet.

Pour en savoir plus, consultez Activer et désactiver des API.

Les API Hotel sont désormais activées pour le nouveau projet de votre compte Google.

L'étape suivante consiste à créer un compte de service et à générer des clés pour celui-ci.

Étape 3: Créez un compte de service et générez ses identifiants

Les comptes de service sont utilisés par les interactions de serveur à serveur, telles que celles entre une application Web et les données de votre hôtel.

Pour créer et configurer un compte de service, procédez comme suit :

  1. Dans la vue principale de la console Google APIs, cliquez sur Identifiants dans le menu de navigation de gauche. La vue Credentials (Identifiants) s'affiche.

    La vue Credentials (Identifiants) affiche les ID client et les identifiants de votre projet. Votre application utilisera l'ID client lorsqu'elle demandera un jeton d'accès OAuth 2.0. Les nouveaux projets n'auront pas encore de clients ni d'identifiants.

  2. Cliquez sur le lien Identifiants dans les API et les services.

  3. Cliquez sur le bouton Créer des identifiants, puis sélectionnez Clé de compte de service dans le menu déroulant. La vue Créer une clé de compte de service s'affiche.

  4. Dans le menu déroulant Compte de service, sélectionnez Nouveau compte de service.

  5. Saisissez un nom et un ID de compte de service.

    Vous pouvez attribuer le nom de votre choix, mais l'ID de compte doit être unique parmi tous les projets. DevConsole génère un ID de compte unique, basé sur le nom que vous avez saisi.

  6. Sélectionnez le type de clé P12, comme indiqué ci-dessous. P12 est requis.

    fig5

  7. Cliquez sur le bouton Create (Créer). DevConsole génère une paire de clés publique/privée pour votre projet. La clé privée est enregistrée à l'emplacement de stockage par défaut des téléchargements dans votre navigateur. Vous devez télécharger le format .p12 (binaire), plutôt que le format de fichier .json.

    Vous utilisez la clé privée dans vos scripts ou dans d'autres applications ayant accès à Travel Partner API.

    Une fois les clés générées, DevConsole affiche le message suivant:

    fig6

  8. Cliquez sur le bouton OK. La vue Identifiants s'affiche à nouveau. Pour vérifier les détails de votre compte de service et afficher les comptes de service associés à votre projet, cliquez sur Gérer les comptes de service dans cette vue.

    Les identifiants suivants sont désormais associés au compte de service:

    • ID client:identifiant unique que votre application utilise lors de la demande d'un jeton d'accès OAuth 2.0.
    • Adresse e-mail:adresse e-mail générée pour le compte de service, au format "account_name@account_name.google.com.iam.gserviceaccount.com".
    • Empreinte de certificat:ID de la clé privée que vous avez téléchargée.

Pour plus d'informations, consultez la page Utiliser OAuth 2.0 pour les applications de serveur à serveur.

Étape 4: Autorisez le compte de service à accéder à vos données Hotel Center

La dernière étape consiste à permettre au nouveau compte de service d'accéder à Hotel Center. Le compte de service est identifié par l'adresse e-mail générée à l'étape précédente. Pour accorder l'accès à ce compte, utilisez les paramètres de partage de Hotel Center.

Pour autoriser un compte de service à accéder à vos données Hotel Center:

Si vous ne disposez pas des droits d'accès nécessaires pour ajouter des utilisateurs au compte, contactez l'équipe Google Hotels à l'aide du formulaire Nous contacter et demandez-nous de configurer la propriété de votre compte. Vous pouvez demander l'envoi d'une ou plusieurs adresses e-mail à un propriétaire. Pour en savoir plus sur l'accès à Hotel Center, consultez Associer Hotel Center à Google Ads.

  1. Dans une nouvelle fenêtre de navigateur, ouvrez Hotel Center. fig7

  2. Dans la bannière Hotel Center by Google, cliquez sur l'icône d'ajout d'un utilisateur pour ouvrir la boîte de dialogue de partage.

    fig8

  3. Dans le champ Ajouter des personnes, saisissez l'adresse e-mail du compte de service que vous souhaitez ajouter à Hotel Center.

  4. Laissez l'option Envoyer une notification sélectionnée.

  5. Dans le menu déroulant, sélectionnez Gérer.

  6. Cliquez sur le bouton Inviter.

  7. Une fois que vous avez ajouté des utilisateurs à Hotel Center, l'accès à l'API est généralement activé pour votre compte de service sous 24 heures environ.

Une fois que Google vous a informé que l'accès à l'API est activé pour votre compte de service, vous pouvez commencer à y accéder avec OAuth.

Utiliser OAuth 2.0

Pour accéder à l'API, votre application doit s'identifier auprès de Google à l'aide de l'adresse e-mail et de la clé privée générées pour le compte de service. Le mécanisme d'authentification de Google échange cette clé contre un jeton d'accès OAuth 2.0 que vous transmettez dans l'en-tête Authorization des appels d'API de votre application.

Les jetons d'accès (également appelés jetons de support) font partie de la norme OAuth 2.0. La syntaxe permettant de spécifier un jeton d'accès dans un en-tête HTTP est la suivante:

Authorization: Bearer *oauth2_access_token*

Voici des exemples d'en-têtes HTTP d'une requête d'accès à l'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

Pour générer un jeton d'accès, créez une application dans le langage de votre choix. L'exemple suivant génère le jeton en Python. Vous pouvez ensuite utiliser ce jeton dans les en-têtes Authorization de vos requêtes lors de l'accès à 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>

Lorsque vous développez votre application, veillez à suivre les bonnes pratiques pour utiliser les clés API en toute sécurité.

L'exemple de script Python génère un jeton de support d'en-tête Authorization, comme le montre l'exemple suivant:

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

Utilisez la valeur du jeton dans vos requêtes. Il est valable une heure après sa génération.

Dépannage

Vous rencontrez des problèmes ? Une vérification rapide des éléments suivants peut résoudre le problème.

  1. Avez-vous créé un projet dans la Google Developers Console ?
  2. Avez-vous trouvé et activé Travel Partner API ?
  3. Avez-vous téléchargé un fichier .p12 (une clé privée) après avoir cliqué sur Créer un ID client et sélectionné Compte de service ?
  4. Avez-vous obtenu une adresse e-mail d'ID client de compte de service au format nnnnnnn@app_name.google.com.iam.gserviceaccount.com ?
  5. Avez-vous partagé votre compte Hotel Ads Center avec le compte de service en cliquant sur le bouton Partager ce compte ?
  6. Avez-vous envoyé l'adresse e-mail du compte de service et votre ID de partenaire à votre responsable de compte technique (TAM) ?
  7. Vos appels Travel Partner API transmettent-ils un jeton récemment obtenu dans l'en-tête Authorization ?
  8. Le jeton de support de votre en-tête Authorization date-t-il de plus d'une heure ?

Le tableau suivant répertorie certaines erreurs courantes et les solutions possibles:

Erreur Description
Invalid credentials Cela peut signifier plusieurs choses. Si vous rencontrez cette erreur, vérifiez les points suivants :
  • Vous avez spécifié un en-tête Authorization avec un jeton de support valide.
  • Le jeton de support date de moins d'une heure. Un jeton n'est valable que pendant une heure.
  • Vous avez spécifié le nom du partenaire correct (avec le paramètre de chaîne de requête partner). La valeur correspond à votre ID de partenaire unique, et non à votre nom de partenaire qui apparaît dans Hotel Center. Si vous ne connaissez pas votre ID de partenaire, contactez votre responsable de compte technique (TAM).
Not found Votre point de terminaison est probablement incorrect. Vérifiez que vous envoyez une requête GET et que l'URL de la requête est valide (elle respecte la syntaxe de l'API à laquelle vous essayez d'accéder).
Invalid string value Une ou plusieurs parties du point de terminaison contiennent une syntaxe non valide. Par exemple, vous avez peut-être mal orthographié une partie du chemin. Vérifiez que vous avez utilisé les traits de soulignement, les majuscules et les termes appropriés dans l'ensemble du chemin d'accès.
Unsupported output format Cette erreur se produit le plus souvent lorsque vous utilisez l'API Reports. Vous devez spécifier "alt=csv" dans l'URL de votre requête GET. L'API Reports n'est pas compatible avec le format JSON.
AccessTokenRefreshError/Invalid grant Lors de l'exécution de l'exemple d'application Python, cette erreur peut être causée par :
  • L'adresse e-mail de votre compte de service est incorrecte. Vérifiez le compte de messagerie dans la Google Developer Console et assurez-vous qu'il est autorisé à accéder à l'API.
  • L'adresse e-mail n'a pas accès à l'API. Vérifiez que l'adresse e-mail est autorisée à accéder aux données de vos hôtels (partagées via Hotel Center).
  • Le fichier de clé n'est pas le bon pour le compte de service. Utilisez DevConsole pour télécharger un nouveau certificat .p12 et assurez-vous que votre application Python pointe vers le bon.
HotelAdsAPIConnection object has no attribute credentials Lors de l'exécution de l'exemple d'application Python, le chemin d'accès à votre fichier .p12 est incorrect.
Invalid scope Lors de l'exécution de l'exemple d'application Python, le champ d'application de l'API doit être https://www.googleapis.com/auth/travelpartner.
Forbidden L'ID de compte que vous utilisez est un ID auquel vous n'êtes pas autorisé à accéder. Si vous êtes propriétaire d'un sous-compte, vous n'aurez peut-être pas accès à l'ID du compte parent ou racine.