# Introducción

En Mybooking casi todas las funcionalidades son accesibles mediante API. En el menú podrás ver las diferentes APIs que tenemos publicadas para poder implementar sistemas de reservas, extraer información para generar analíticas o bien para implementar aplicaciones complementarias como el sistema de check-in y check-out.

Debido a las características de las diferentes extensiones que puedes construir, hemos implementado diversos métodos de autenticación. A continuación te explicamos cómo puedes conectarte a las diferentes APIs.

# 1. Credenciales

Tenemos 4 formas de poder conectar con el API de Mybooking en función del API que se va a acceder y de si la conexión se realiza entre sistemas o bien a través de una APP que requiere la identificación del usuario.

  • Api Key y Secret Key (HMAC)
  • Api Key
  • JWT
  • Api Key del motor de reservas

Api Key y Secret Key es el método recomendado para la interconexión entre sistemas.

JWT es el método recomendado para el desarrollo de APPs que requieren la autenticación con usuario y contraseña.

El acceso al motor de reservas se implementa a través de CORS de forma que puede ser accedido desde el navegador. Para identificar la conexión se utilizará un API Key de motor de reservas

# 1.1 API Key / Secret Key

Para poder acceder al API se necesita un API Key y un Secret Key que se facilitará al usuario.

El API Key se utiliza para identificar al usuario de la petición. Se utiliza en una cabecera HTTP. El Secret Key se utiliza para generar la firma digital que nos permitirá asegurar que la petición llega desde la fuente correcta.

Esta forma de autenticación también se conoce como HMAC.

En la sección de usuarios de Mybooking puede generarse el API Key y el Secret Key para utilizarlo en el acceso a la API.

Obtener API Key y Secret Key

# 1.1.1 Usando API Key y Secret Key

Se utiliza HMAC-SHA1 para la encriptación de la firma digital. La firma digital se calculará a partir de la URL y el body de la petición junto con el Secret Key facilitados.

# 1.1.2 Cálculo firma para una petición GET

require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
# Para calcular la firma se usará la URL sin el dominio
url='/api/booking/reservation-report'
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, url)

# 1.1.3 Cálculo de la firma para una petición POST con datos JSON

require 'openssl'
SECRET_KEY='MI-SECRET-KEY'
# Para calcular la firma se usará la URL sin el dominio y el cuerpo del mensaje a enviar
url="/api/booking/ota/booking"
body='{"reservation":{"date_from":"2019-05-03","time_from":"10:00","date_to":"2019-05-07","time_to":"10:00","pickup_place":1,"return_place":1,"customer_language": "es","customer_name": "Tyrion","customer_surname": "Lannister","customer_document_id": "55555555R","customer_phone_number": "935551010","customer_email":"info@games.com","products": [{"code":"A","quantity":1}],"extras":[{"code":"ELEVADOR","quantity":1}],"agency_reservation_id":"1000"}}'
data = url + body
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)

# 1.1.4 Petición a un end-point GET usando la firma y el API Key

Una vez obtenida la firma, puede hacerse una llamada al end-point correspondiente

TIP

Se usará una cabecera HTTP Authorization con el API Key y la firma obtenida separados por :

curl -H "Authorization: {API_KEY}:{signature}" -H "Content-Type: application/json"  -X GET 'https://micuenta.com/api/booking/ota/location-list'

# 1.1.5 Petición a un end-point POST usando la firma y el API Key

TIP

Se usará una cabecera HTTP Authorization con el API Key y la firma obtenida separados por :

curl -H "Authorization: {API_KEY}:{signature}" -H "Content-Type: application/json" -d '{}' -X POST 'https://micuenta.com/api/booking/ota/booking'

# 1.1.6 Petición a en end-point GET usando la firma y el API Key en postman

TIP

Añadir el siguiente código en Pre-request Script ajustando apiKey, secretKey, data (la url completa con los parámetros)

var apiKey='THE-API-KEY';
var secretKey = 'THE-SECRET-KEY';
var data='THE-URL-WITH-QUERY-STRING';
var signBytes = CryptoJS.HmacSHA1(data, secretKey);
var signHex = CryptoJS.enc.Hex.stringify(signBytes);
var authorizationValue = apiKey + ':' + signHex;

pm.request.headers.add({
    key: "Authorization",
    value: authorizationValue 
})

TIP

Si da un error 403 eliminar la cookie rack.session

# 1.1.7 Petición a en end-point POST usando la firma y el API Key en postman

TIP

Añadir el siguiente código en Pre-request Script ajustando apiKey, secretKey, data (la url completa con los parámetros)

var apiKey='THE-API-KEY';
var secretKey = 'THE-SECRET-KEY';
var url='THE-URL-WITH-QUERY-STRING';
var body='THE-BODY';
var data = url + body; 
var signBytes = CryptoJS.HmacSHA1(data, secretKey);
var signHex = CryptoJS.enc.Hex.stringify(signBytes);
var authorizationValue = apiKey + ':' + signHex;

pm.request.headers.add({
    key: "Authorization",
    value: authorizationValue 
})

TIP

Si da un error 403 eliminar la cookie rack.session

# 1.2 API Key

Es una simplificación del modelo anterior usando sólo el API Key. Todas las llamadas al API incluyen una cabera HTTP X-API-KEY con el Api Key obtenido igual que en el paso anterior.

En la sección de usuarios de Mybooking puede generarse el API Key y el Secret Key para utilizarlo en el acceso a la API.

Obtener API Key y Secret Key

# 1.3. JWT

Todas las llamadas al API usan JWT para la autenticación del usuario. Es obligatorio autenticar el usuario y usar el token JWT para todas las llamadas al API

# 1.3.1 POST Autenticación

Cada petición a la API requiere una cabecera HTTP Authorization cuyo valor es el token JWT obtenido en la identificación.

Para poder obtener este token es necesario hacer una llamada end-point /api/v1/login con el usuario y contraseña del usuario. Si la identificación es correcta, no devolverá el token que utilizaremos en las sucesivas llamadas.

POST /api/v1/login

Autenticación del usuario

Query String

Parámetro Descripción Detalle
username Usuario Usuario o email Obligatorio
password Clave Contraseña Obligatorio

Resultado

Success

TIP

200

# 1.4. API Motor de reservas

TIP

Recomendamos usar el plugin de Wordpress (opens new window) o la librería JS (opens new window) para conectar una página web con el motor de reservas. Sin embargo, si quieres construir una APP o una solución personalizada puedes utilizar directamente el API del motor de reservas.

Para poder acceder al API del motor de reservas se necesita un API Key que puedes encontrar en la configuración del motor de reservas de tu panel de control de Mybooking.

Obtener API Key motor de reservas

# 1.3.1 Usando API Key del motor de reservas

Cualquier petición al API del motor de reservas deberá llevar un parámetro en la URL (query string) con nombre api_key y el valor obtenido en la configuración del motor de reservas. Si no se facilita el parámetro o este es erróneo el sistema devuelve un error 403