Autorización mediante la API

En esta documentación, se proporcionan instrucciones paso a paso para configurar OAuth2.0 en tu aplicación cuando accedes a las APIs de hoteles, como la API de Travel Partner y la API de Price Feeds. Consulta Usa OAuth 2.0 para acceder a las APIs de Google para autorizar tu aplicación.

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 clave privada a cambio de un token de acceso de OAuth 2.0. Luego, puedes usar este token en llamadas a las APIs de hoteles para obtener datos de solo lectura, como los precios, los hoteles y los informes de diagnóstico de tu feed de precios de hoteles.

Los tokens de acceso son válidos durante 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.
  • Cuando llamas a las APIs, pasas un token de acceso de OAuth 2.0 en el encabezado HTTP Authorization.

Para configurar tu cuenta para usar OAuth 2.0 con cualquier API de Hoteles, sigue estos pasos:

  1. Crea un proyecto nuevo en la consola de Google Cloud

  2. Crea una cuenta de servicio y sus credenciales

  3. Cómo otorgarle acceso a tus datos de hoteles a tu cuenta de servicio

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

Paso 1: Crea un proyecto nuevo de la consola de Google Cloud

La consola de Google Cloud se usa para administrar y ver los datos de tráfico, la autenticación y la información de facturación de las APIs de Google que usan tus proyectos.

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

La consola de Google Cloud también se usa para generar credenciales de API, activar APIs y administrar la información de facturación y del equipo asociada con tu proyecto.

Para crear un proyecto nuevo de la consola de Google Cloud, sigue estos pasos:

  1. Accede a tu cuenta de Gmail o de Google.

  2. Abre Google Cloud Console Si es tu primer proyecto, la vista principal mostrará el botón CREATE PROJECT:

    fig1

  3. Haz clic en el botón CREAR PROYECTO. La consola de Google Cloud muestra el diálogo New Project:

    fig2

    Ingresa un nombre descriptivo para tu proyecto nuevo en el campo de entrada Nombre del proyecto. Debajo del campo, la consola de Google Cloud genera un ID del proyecto por ti, lo que garantiza que el ID sea único en todos los proyectos. Por ejemplo, si ingresas "Mi nuevo proyecto", la consola de Google Cloud asigna un ID como my-new-project-266022.

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

  5. Usa el menú de navegación para seleccionar APIs y servicios > Panel.

    fig3

    En la siguiente imagen, se muestra el menú de navegación en la parte superior izquierda de la consola de Google Cloud. Se mostrará la vista Panel de tu proyecto:

    fig4

Para obtener más información, consulta Cómo crear y administrar proyectos.

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

Las cuentas de servicio se usan en las interacciones de servidor a servidor, como las que se establecen entre una aplicación web y tus datos de hotel.

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

  1. En la vista principal de la consola de la API de Google, haz clic en Credenciales en la navegación de la izquierda. La consola de Google Cloud muestra la vista Credenciales.

    En la vista Credentials, se muestran los IDs de cliente y las credenciales de tu proyecto. Tu aplicación usa el ID de cliente cuando solicita un token de acceso de OAuth 2.0. Los proyectos nuevos aún no tienen clientes ni credenciales.

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

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

  4. En el filtro Cuenta de servicio, selecciona Cuenta de servicio nueva.

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

    El nombre puede ser el que quieras, pero el ID de la cuenta debe ser único en todos los proyectos. La consola de Google Cloud genera un ID de cuenta único para ti, según el nombre que ingresaste.

  6. Selecciona JSON para el tipo de clave. Se requiere JSON.

  7. Haz clic en el botón Crear. La consola de Google Cloud genera un par de claves pública o privada para tu proyecto. La clave privada se guarda en la ubicación predeterminada en la que tu navegador almacena las descargas. Debes descargar el archivo en formato .JSON.

    Usas la clave privada en tus secuencias de comandos o en otras aplicaciones que acceden a tu API.

    La consola de Google Cloud muestra el mensaje “Se creó la cuenta de servicio” cuando termina de generar las claves.

  8. Haz clic en el botón De acuerdo, entiendo. La consola de Google Cloud te redireccionará a la vista Credenciales. Para confirmar los detalles de tu cuenta de servicio y ver la cuenta de servicio asociada con 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: Es un identificador único que usa tu aplicación cuando solicita un token de acceso de OAuth 2.0.
    • Dirección de correo electrónico: Es una dirección de correo electrónico generada para la cuenta de servicio, en el formato “nombre_de_cuenta@nombre_del_proyecto.google.com.iam.gserviceaccount.com”.
    • Huellas digitales de certificados: Es el ID de la clave privada que descargaste.

