API OTA Rent a Car

1. Introducción

1.1 End-points

Los siguientes end-points permiten la conectividad de agencias online con la plataforma

Método URL Descripción
GET /api/booking/ota/availability Consulta la disponibilidad
POST /api/booking/ota/booking Crea una reserva
POST /api/booking/ota/cancel-booking Cancela una reserva
GET /api/booking/ota/booking Consulta información de una reserva
GET /api/booking/ota/pickup-places Consulta los lugares de entrega y devolución

1.2 Credenciales

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. El Secret Key para generar la firma digital que nos permitirá asegurar que la petición llega desde la fuente correcta.

Se utiliza HMAC-SHA256 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'
API_KEY='1234'
SECRET_KEY='5678'
data='/api/booking/ota/availability?date-from=2019-05-03&time-from=10:30&pickup-place=MALLORCA&date-to=2019-05-06&time-to=10:30&return-place=MALLORCA&customer-language=es'
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)

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

require 'openssl'
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":"MALLORCA","return_place":"MALLORCA","customer_language": "es","customer_name": "Tyrion","customer_surname": "Lannister","customer_document_id": "55555555R","customer_phone_number": "935551010","customer_mobile_phone_number": "666101010","customer_email":"info@games.com","address": {"street": "Roselló","number": "382","complement": "","city":"Barcelona","state":"Barcelona","country":"España","zip": "08025"},"products": [{"code":"0782KLR","quantity":1}],"extras":[{"code":"SEGURO-TR-A","quantity":1}],"agency_reservation_id":"1000"}}'
data = url + body

API_KEY='1234'
SECRET_KEY='5678'

signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)

1.2 Consulta la disponibilidad

Obtiene los productos, el precio y la disponibilidad para el período deseado.

GET /api/booking/ota/availability

Parámetros de la petición:

Parámetro Descripción Detalle
date-from Fecha de inicio Formato yyyy-mm-dd Obligatorio
time-from Hora de inicio Formato hh:mm Obligatorio
pickup-place Lugar de entrega Obligatorio
date-to Fecha de fin Formato yyyy-mm-dd Obligatorio
time-to Fecha de fin Formato hh:mm Obligatorio
return-place Lugar de devolución Obligatorio
customer-language Idioma de la respuesta No utilizar si el sistema sólo está preparado para un idioma. Usar el código ISO-639-1 configurado en la plataforma Opcional
sales-chanel-code Canal de venta Sólo si el sistema está configurado para múltiples canale de venta Opcional
driver-age Edad del conductor Opcional

Ejemplo de la petición:

# Ruby script to build the signature
require 'openssl'
API_KEY='1234'
SECRET_KEY='5678'
url='/api/booking/ota/availability?date-from=2019-05-03&time-from=10:30&pickup-place=MALLORCA&date-to=2019-05-06&time-to=10:30&return-place=MALLORCA&customer-language=es'
data = url
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), SECRET_KEY, data)

# Curl command
curl -H "Authorization: tSFHn8Mwedf9_jgIOJVUcCTpWRLqv7Khr2DuzlQaioNG5Ps3:260ff978cda0bf74eea8b40cd2f2fa07266a77b3" -H "Content-Type: application/json"  -X GET 'https://rentpoint.mybooking.es/api/booking/ota/availability?date-from=2019-05-03&time-from=10:30&pickup-place=MALLORCA&date-to=2019-05-06&time-to=10:30&return-place=MALLORCA&customer-language=es'

Respuesta de la petición:

Devuelve un JSON con los siguientes atributos

Atributo Descripción Detalle
success Resultado de la operación true si la operación se ha podido realizar
false en el caso de que se hayan producido errores
errors Detalle del error Si se produce un error, se detallan los errores que se hayan podido producir
response Respuesta Si la operación se ha llevado a cabo, retorna el resultado

Respuesta de ejemplo: Errores de validación en el proceso

{
"success": false,
"errors":{