Descripción general
Cada pago en tikento pasa por una secuencia determinada de estados. Las transiciones entre estados ocurren automáticamente basándose en las notificaciones webhook de la pasarela de pago. El organizador ve el estado actual en la sección Participantes y en el detalle del registro.
Estados del pago
| Estado | Descripción |
|---|---|
pending | Pago creado, el participante fue redirigido a la página de pago de la pasarela |
paid | Dinero recibido, la pasarela confirmó el pago a través de webhook |
failed | El pago no se procesó (fondos insuficientes, tarjeta bloqueada, error de 3D Secure) |
expired | El participante no completó el pago en el tiempo asignado (30 minutos) |
refunded | Reembolso completado en su totalidad |
partially_refunded | Se realizó un reembolso parcial |
Diagrama de transiciones
creación del pago
│
▼
┌────────┐
│pending │
└───┬────┘
│
┌───────┼───────┐
▼ ▼ ▼
┌──────┐ ┌────┐ ┌───────┐
│failed│ │paid│ │expired│
└──────┘ └─┬──┘ └───────┘
│
┌──────┴──────┐
▼ ▼
┌──────────┐ ┌──────────────────┐
│refunded │ │partially_refunded│
└──────────┘ └──────────────────┘
Las transiciones son irreversibles: paid no puede volver a pending, y refunded no puede volver a paid.
Reserva (Reservation)
Antes de crear el pago, tikento crea una reserva — una retención temporal del boleto para que no se lo lleve otro participante mientras el primero está pagando.
Cómo funciona la reserva
- El participante hace clic en «Pagar» — tikento crea una reservation con
TTL de 15 minutos. - De la cantidad disponible de boletos se descuenta la plaza reservada.
- El participante es redirigido a la página de pago de la pasarela.
- Si el pago se completa, la reserva se convierte en un registro confirmado.
- Si el TTL expira, la reserva se libera automáticamente y el boleto vuelve a estar disponible.
La reserva previene la situación en la que dos participantes pagan el último boleto simultáneamente.
Procesamiento de webhooks
tikento conoce el resultado del pago a través de un webhook — una solicitud HTTP de la pasarela de pago a los servidores de tikento.
Secuencia
- La pasarela (YooKassa, Tochka, Telegram) envía una solicitud POST a la URL del webhook de tikento.
- tikento verifica la firma de la solicitud (cada pasarela utiliza su propio mecanismo de firma).
- El pago actualiza su estado en la base de datos.
- Si el estado es
paid, el registro del participante se confirma y se envía un email con el boleto. - Si el estado es
failedoexpired, la reserva se libera.
Reintentos de entrega
Si tikento no pudo procesar el webhook (por ejemplo, devolvió un 5xx), la pasarela reintenta el envío:
- YooKassa: hasta 10 intentos con retardo exponencial
- Tochka: hasta 5 intentos con intervalo de 5 minutos
Gracias a las claves de idempotencia, el reprocesamiento del mismo webhook es seguro y no crea duplicados.
Protección de idempotencia
Cada operación de pago en tikento está protegida por una clave de idempotencia — un identificador único que garantiza que la operación se ejecuta exactamente una vez.
Por qué es necesario
- El participante pulsó «Pagar» dos veces accidentalmente — solo se crea un pago
- El webhook llegó repetido por un timeout — el estado se actualiza una sola vez
- Un fallo de red interrumpió la solicitud, el cliente reenvió — el dinero no se cobra dos veces
Cómo funciona
- Al crear el pago, tikento genera un
Idempotency-Key(UUIDv7). - La clave se envía en el encabezado de la solicitud a la pasarela.
- Si la pasarela recibe una solicitud repetida con la misma clave, devuelve el resultado de la primera operación.
- tikento almacena la clave en caché en Redis con TTL de 24 horas.
Relación entre estados de pago y registro
El estado del pago afecta directamente al estado de registro del participante:
| Estado del pago | Estado del registro | Qué ve el participante |
|---|---|---|
pending | payment_pending | «Pendiente de pago» |
paid | registered | «Registrado», recibe el boleto por email |
failed | payment_failed | «El pago no se completó», se ofrece reintentar |
expired | expired | «El tiempo de pago expiró», se ofrece comenzar de nuevo |
refunded | refunded | «Reembolso procesado» |
Cuando la moderación está activada, entre el pago y el estado final registered puede haber una etapa intermedia de revisión por parte del organizador.
Consulta del historial de pagos
Todos los pagos y sus estados están disponibles en la sección Participantes de su evento. Para cada registro se muestran:
- Estado actual del pago
- Método de pago (tarjeta, SBP, Stars)
- Monto y moneda
- Fecha y hora de creación / pago / devolución
- Clave de idempotencia (para diagnóstico)
- Historial de transiciones entre estados
Para exportar datos de pagos — Exportación de pagos e informes.