Autorización mediante la API

Usa OAuth 2.0 para autorizar tu aplicación. cuando accedas a las APIs de hoteles.

Configuración de OAuth 2.0

OAuth 2.0 requiere que te identifiques con una cuenta de servicio asociada con tu Cuenta de Google. La cuenta de servicio envía tu configuración a cambio de un token de acceso de OAuth 2.0. Luego, puedes usar este token llamadas a las APIs de hoteles para datos de solo lectura, como precios, hoteles y Datos de informes de diagnóstico sobre tu feed de precios de hoteles.

Los tokens de acceso son válidos por una hora (3,600 segundos).

Si ya implementaste ClientLogin, el enfoque de OAuth 2.0 es similar, con las siguientes diferencias:

  • Tu aplicación usa una cuenta de servicio de Google para acceder a la API.
  • Pasas un token de acceso de OAuth 2.0 en el encabezado HTTP Authorization cuando llamando a APIs.

A fin de configurar tu cuenta para usar OAuth 2.0 con la Travel Partner API, sigue estos pasos:

  1. Cómo crear un proyecto nuevo en Google Developers Console (DevConsole)

  2. Habilita el acceso a Travel Partner API para el proyecto nuevo

  3. Crea una cuenta de servicio y sus credenciales

  4. Cómo permitir que tu cuenta de servicio acceda a los datos de tu hotel

Cada uno de estos pasos se describe en las siguientes secciones.

Paso 1: Crea un proyecto nuevo de DevConsole

Google Developers Console (“DevConsole”) es la experiencia de los desarrolladores de Google para administrar y visualizar datos de tráfico, autenticación y datos de facturación para las APIs de Google que se usan en tus proyectos.

En la consola para desarrolladores, un proyecto es un conjunto de parámetros de configuración, y metadatos sobre la aplicación o las aplicaciones en las que estás trabajando que usa las APIs de Google Developer y los recursos de Google Cloud.

DevConsole es donde administras estos aspectos de tu proyecto, como generar credenciales de API, activar APIs y administrar el equipo y la facturación información asociada con tu proyecto.

Para crear un proyecto nuevo de DevConsole, sigue estos pasos:

  1. Accede a tu Cuenta de Google o Gmail.

  2. Abre Google Developer Console. Si este es tu primer proyecto, en la vista principal se mostrará un botón CREATE PROJECT simple:

    fig1

  3. Haz clic en el botón CREAR PROYECTO. En DevConsole, se muestran Cuadro de diálogo New Project:

    fig2

    Ingresa un nombre descriptivo para tu proyecto nuevo en Nombre del proyecto. campo de entrada. Debajo del campo, DevConsole genera un ID de proyecto para ti. lo que garantiza que el ID sea único en todos los proyectos. Por ejemplo, si ingresa "My New Project", y DevConsole asigna un ID como my-new-project-266022

  4. Haz clic en el botón Crear para crear un proyecto nuevo.

  5. En el menú de navegación, selecciona APIs y Servicios > Panel de control.

    fig3

    La siguiente imagen muestra el menú de navegación en la esquina superior izquierda de en DevConsole. Se mostrará la vista Dashboard de tu proyecto:

    fig4

Para obtener más información, consulta Administra proyectos en la sección de Consola.

Cuando creas un proyecto nuevo, este todavía no tiene APIs asociadas. En la En el siguiente paso, habilitarás el Travel Partner API para tu nuevo proyecto.

Paso 2: Habilita Travel Partner API para el proyecto nuevo

Para usar las APIs de hoteles, debes habilitar Travel Partner API en tu nuevo proyecto de DevConsole.

Sigue estos pasos para habilitar las APIs de hoteles en tu proyecto nuevo:

  1. Dirígete a la vista Panel de tu proyecto como se describió anteriormente.

  2. Haz clic en Habilitar APIs y servicios. Se mostrará la bienvenida de la Biblioteca de APIs .

  3. En el campo de búsqueda, comienza a escribir Travel Partner API. La Consola de APIs de Google muestra una lista de APIs que coinciden con lo que escribes.

  4. Haz clic en Travel Partner API en la tabla de APIs coincidentes. DevConsole muestra una descripción sobre la API.

  5. Haz clic en el botón Habilitar API para habilitar esta API en tu proyecto.

Para obtener más información, consulta Cómo activar y desactivar APIs.

Las APIs de hoteles ya están habilitadas para el nuevo proyecto de tu Cuenta de Google.

El siguiente paso es crear una cuenta de servicio y generar claves para ella.