Para obtener más información, consulta Cómo usar OAuth 2.0 para aplicaciones de servidor a servidor.

Paso 3: Otorga acceso a los datos de Hotel Center a la cuenta de servicio

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

Si no tienes el acceso adecuado para agregar usuarios a la cuenta, comunícate con el equipo de Google Hoteles mediante el formulario de Comunícate con nosotros y solicita configurar 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.

Para otorgarle acceso a una cuenta de servicio a tus datos de Hotel Center, sigue estos pasos:

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

  2. En el banner de Hotel Center by Google, haz clic en el ícono de agregar usuario para abrir el diálogo de uso compartido.

    fig8

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

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

  5. Selecciona Administrar en el filtro.

  6. Haz clic en el botón Invitar.

  7. Después de agregar usuarios a tu cuenta de Hotel Center, tu cuenta de servicio debería estar habilitada para el acceso a la API en un plazo de 24 horas.

Después de que Google te notifique que el acceso a la API está habilitado para tu cuenta de servicio, podrás comenzar a acceder a la API con OAuth 2.0.

Cómo usar OAuth 2.0

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

Consulta Prepárate para realizar una llamada a la API delegada.

Permisos

Los siguientes son los SCOPES de la API de Hotels:

API de Travel Partner: "https://www.googleapis.com/auth/travelpartner"

API de Price Feeds: "https://www.googleapis.com/auth/travel-partner-price-upload"

Debes especificar la cuenta de servicio cuando crees las credenciales. Consulta Crea una cuenta de servicio y genera sus credenciales.

Cuando desarrolles tu aplicación, asegúrate de seguir las prácticas recomendadas para autenticarla con claves de API. Obtén más información.

Ejemplo

from google.oauth2 import service_account
from google.auth.transport.requests import Request

# You can use a single or multiple scopes
SCOPES =
['https://www.googleapis.com/auth/travel-partner-price-upload','https://www.googleapis.com/auth/travelpartner']
SERVICE_ACCOUNT_FILE = 'service_account_key_file.json'

cred = service_account.Credentials.from_service_account_file(
                        SERVICE_ACCOUNT_FILE,
                        scopes=SCOPES)
cred.refresh(Request())
headers = {}
cred.apply(headers)

API de Travel Partner

La API de Travel Partner permite a los socios de alojamientos recuperar información de Hotel Center y cambiar sus datos para administrar cuentas grandes o complejas.

Sigue las instrucciones de configuración de OAuth 2.0 para obtener la autorización de tu API de Travel Partner.

Cuando creas un proyecto nuevo para la API de Travel Partners, debes habilitar el acceso a tu proyecto nuevo de la consola de Google Cloud.

Sigue los pasos para habilitar el acceso a la API de Travel Partners:

  1. Ve a la vista Panel de tu proyecto.

  2. Haz clic en Habilitar APIs y servicios. Se mostrará la página de bienvenida de la biblioteca de APIs.

  3. En el campo de búsqueda, comienza a escribir "API de Travel Partner" y, luego, la consola mostrará una lista de APIs que coincidan con lo que escribas.

  4. Haz clic en la API que coincida en la tabla. La consola de Google Cloud muestra una descripción sobre esa API.

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

Para obtener más información, consulta Habilita o inhabilita servicios.

La API de Travel Partner ahora está habilitada para el proyecto nuevo de tu Cuenta de Google.

El alcance de la API de Travel Partner es el siguiente: "https://www.googleapis.com/auth/travelpartner"

El extremo de la API de Travel Partner es el siguiente: "https://travelpartner.googleapis.com/v3/accounts/<account_id>/<path>"

API de Price Feeds

La API de Price Feeds permite que los socios de alojamiento proporcionen datos de precios personalizados para cada hotel. Los socios de alojamientos de Google pueden usar OAuth2.0 para autenticarse y autorizarse cuando suben precios a Google. Sigue las instrucciones de configuración de OAUTH 2.0 para obtener la autorización de la API de Price Feeds.

Puntos que debes recordar

Ten en cuenta las diferencias importantes en las instrucciones de autorización de la API de Price Feeds.

  1. Los socios deben crear un nuevo proyecto de OAuth2.0 de feeds de precios en la consola de Google Cloud con las mismas instrucciones que se proporcionan en la configuración de OAuth 2.0.

  2. NOT es necesario habilitar la API de Price Feeds en la consola de Google Cloud y se puede ignorar. Solo necesitas una cuenta de servicio y una clave, y luego usar la misma cuenta de servicio y clave para otorgar acceso al proyecto de feeds de precios a tus datos de Hotel Center. Sigue los pasos restantes que se mencionan en la configuración de OAuth2.0 para completar la configuración de tu API.

