Autorisation de l'API

Utilisez OAuth 2.0 pour autoriser votre application lors de l'accès aux API d'hôtels.

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 des hôtels pour obtenir des données en lecture seule, telles que les prix, les hôtels et les données des rapports de diagnostic sur votre flux des 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 lorsque vous appelez des API.

Pour configurer votre compte afin d'utiliser 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éer un projet DevConsole

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

Dans la DevConsole, un projet est un ensemble de paramètres, d'identifiants et de métadonnées concernant l'application ou les applications sur lesquelles vous travaillez, et qui utilisent les API Google Developer 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:

  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 bouton simple CREATE PROJECT (CRÉER UN PROJET) :

    fig1

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

    fig2

    Dans le champ de saisie Project name (Nom du projet), saisissez un nom convivial pour votre nouveau projet. Sous le champ, DevConsole génère un ID de projet pour vous, afin de garantir qu'il est unique pour tous les projets. Par exemple, si vous saisissez "Mon nouveau projet", 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 présente le menu de navigation en haut à gauche de la DevConsole. La vue Dashboard 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 activerez 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 d'accueil 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 qui correspondent à 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 afin d'activer cette API pour votre projet.

Pour en savoir plus, consultez Activer et désactiver les 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 lors des interactions de serveur à serveur, par exemple 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 panneau de navigation de gauche. La vue 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 des API et 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 indiquer n'importe quel nom, mais l'ID de compte doit être unique pour 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. Le niveau P12 est obligatoire.

    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 par défaut où votre navigateur stocke les téléchargements. Vous devez télécharger le format .p12 (binaire) et non le format de fichier .json.

    Vous utilisez la clé privée dans vos scripts ou d'autres applications qui accèdent à 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 confirmer les détails de votre compte de service et voir 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 des demandes de 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 en savoir plus, consultez l'article Utiliser OAuth 2.0 pour l'authentification serveur à serveur.

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

La dernière étape consiste à fournir au nouveau compte de service l'accès à Hotel Center. Le compte de service est identifié par l'adresse e-mail générée que vous avez créée à l'étape précédente. Vous accordez l'accès à ce compte à l'aide des 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 qu'une ou plusieurs adresses e-mail soient envoyées à 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. Sur la bannière Hotel Center by Google, cliquez sur l'icône d'ajout d'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 Notifier les utilisateurs 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 devrait être activé pour votre compte de service dans un délai d'environ 24 heures.

Une fois que Google vous a informé que l'accès aux API est activé pour votre compte de service, vous pouvez commencer à y accéder via 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 du 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*

L'exemple suivant présente des exemples d'en-têtes HTTP d'une requête qui accède à 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 lorsque vous accédez à 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>

Lors du développement de votre application, veillez à suivre les bonnes pratiques pour utiliser des 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

Des problèmes ? Un contrôle rapide des éléments suivants peut résoudre le problème.

  1. Avez-vous créé un projet dans la Google Play 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 suivant : 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 Share this account (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 de partenaire approprié (avec le paramètre de chaîne de requête partner). La valeur correspond à votre identifiant unique de partenaire, et non au nom de votre partenaire qui apparaît dans Hotel Ads Center. Si vous ne connaissez pas votre ID de partenaire, contactez votre responsable de compte technique (TAM).
Not found Le format de 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. Il se peut, par exemple, que vous ayez mal orthographié une partie du chemin. Vérifiez que vous avez utilisé les traits de soulignement, les majuscules et les termes corrects 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 se produire pour l'une des raisons suivantes :
  • L'adresse e-mail de votre compte de service est incorrecte. Vérifiez le compte de messagerie dans la Google Developers Console et assurez-vous qu'il est autorisé à accéder à l'API.
  • L'adresse e-mail ne dispose pas d'un 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 pour lequel 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.