Confirmación de precios y ciclo de vida del token
Los precios de los hoteles son dinámicos: pueden cambiar entre el momento en que un huésped ve la disponibilidad y el momento en que decide reservar. El paso de confirmación de precios fija una tarifa y devuelve un nuevo token que es válido para reservar. Este artículo explica el flujo de dos tokens, por qué es importante y cómo manejar la caducidad de los tokens.
¿Por qué dos fichas?
El flujo de reserva utiliza dos tokens secuenciales:
- Token de disponibilidad: se obtiene del punto final Verificar disponibilidad. Identifica una configuración específica de habitación, tarifa y cama. Este token no es una garantía de precio.
- Token de precio: obtenido del punto final Confirmar precio (este artículo). Fija el precio exacto por hasta 10 minutos. Este es el token que utilizas para reservar.
Importante: No debes utilizar el token de disponibilidad directamente para reservar. Llame siempre primero al punto final de confirmación de precios para obtener un token de precio. Intentar reservar con un token de disponibilidad fallará.
Diagrama de flujo de tokens
Check Availability ↓availabilitytoken (identifies room/rate — price may change) ↓Confirm Price ↓pricingtoken (locked price — valid for 10 minutes) ↓SSO Checkout / Create Booking
*
Confirmar precio final
Punto final
GET /hotels/api/v2/properties/price?availability_token={token}¤cy={currency}
Parámetros de consulta
| Parámetro | Tipo XENIKBPH16 | Requerido | Descripción | XENIKBPH21
|---|---|---|---|
tokendedisponibilidadXENIKBPH 27 | string | Sí | El availabilitytoken de rates[].beds[].availabilitytoken en la disponibilidad respuesta. |
monedaXENIKBPH43 | string | No | Moneda por el precio cotizado. Valor predeterminado: USD. |
Solicitud de ejemplo
GET /hotels/api/v2/properties/price?availabilitytoken=eyJhbGciOiJIUzI1NiJ9.room101...¤cy=USDAuthorization: {signature}x-correlation-id: {correlationid}Content-Type: application/json
Ejemplo de respuesta
{
"data": {
"total_price": 891.08,
"base_price": 756,
"taxes": 95.08,
"fees": 40,
"currency": "USD",
"pricingtoken": "eyJhbGciOiJIUzI1NiJ9.pricingfinal..."
}
}Campos de respuesta
| Campo | XEN IKBPH61TipoDescripción | |
|---|---|---|
preciototal | número | Final precio total incluyendo todos los impuestos y tarifas. |
basepr hielo | número | Habitación tasa antes de impuestos y tasas. |
impuestos s | número | Impuesto monto. |
honorariosX ENIKBPH101 | número | Servicio y reserva tarifas. |
moneda | cadena | Moneda código para el citado precio. |
pricingtokenXE NIKBPH_121__ | string | El token a usar para la reserva. Este es un nuevo token, diferente del token de disponibilidad que envió. |
Punto clave: El pricingtoken en la respuesta es un token nuevo y diferente del availabilitytoken que proporcionaste en la solicitud. Debe utilizar este nuevo pricing_token para el paso de pago o reserva de SSO.
*
Ciclo de vida y vencimiento del token
Token de disponibilidad- Fuente: rates[].beds[].availability_token de la respuesta de disponibilidad.
- Validez: De corta duración. La disponibilidad y los precios pueden cambiar en cualquier momento.
- Uso: Pasar únicamente al punto final de confirmación de precios.
- Recomendación: Confirmar el precio tan pronto como el huésped seleccione una habitación. No almacene en caché los tokens de disponibilidad durante períodos prolongados.
Ficha de precios
- Fuente:
pricing_tokende la respuesta de confirmación de precios. - Vigencia: 10 minutos desde el momento de su emisión.
- Uso: Pase a la URL de pago de SSO o al punto final de creación de reservas.
- Al vencimiento: Si el token vence antes de que el huésped complete el pago, debes repetir la verificación de disponibilidad y la confirmación de precio para obtener un nuevo token.
Manejo de tokens caducados
Si un token de precio ha caducado (más de 10 minutos desde la confirmación), la reserva o el pago fallarán. Maneja esto con gracia:
- Realice un seguimiento de cuándo se emitió el token de precio (almacene una marca de tiempo junto a él).
- Antes de generar una URL de pago, verifique si el token todavía se encuentra dentro de su ventana de 10 minutos.
- Si caducó, vuelva a ejecutar de forma transparente la verificación de disponibilidad y la confirmación del precio antes de presentar el enlace de pago.
- Informar al huésped si el precio ha cambiado entre confirmaciones.
Ejemplo: verificación de vencimiento del token (JavaScript)
function isPricingTokenValid(tokenIssuedAt) { const TENMINUTESMS = 10 60 1000; return (Date.now() - tokenIssuedAt) < TENMINUTESMS;}
// Before booking:if (!isPricingTokenValid(session.priceLockedAt)) { // Re-run availability check → confirm price → get new token const availability = await checkAvailability(hotelId, dates, occupancy); const pricing = await confirmPrice(availability.token); session.pricingToken = pricing.pricingToken; session.priceLockedAt = Date.now();}
*
Cambios de precio entre pasos
Es posible que el precio confirmado difiera de la tarifa inicial mostrada durante la búsqueda de hotel o verificación de disponibilidad. Esto puede suceder debido a:
- Precios dinámicos: las tarifas se ajustan según la demanda en tiempo real.
- Fluctuaciones de moneda: si se muestran los precios en una moneda no predeterminada.
- Inventario limitado: es posible que la tarifa mostrada originalmente se haya agotado, lo que da como resultado un nivel de tarifa diferente.
Muestre siempre el precio confirmado desde el punto final de fijación de precios como el precio final que pagará el huésped. La respuesta de confirmación de precios es la fuente de la verdad.
*
Resumen: qué almacenar en cada paso
| Paso | Valores a Tienda |
|---|---|
| Verificar Disponibilidad | room.id, rates[].beds[].availabilitytoken, propertyid |
| Confirmar Precio | pricingtoken, totalprice, marca de tiempo de cuando se emitió el token emitido |
| SSO Pago | Utilice el pricingtoken + room.id + propertyid para construir el URL |
*
_Próximo artículo: Reservar hoteles mediante SSO Checkout
_