Obtén un token de acceso de OAuth2.0 para los feeds de precios

El siguiente paso es obtener un token de acceso de OAuth2.0 con el permiso de carga de precios de alojamiento con el archivo de clave de la cuenta de servicio. Para autorizar las solicitudes a tu proyecto de feeds de precios, sigue las instrucciones que se proporcionan en Cómo prepararse para realizar una llamada a la API delegada y, luego, extrae el token de acceso de las credenciales adquiridas y configúralo en el encabezado HTTP "Authorization".

El alcance de la carga de precios de alojamiento es el siguiente: "https://www.googleapis.com/auth/travel-partner-price-upload"

Sube precios

Después de obtener el token de acceso, los socios pueden subir su feed de precios de manera similar a como se usa la IP estática para la autenticación y autorización con la siguiente modificación:

  • Configura el token de acceso en el encabezado HTTP "Authorization"
curl -X POST -H "Authorization: Bearer <access token>"
www.google.com/travel/lodging/uploads/accounts/<account_id>/ota/hotel_rate_amount_notif --data-binary @<price_feed_file_location>

Prueba la configuración de OAuth2.0 para la API de Price Feeds

Para probar tu configuración de OAuth2.0, sube un archivo vacío o con datos de precios reales a cualquiera de las rutas de carga. Usa la tabla para verificar el estado de tu respuesta HTTP.

Estado de la respuesta HTTP Mensaje
200 Successful (OK)
401 Service account creation or access token fetch was not successful
403 Service account access wasn't granted to the Hotel Center account or both the service account key and access token has expired

Solución de problemas

¿Tienes problemas? Es posible que una revisión rápida de los siguientes elementos resuelva el problema.

  1. ¿Creaste un proyecto en la consola de Google Cloud?
  2. ¿Habilitaste el servicio en tu proyecto?
  3. ¿Descargaste un archivo .JSON, una clave privada, después de hacer clic en Crear ID de cliente y seleccionar Cuenta de servicio?
  4. ¿Recibiste una dirección de correo electrónico de ID de cliente de cuenta de servicio con el formato 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 la API pasan un token obtenido recientemente en el encabezado Authorization?
  8. ¿Tu token 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 token del portador válido.
  • El token portador tiene menos de una hora de antigüedad. Un token solo es válido durante una hora.
  • Especificaste el nombre de socio correcto (con el parámetro de cadena de consulta partner ). El valor es tu ID de socio único, no el nombre de socio que aparece en Hotel Ads Center. Si no conoces tu ID de socio, comunícate con tu administrador técnico de cuentas (TAM).
Not found Es probable que tu extremo tenga un formato incorrecto. Verifica que envíes una solicitud GET y que la URL de la solicitud sea válida (se ajuste 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 de acceso. Verifica que usaste los guiones bajos, las mayúsculas y las palabras correctos en toda la ruta.
Unsupported output format Este error suele ocurrir con más frecuencia cuando se usa la API de Reports. Debes especificar "alt=csv" en la URL de tu solicitud GET. La API de informes no admite JSON.
AccessTokenRefreshError/Invalid grant Cuando ejecutas tu app, este error puede deberse a lo siguiente:
  • La dirección de correo electrónico de tu cuenta de servicio es incorrecta. Verifica la cuenta de correo electrónico en la consola de Google Cloud y asegúrate de que tenga autorización para acceder a tu API.
  • La dirección de correo electrónico no tiene acceso a la API. Verifica si la dirección de 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 la consola de Google Cloud para descargar un nuevo certificado .JSON y asegúrate de que tu app apunte al correcto.
HotelAdsAPIConnection object has no attribute credentials Cuando se ejecuta la app, la ruta de acceso al archivo .JSON es incorrecta.
Invalid scope Cuando ejecutes la app, el alcance de la API debe ser uno de los siguientes:
  • "https://www.googleapis.com/auth/travelpartner"
  • "https://www.googleapis.com/auth/travel-partner-price-upload"
Forbidden El ID de la cuenta que usas es uno al que no tienes autorización para acceder. Si eres propietario de una cuenta secundaria, es posible que no puedas acceder al ID de la cuenta principal o raíz.