Paso 3: Crea una cuenta de servicio y genera sus credenciales

Las interacciones servidor a servidor, como las entre una aplicación web y los datos de tu hotel.

Para crear y configurar una cuenta de servicio, sigue estos pasos:

  1. En la vista principal de la Consola de APIs de Google, haz clic en Credenciales en la navegación de la izquierda. DevConsole muestra la vista Credenciales.

    La vista Credenciales muestra los IDs de cliente y las credenciales de tu en un proyecto final. Tu aplicación usará el ID de cliente cuando solicite una Token de acceso de OAuth 2.0. Los proyectos nuevos no tendrán clientes ni credenciales aún.

  2. Haz clic en el vínculo Credenciales en las APIs y los servicios.

  3. Haz clic en el botón Crear credenciales y selecciona Clave de cuenta de servicio. en el menú desplegable. Aparecerá la vista Crear clave de cuenta de servicio.

  4. En el menú desplegable Cuenta de servicio, selecciona Nueva cuenta de servicio.

  5. Ingresa un nombre y un ID para la cuenta de servicio.

    El nombre puede ser el que desees, pero el ID de la cuenta debe ser único en todos los proyectos. DevConsole generará un ID de cuenta único para ti. según el nombre que ingresaste.

  6. Selecciona P12 para el tipo de clave, como se muestra a continuación. El P12 es obligatorio.

    fig5

  7. Haz clic en el botón Crear. DevConsole genera un par de claves pública/privada para tu proyecto. La clave privada se guarda en la ubicación predeterminada tu navegador almacena las descargas. Deben descargar la app .p12 (binario), a diferencia del formato de archivo .json.

    Usas la clave privada en tus secuencias de comandos o en otras aplicaciones que acceden Travel Partner API

    DevConsole muestra el siguiente aviso cuando termina de generar la claves:

    fig6

  8. Haz clic en el botón Entendido. DevConsole te lleva nuevamente al Credentials. Para confirmar los detalles de la cuenta de servicio las cuentas de servicio asociadas a tu proyecto, haz clic en Administrar cuentas de servicio en esta vista.

    La cuenta de servicio ahora tiene las siguientes credenciales asociadas:

    • ID de cliente: Un identificador único que usa tu aplicación cuando solicitando un token de acceso de OAuth 2.0.
    • Dirección de correo electrónico: Una dirección de correo electrónico generada para la cuenta de servicio, en el formulario “account_name@account_name.google.com.iam.gserviceaccount.com”.
    • Huellas digitales del certificado: el ID de la clave privada que descargado.

Para obtener más información, consulta Uso de OAuth 2.0 para el servidor para Aplicaciones de servidor.

Paso 4: Otorga a la cuenta de servicio acceso a tus datos de Hotel Center

El último paso es proporcionarle a la nueva cuenta de servicio acceso a tu Hotel Center. La cuenta de servicio se identifica con la dirección de correo electrónico generada que que creaste en el paso anterior. Proporciona acceso a esta cuenta mediante la configuración de uso compartido de Hotel Center.

Sigue estos pasos para permitir que una cuenta de servicio acceda a tus datos de Hotel Center:

Si no tiene el acceso adecuado para agregar usuarios a la cuenta, comuníquese con el al equipo de Hoteles de Google mediante el formulario de contacto y nuestra solicitud para que configuremos la propiedad de tu cuenta. Puedes solicitar que se envíen uno o más correos electrónicos a un propietario. Para obtener más información sobre el acceso a Hotel Center, consulta Cómo vincular Hotel Center y Google Ads

  1. En una nueva ventana del navegador, abre Hotel Center. fig7

  2. En el banner de Hotel Center de Google, haz clic en el ícono de agregar usuario. en el cuadro de diálogo para compartir.

    fig8

  3. En el campo Agregar más personas, ingresa la dirección de correo electrónico del servicio. que quieres agregar a Hotel Center.

  4. Mantén seleccionada la opción Notificar a las personas.

  5. En el menú desplegable, selecciona Administrar.

  6. Haz clic en el botón Invitar.

  7. Después de agregar usuarios a Hotel Center, esta debería ser tu cuenta de servicio habilitado para acceder a la API en un plazo aproximado de 24 horas.

Luego de que Google te notifique que tu servicio tiene habilitado el acceso a la API puedes comenzar a acceder a la API con OAuth.

A través de OAuth 2.0

Para acceder a la API, tu aplicación debe identificarse ante Google con el la dirección de correo electrónico generada y la clave privada de la cuenta de servicio. mecanismo de autenticación intercambia esta clave por un token de acceso de OAuth 2.0 que pasas el encabezado Authorization en las llamadas a la API de tu app.

