Panoramica
Ogni pagamento in tikento attraversa una determinata sequenza di stati. Le transizioni tra gli stati avvengono automaticamente sulla base delle notifiche webhook dal gateway di pagamento. L'organizzatore visualizza lo stato attuale nella sezione Partecipanti e nel dettaglio della registrazione.
Stati del pagamento
| Stato | Descrizione |
|---|---|
pending | Pagamento creato, il partecipante e stato reindirizzato alla pagina di pagamento del gateway |
paid | Fondi ricevuti, il gateway ha confermato il pagamento tramite webhook |
failed | Il pagamento non e andato a buon fine (fondi insufficienti, carta bloccata, errore 3D Secure) |
expired | Il partecipante non ha completato il pagamento entro il tempo previsto (30 minuti) |
refunded | Rimborso completato integralmente |
partially_refunded | Rimborso parziale effettuato |
Diagramma delle transizioni
creazione pagamento
|
v
+--------+
|pending |
+---+----+
|
+-------+-------+
v v v
+------+ +----+ +-------+
|failed| |paid| |expired|
+------+ +-+--+ +-------+
|
+------+------+
v v
+----------+ +------------------+
|refunded | |partially_refunded|
+----------+ +------------------+
Le transizioni sono irreversibili: paid non puo tornare a pending, e refunded non puo tornare a paid.
Prenotazione (Reservation)
Prima della creazione del pagamento, tikento crea una prenotazione — un blocco temporaneo del biglietto, per evitare che venga assegnato a un altro partecipante mentre il primo sta pagando.
Come funziona la prenotazione
- Il partecipante preme «Paga» — tikento crea una reservation con
TTL 15 minuti. - Dalla quantita disponibile di biglietti viene detratto il posto prenotato.
- Il partecipante viene reindirizzato alla pagina di pagamento del gateway.
- Se il pagamento va a buon fine — la prenotazione si trasforma in una registrazione confermata.
- Se il TTL scade — la prenotazione viene automaticamente rilasciata, il biglietto torna disponibile.
La prenotazione previene la situazione in cui due partecipanti pagano l'ultimo biglietto contemporaneamente.
Elaborazione webhook
tikento viene informato del risultato del pagamento tramite webhook — una richiesta HTTP dal gateway di pagamento ai server tikento.
Sequenza
- Il gateway (YooKassa, Tochka, Telegram) invia una richiesta POST all'URL webhook di tikento.
- tikento verifica la firma della richiesta (ogni gateway utilizza il proprio meccanismo di firma).
- Il pagamento aggiorna lo stato nel database.
- Se lo stato e
paid— la registrazione del partecipante viene confermata, viene inviata un'email con il biglietto. - Se lo stato e
failedoexpired— la prenotazione viene rilasciata.
Consegne ripetute
Se tikento non e riuscito a elaborare il webhook (ad esempio, ha restituito 5xx), il gateway ripete la richiesta:
- YooKassa: fino a 10 tentativi con ritardo esponenziale
- Tochka: fino a 5 tentativi con intervallo di 5 minuti
Grazie alle chiavi di idempotenza, l'elaborazione ripetuta dello stesso webhook e sicura e non crea duplicati.
Protezione idempotency
Ogni operazione di pagamento in tikento e protetta da una chiave di idempotenza — un identificativo univoco che garantisce che l'operazione venga eseguita esattamente una volta.
Perche e necessario
- Il partecipante ha premuto accidentalmente «Paga» due volte — viene creato un solo pagamento
- Il webhook e arrivato nuovamente a causa di un timeout — lo stato viene aggiornato una sola volta
- Un'interruzione di rete ha interrotto la richiesta, il client ha inviato un nuovo tentativo — i fondi non vengono addebitati due volte
Come funziona
- Alla creazione del pagamento tikento genera un
Idempotency-Key(UUIDv7). - La chiave viene inviata nell'header della richiesta al gateway.
- Se il gateway riceve una richiesta ripetuta con la stessa chiave, restituisce il risultato della prima operazione.
- tikento memorizza la chiave nella cache Redis con TTL 24 ore.
Relazione tra stati del pagamento e della registrazione
Lo stato del pagamento influisce direttamente sullo stato della registrazione del partecipante:
| Stato pagamento | Stato registrazione | Cosa vede il partecipante |
|---|---|---|
pending | payment_pending | «In attesa di pagamento» |
paid | registered | «Registrato», riceve il biglietto via email |
failed | payment_failed | «Pagamento non riuscito», viene proposto di riprovare |
expired | expired | «Tempo di pagamento scaduto», viene proposto di ricominciare |
refunded | refunded | «Rimborso effettuato» |
Con la moderazione attivata, tra il pagamento e lo stato finale registered puo esserci una fase intermedia di verifica da parte dell'organizzatore.
Consultazione dello storico pagamenti
Tutti i pagamenti e i relativi stati sono disponibili nella sezione Partecipanti del Suo evento. Per ciascun record vengono visualizzati:
- Stato attuale del pagamento
- Metodo di pagamento (carta, SBP, Stars)
- Importo e valuta
- Data e ora di creazione / pagamento / rimborso
- Chiave di idempotenza (per la diagnostica)
- Cronologia delle transizioni tra gli stati
Per l'esportazione dei dati sui pagamenti — Esportazione pagamenti e report.