Estructura
Plataforma de Venta de Entradas
Miguel Heras & Zoel Merino
Estructura
El proyecto
EnUnMomento es una plataforma web para descubrir eventos, comprar entradas y gestionarlas de forma sencilla.
Está pensada para conciertos, teatro, deportes y otros eventos de ocio, con un funcionamiento parecido al de Ticketmaster o Eventbrite.
La idea del proyecto es cubrir todo el proceso completo: desde publicar un evento hasta validar la entrada en la puerta.
Puede buscar eventos, pagar con tarjeta y recibir su entrada en PDF con un QR único por email.
Puede crear eventos, vender distintos tipos de entrada y validar los asistentes escaneando el QR con el móvil.
Usuarios
Busca eventos, elige sus entradas, paga con tarjeta y recibe el ticket en el correo en PDF con su código QR.
Puede crear eventos, editarlos, consultar asistentes y validar entradas escaneando códigos QR.
Tiene control global sobre la plataforma: usuarios, gestión general y estadísticas.
Cada perfil solo ve lo que le corresponde. Un comprador no puede acceder al panel de administración — el sistema lo controla automáticamente.
Tecnologías
Hemos programado toda la estructura desde cero usando una arquitectura MVC propia en PHP. Nos ha obligado a entender de verdad cómo funciona el enrutamiento y cada pieza de una aplicación web real.
Funcionamiento
Datos
Los datos están conectados entre sí. Por ejemplo, un pedido pertenece a un usuario y una entrada pertenece a un evento concreto.
Esto permite saber quién compró qué, para qué evento y si esa entrada ya se ha utilizado.
A nivel visual, la base de datos se organiza como se ve en este diagrama de tablas y relaciones:
🔍 Haz clic en la imagen para verla a tamaño completo
Infraestructura
La aplicación está desplegada en un servidor VPS dedicado (Ubuntu/Debian) que hemos configurado desde cero con Apache2.
Antes de llegar al servidor de origen, el tráfico pasa por el proxy de Cloudflare (Edge), actuando como filtro de seguridad y gestionando los DNS.
El dominio enunmomento.com está registrado en Spaceship. El correo de la plataforma también usa Spacemail, gestionando las salidas SMTP de forma segura.
Seguridad
Analiza los registros en tiempo real y bloquea automáticamente en el firewall las IPs que realizan intentos de acceso fallidos o ataques de fuerza bruta.
Filtra peticiones maliciosas y absorbe ataques de denegación de servicio (DDoS), ocultando además la IP real de nuestro servidor origen.
Todo el tráfico se redirige a HTTPS. Además, la cabecera HSTS fuerza a los navegadores a conectarse siempre y exclusivamente mediante un canal cifrado.
Cookies de sesión endurecidas (HttpOnly, SameSite=Strict) para evitar robos. Contraseñas protegidas con algoritmos de hashing fuertes (Bcrypt).
Uso sistemático de Prepared Statements en la BD. Los archivos internos (PDFs, QRs) no son accesibles directamente desde el navegador web.
Nuestra base de datos jamás toca ni procesa números de tarjeta. Todo el flujo financiero recae sobre la infraestructura certificada de Stripe.
Desarrollo
Para maximizar el aprendizaje, el backend se ha construido desde cero implementando el Patrón MVC (Modelo-Vista-Controlador) en PHP sin utilizar frameworks de terceros, garantizando un control total del enrutamiento y la lógica de negocio.
Sistemas
Se ha desarrollado un script diseñado para actuar si la comunicación en tiempo real con Stripe falla (caídas de red, timeout en el webhook).
Este proceso consulta directamente el estado real a Stripe. Si detecta un pedido pagado atascado en "pendiente", lo fuerza a generar las entradas y enviar los emails, evitando pérdidas al usuario.
Configura permisos, entorno Apache y MySQL en el servidor productivo de un plumazo.
Rutina bash para volcar la base de datos de manera segura y limpiar históricos antiguos.
Demostración
La plataforma está en producción en www.enunmomento.com — con dominio propio, HTTPS, Cloudflare Proxy y pagos en vivo con Stripe.
Diccionario
Una forma de ordenar el código para no volverse loco. Separa la base de datos (Modelo), lo que ve el usuario (Vista) y el cerebro que decide (Controlador).
Es como un SMS automático. Es el sistema que usa Stripe para avisar instantáneamente a nuestra web de que un pago se ha hecho con éxito.
Un "Servidor Privado Virtual". Básicamente, es un ordenador que alquilamos en la nube y que está encendido 24/7 solo para nuestra página.
Es como el "portero de la discoteca". Se pone en medio de internet y nuestro servidor para filtrar ataques y evitar que la web se sature o caiga.
Seguridad imprescindible. Obliga a que la base de datos separe las instrucciones de los datos, evitando que un hacker cuela código malicioso.
Tener un "Plan B". Un programa que revisa si ha habido algún fallo de internet en un pago para solucionarlo sin que el cliente pierda su entrada.
Un "perro guardián" automático en el servidor. Si alguien mete mal la contraseña muchas veces seguidas intentando hackearnos, le bloquea la conexión.
Ocurre cuando miles de ordenadores "zombie" intentan entrar a la vez para colapsar y tirar la web. Nuestro sistema Anti-DDoS frena esa avalancha.
Una regla estricta que le dice a tu navegador: "A esta web solo se entra por la vía segura (HTTPS), ni se te ocurra intentar la versión sin cifrar".
Conclusiones
Se ha desarrollado una plataforma completa capaz de publicar eventos, vender entradas, enviar tickets y validarlos en el acceso.
El proyecto nos ha permitido trabajar desarrollo web, arquitectura de software, bases de datos y administración de sistemas en Linux.
EnUnMomento ha sido una forma de unir desarrollo web, administración de sistemas y seguridad en un proyecto funcional y con aplicación real.