Los tokens de acceso (también conocidos como tokens del portador) forman parte de OAuth 2.0 estándar. Esta es la sintaxis para especificar un token de acceso en un encabezado HTTP:

Authorization: Bearer *oauth2_access_token*

En el siguiente ejemplo, se muestran encabezados HTTP de muestra de una solicitud que accede a la API de informes:

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

Para generar un token de acceso, crea una aplicación en el lenguaje que elijas. En el siguiente ejemplo, se genera el token en Python. Luego, puedes usar token en tus solicitudes encabezados Authorization cuando accedas 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>

Cuando desarrolles tu aplicación, asegúrate de seguir las Prácticas recomendadas para usar claves de API de forma segura.

La secuencia de comandos de Python de muestra genera un portador del encabezado Authorization token, como se muestra en el siguiente ejemplo:

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

Usa el valor del token en tus solicitudes. Es válido por 1 hora después de que generarla.

Soluciona problemas

¿Tienes problemas? Hacer una verificación rápida de los siguientes elementos podría resolver el problema el problema.

  1. ¿Creaste un proyecto en Google Developer Console?
  2. ¿Encontraste y habilitaste Travel Partner API?
  3. Descargaste un archivo .p12, que es una clave privada después de hacer clic ¿Crear ID de cliente y seleccionar Cuenta de servicio?
  4. ¿Obtuviste una dirección de correo electrónico con el ID de cliente de una cuenta de servicio de un formulario: ¿nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. ¿Compartiste tu cuenta de Hotel Ads Center con la cuenta de servicio haciendo clic en el botón Compartir esta cuenta?
  6. ¿Enviaste la dirección de correo electrónico de la cuenta de servicio y tu ID de socio a tu administrador técnico de cuentas (TAM)?
  7. ¿Tus llamadas a Travel Partner API pasan un token obtenido recientemente en el ¿El encabezado Authorization?
  8. ¿El token del portador de tu encabezado Authorization tiene más de 1 hora de antigüedad?

En la siguiente tabla, se enumeran algunos errores comunes y posibles soluciones:

Error Descripción
Invalid credentials Esto puede significar varias cosas. Si encuentras este error, verifica lo siguiente:
  • Especificaste un encabezado Authorization con un portador válido token.
  • El token del portador tiene menos de una hora de antigüedad. Un token solo es válido por una hora.
  • Especificaste el nombre de socio correcto (con el partner de cadena de consulta). El valor es tu ID de socio único, no tu nombre del socio que aparece en Hotel Ads Center. Si no conoces a tu pareja comunícate con tu administrador técnico de cuentas (TAM).
Not found Lo más probable es que el extremo tenga errores de formato. Verifica que estás enviando un GET y que la URL de la solicitud es válida (conforme a a la sintaxis de la API a la que intentas acceder).
Invalid string value Una o más partes del extremo contienen sintaxis no válida. Por ejemplo: es posible que hayas escrito mal parte de la ruta. Comprueba si usaste el método guiones bajos, mayúsculas y palabras en toda la ruta.
Unsupported output format Este error ocurre con mayor frecuencia cuando se usa la API de Reports. Debes especifica "alt=csv" en la URL de tu GET para cada solicitud. La API de informes no admite JSON.
AccessTokenRefreshError/Invalid grant Cuando ejecutas la app de Python de muestra, este error puede deberse a de las siguientes opciones:
  • La dirección de correo electrónico de la cuenta de servicio es incorrecta. Revisa el correo electrónico en Google Developer Console y asegúrate de que esté autorizada para acceder al en la API de Cloud.
  • La dirección de correo electrónico no tiene acceso a la API. Comprueba que el correo electrónico esté autorizada para acceder a los datos de tus hoteles (que se comparten a través de Hotel Center).
  • El archivo de claves no es el correcto para la cuenta de servicio. Usa el DevConsole para descargar un nuevo certificado de .p12 y asegurarse tu aplicación de Python apunta a la correcta.
HotelAdsAPIConnection object has no attribute credentials Cuando ejecutas la app de Python de muestra, la ruta a tu .p12 es incorrecto.
Invalid scope Cuando ejecutas la app de Python de muestra, el permiso de la API debe estar https://www.googleapis.com/auth/travelpartner
Forbidden El ID de la cuenta que usas no está autorizado para acceder. Si eres el propietario de una cuenta secundaria, tal vez no puedas acceder el ID de la cuenta principal o raíz.