FreemiumProBusinessEnterprise

Ciclo di vita del pagamento

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

StatoDescrizione
pendingPagamento creato, il partecipante e stato reindirizzato alla pagina di pagamento del gateway
paidFondi ricevuti, il gateway ha confermato il pagamento tramite webhook
failedIl pagamento non e andato a buon fine (fondi insufficienti, carta bloccata, errore 3D Secure)
expiredIl partecipante non ha completato il pagamento entro il tempo previsto (30 minuti)
refundedRimborso completato integralmente
partially_refundedRimborso 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

  1. Il partecipante preme «Paga» — tikento crea una reservation con TTL 15 minuti.
  2. Dalla quantita disponibile di biglietti viene detratto il posto prenotato.
  3. Il partecipante viene reindirizzato alla pagina di pagamento del gateway.
  4. Se il pagamento va a buon fine — la prenotazione si trasforma in una registrazione confermata.
  5. 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

  1. Il gateway (YooKassa, Tochka, Telegram) invia una richiesta POST all'URL webhook di tikento.
  2. tikento verifica la firma della richiesta (ogni gateway utilizza il proprio meccanismo di firma).
  3. Il pagamento aggiorna lo stato nel database.
  4. Se lo stato e paid — la registrazione del partecipante viene confermata, viene inviata un'email con il biglietto.
  5. Se lo stato e failed o expired — 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

  1. Alla creazione del pagamento tikento genera un Idempotency-Key (UUIDv7).
  2. La chiave viene inviata nell'header della richiesta al gateway.
  3. Se il gateway riceve una richiesta ripetuta con la stessa chiave, restituisce il risultato della prima operazione.
  4. 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 pagamentoStato registrazioneCosa vede il partecipante
pendingpayment_pending«In attesa di pagamento»
paidregistered«Registrato», riceve il biglietto via email
failedpayment_failed«Pagamento non riuscito», viene proposto di riprovare
expiredexpired«Tempo di pagamento scaduto», viene proposto di ricominciare
refundedrefunded«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.

Domande frequenti

Perche il pagamento e bloccato nello stato pending?
Molto probabilmente il partecipante non ha completato il pagamento (ha chiuso la pagina della banca, non ha confermato il 3D Secure). Il pagamento passera automaticamente allo stato expired dopo 30 minuti. Se il webhook dal gateway non e arrivato, verifichi le impostazioni webhook.
Cosa succedera premendo nuovamente il pulsante «Paga»?
Nulla di negativo. Ogni pagamento e protetto da una chiave di idempotenza: una richiesta ripetuta con la stessa chiave non crea un duplicato, ma restituisce il risultato dell'operazione originale.
E possibile portare manualmente un pagamento allo stato paid?
Si, ma solo per i pagamenti manuali (contanti, bonifico). Per i pagamenti tramite gateway lo stato viene aggiornato automaticamente tramite webhook.
Quanto dura la prenotazione (reservation)?
Per impostazione predefinita 15 minuti. Entro questo tempo il partecipante deve completare il pagamento, altrimenti la prenotazione viene rilasciata e il biglietto torna disponibile.