Autorisation de l'API

Utiliser OAuth 2.0 pour autoriser votre application lorsque vous accédez aux API Hotels.

Configurer OAuth 2.0

OAuth 2.0 nécessite que vous vous identifiiez à l'aide d'un compte de service associés à votre compte Google. Le compte de service envoie vos données en échange d'un jeton d'accès OAuth 2.0. Vous pouvez ensuite utiliser ce jeton dans les appels vers les API Hotels pour obtenir des données en lecture seule, telles que les tarifs, les hôtels les données des rapports 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 lorsque appelant les 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 Google pour gérer et afficher les données de trafic, l'authentification et les informations de facturation pour les API Google utilisées par vos projets.

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

La DevConsole est l'endroit où vous gérez ces aspects de votre projet, tels que Génération d'identifiants pour les API, activation des API, et gestion de l'équipe et de la facturation les informations 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 une bouton CREATE PROJECT (CRÉER UN PROJET) :

    fig1

  3. Cliquez sur le bouton CRÉER UN PROJET. DevConsole affiche Boîte de dialogue New Project (Nouveau projet) :

    fig2

    Dans le champ Nom du projet, saisissez un nom convivial pour votre nouveau projet. . Sous le champ, DevConsole génère un ID de projet pour vous. garantissant que l'ID est unique dans tous les projets. Par exemple, si vous saisissez "My New Project" (Mon nouveau projet). La DevConsole attribue un identifiant du type 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 Gérer les projets dans la section "Développeurs" la console Cloud.

Lorsque vous créez un projet, aucune API ne lui est encore associée. Dans L'étape suivante consiste à 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. Le message 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 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 des interactions de serveur à serveur, comme 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 la section le panneau 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 lors de la demande d'un Jeton d'accès OAuth 2.0. Les nouveaux projets n'auront pas de client ni d'identifiant pour l'instant.

  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 utiliser le nom de votre choix, mais l'ID du compte doit être unique dans tous les projets. DevConsole génère un ID de compte unique, en fonction du 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 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 votre navigateur stocke les téléchargements. Vous devez télécharger le le format .p12 (binaire), par opposition au format de fichier .json.

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

    Une fois la génération de la valeur clés:

    fig6

  8. Cliquez sur le bouton OK. DevConsole vous ramène à la Credentials (Identifiants) Pour confirmer les détails de votre compte de service voir les comptes de service associés à votre projet, cliquez sur Gérer comptes de service dans cette vue.

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

    • ID client:identifiant unique utilisé par votre application lorsque demandant un jeton d'accès OAuth 2.0.
    • Adresse e-mail:adresse e-mail générée pour le compte de service, dans le formulaire "account_name@account_name.google.com.iam.gserviceaccount.com".
    • Empreintes de certificat:l'ID de la clé privée que vous téléchargée.

Pour plus d'informations, consultez Utilisation d'OAuth 2.0 pour le serveur afin de Applications 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 à votre Hotel Center. Le compte de service est identifié par l'adresse e-mail générée que vous avez créés à l'étape précédente. Pour donner accès à ce compte, vous 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 de contact pour nous demander 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 et 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 permettant d'ajouter un utilisateur pour l'ouvrir. la boîte de dialogue de partage.

    fig8

  3. Dans le champ Ajouter des utilisateurs, saisissez l'adresse e-mail du 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, votre compte de service doit être l'accès à l'API est activé dans un délai d'environ 24 heures.

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

Utiliser OAuth 2.0

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

Les jetons d'accès (également appelés jetons de support) font partie du protocole standard. 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 qui accède au 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 cette dans vos requêtes. en-têtes Authorization 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 vos clés API de façon sécurisée.

L'exemple de script Python génère un 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. Durée de validité d'une heure après les générer.

Dépannage

Vous rencontrez des problèmes ? Vous pourrez peut-être résoudre rapidement les problèmes suivants : 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 un clic) ? Créer un ID client et sélectionner Compte de service ?
  4. Avez-vous obtenu l'adresse e-mail d'un ID client de compte de service sous la forme d'un formulaire: 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 le Authorization en-tête ?
  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: <ph type="x-smartling-placeholder">
    </ph>
  • Vous avez spécifié un en-tête Authorization avec un support valide. à partir d'un jeton d'accès.
  • Le jeton de support date de moins d'une heure. Un jeton n'est valable que pendant une heure.
  • Vous avez correctement spécifié le nom du partenaire (avec l'élément partner). paramètre de chaîne de requête). La valeur correspond à votre identifiant de partenaire unique, et non à votre nom du partenaire tel qu'il apparaît dans Hotel Ads Center. Si vous ne connaissez pas votre partenaire contactez votre responsable de compte technique (TAM).
Not found Votre point de terminaison est probablement incorrect. Vérifiez que vous envoyez un GET et que son URL est valide (elle est conforme à la syntaxe d'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é la bonne des traits de soulignement, des majuscules et des termes dans l'ensemble du chemin.
Unsupported output format Cette erreur se produit le plus souvent lorsque vous utilisez l'API Reports. Vous devez indiquez "alt=csv" dans l'URL de votre GET requête. 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 due à des éléments suivants: <ph type="x-smartling-placeholder">
    </ph>
  • L'adresse e-mail de votre compte de service est incorrecte. Consultez l'e-mail dans la Google Developers Console et assurez-vous qu'il est autorisé à accéder à la API.
  • L'adresse e-mail n'a pas accès à l'API. Vérifiez que l'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 les DevConsole télécharger un nouveau certificat .p12 et vérifier votre application Python pointe vers la bonne version.
HotelAdsAPIConnection object has no attribute credentials Lors de l'exécution de l'exemple d'application Python, le chemin d'accès à votre .p12 fichier 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 Le numéro de compte que vous utilisez n'est pas autorisé. pour y 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.