Skip to content

Checklist de Certificación (Go-Live)

Autenticación

  • [ ] POST /sales-channel/v1/auth/token con widget_key válida devuelve Bearer token.
  • [ ] Bearer token se incluye correctamente en cabecera Authorization.
  • [ ] Token expirado/revocado responde 401.
  • [ ] widget_key incorrecta responde 401.

Funcional

  • [ ] El widget carga mapa para sessionId vá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}/checkout devuelve parámetros Redsys válidos.
  • [ ] Llamar a confirm con 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_url está 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 consulta GET /portal/{slug}/{lang}/orders/{token} correctamente.
  • [ ] confirm server-to-server con datos del comprador (name, surname, email, phone) cierra la orden y envía entradas.
  • [ ] Llamar a crear orden B2B devuelve 403.
  • [ ] confirm desde 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 confirm con token del canal devuelve 403.

Modelo D (widget_external_payment) — Widget, cobro del canal

  • [ ] Widget carga sin botón de checkout integrado (showCheckoutButton = false).
  • [ ] onOrderUpdate sincroniza estado del host correctamente.
  • [ ] confirm server-to-server cierra la orden correctamente.
  • [ ] Intentar llamar a /portal/{slug}/{lang}/checkout devuelve 403.
  • [ ] confirm desde 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 pasa checkoutMode ni checkoutBaseUrl.
  • [ ] onOrderUpdate sincroniza estado del host correctamente. La orden tiene estructura events[].sessions[].items[].
  • [ ] Botón de pago externo al widget presente y funcional (solo modelo D).
  • [ ] POST /confirm incluye name, surname, email del 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_key revocada: el token anterior queda invalidado.
  • [ ] Endpoint auth/token con 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.

beTickets — Plataforma de ticketing