Checklist de Certificación (Go-Live)
Autenticación
- [ ]
POST /sales-channel/v1/auth/tokenconwidget_keyválida devuelve Bearer token. - [ ] Bearer token se incluye correctamente en cabecera
Authorization. - [ ] Token expirado/revocado responde 401.
- [ ]
widget_keyincorrecta responde 401.
Funcional
- [ ] El widget carga mapa para
sessionIdválida. - [ ] Añadir/quitar asientos actualiza carrito y total.
- [ ] Descuentos (aplicar/eliminar) funcionan.
- [ ] Carrito vacío no muestra countdown.
- [ ] Al volver a añadir, countdown reaparece.
Modelo de integración
Verificar que el modelo configurado en el dashboard coincide con el acuerdo contractual:
Modelo A (portal_only) — Portal beTickets, cobro beTickets
- [ ] El portal carga con el branding correcto del canal.
- [ ]
POST /portal/{slug}/{lang}/checkoutdevuelve parámetros Redsys válidos. - [ ] Llamar a
confirmcon token del canal devuelve 403. - [ ] Llamar a crear orden B2B devuelve 403.
Modelo B (portal_external_payment) — Portal beTickets, cobro del canal
- [ ] El campo
checkout_urlestá configurado en el canal y apunta a la página de checkout del canal. - [ ] El portal carga con el branding correcto del canal.
- [ ] Al pasar al pago, el portal redirige a
{checkout_url}?order_token={token}. - [ ] La página de checkout del canal lee
?order_token=y consultaGET /portal/{slug}/{lang}/orders/{token}correctamente. - [ ]
confirmserver-to-server con datos del comprador (name,surname,email,phone) cierra la orden y envía entradas. - [ ] Llamar a crear orden B2B devuelve 403.
- [ ]
confirmdesde el navegador del comprador está prohibido en la implementación del canal.
Modelo C (widget_betickets_payment) — Widget, cobro beTickets
- [ ] Widget carga y muestra botón de checkout.
- [ ] Al pulsar checkout, el navegador redirige a
{portal_checkout_base_url}/{slug}/{lang}/checkout?order_token={token}. - [ ] La URL de redirect proviene del backend (
portal_checkout_base_url), no está hardcodeada en el integrador. - [ ] El portal carga el branding del canal correctamente a partir del
order_token. - [ ] El pago en el portal completa la orden y envía los tickets.
- [ ] Llamar a
confirmcon token del canal devuelve 403.
Modelo D (widget_external_payment) — Widget, cobro del canal
- [ ] Widget carga sin botón de checkout integrado (
showCheckoutButton = false). - [ ]
onOrderUpdatesincroniza estado del host correctamente. - [ ]
confirmserver-to-server cierra la orden correctamente. - [ ] Intentar llamar a
/portal/{slug}/{lang}/checkoutdevuelve 403. - [ ]
confirmdesde el navegador del comprador está prohibido en la implementación del canal.
Integración host (modelos C y D)
- [ ] El widget se carga con
BeTickets.init()explícito (no auto-inicialización por atributos). - [ ] El widget se autoconfigura desde
/config; el integrador no pasacheckoutModenicheckoutBaseUrl. - [ ]
onOrderUpdatesincroniza estado del host correctamente. La orden tiene estructuraevents[].sessions[].items[]. - [ ] Botón de pago externo al widget presente y funcional (solo modelo D).
- [ ]
POST /confirmincluyename,surname,emaildel comprador (requeridos). - [ ] Si hay múltiples sesiones en la misma página, se usa
instance.destroy()antes de cada reinicialización.
Seguridad
- [ ] Bearer token de canal A con slug B en la URL responde 403.
- [ ]
widget_keyrevocada: el token anterior queda invalidado. - [ ] Endpoint
auth/tokencon credenciales incorrectas responde 401 (no revela si el slug existe).
Operación
- [ ] Logs de auditoría verificables.
- [ ] Runbook compartido con soporte.
- [ ] Contactos de escalado definidos.
- [ ] Integración validada en preproducción antes de go-live en producción.