Apercu
Chaque paiement dans tikento passe par une sequence definie de statuts. Les transitions entre statuts se produisent automatiquement sur la base des notifications webhook de la passerelle de paiement. L'organisateur voit le statut actuel dans la section Participants et dans le detail de l'inscription.
Statuts du paiement
| Statut | Description |
|---|---|
pending | Le paiement est cree, le participant est redirige vers la page de paiement de la passerelle |
paid | L'argent est recu, la passerelle a confirme le paiement via webhook |
failed | Le paiement a echoue (fonds insuffisants, carte bloquee, erreur 3D Secure) |
expired | Le participant n'a pas finalise le paiement dans le delai imparti (30 minutes) |
refunded | Le remboursement a ete effectue integralement |
partially_refunded | Un remboursement partiel a ete effectue |
Diagramme des transitions
creation du paiement
|
v
+--------+
|pending |
+---+----+
|
+-------+-------+
v v v
+------+ +----+ +-------+
|failed| |paid| |expired|
+------+ +-+--+ +-------+
|
+------+------+
v v
+----------+ +------------------+
|refunded | |partially_refunded|
+----------+ +------------------+
Les transitions sont irreversibles : paid ne peut pas revenir a pending, et refunded ne peut pas revenir a paid.
Reservation (Reservation)
Avant la creation du paiement, tikento cree une reservation -- un verrouillage temporaire du billet pour qu'il ne soit pas pris par un autre participant pendant que le premier paie.
Comment fonctionne la reservation
- Le participant clique sur "Payer" -- tikento cree une reservation avec
TTL 15 minutes. - Le nombre de billets disponibles est reduit du nombre de places reservees.
- Le participant est redirige vers la page de paiement de la passerelle.
- Si le paiement est effectue -- la reservation se transforme en inscription confirmee.
- Si le TTL expire -- la reservation est automatiquement liberee, le billet redevient disponible.
La reservation empeche la situation ou deux participants paient le dernier billet en meme temps.
Traitement des webhooks
tikento est informe du resultat du paiement par un webhook -- une requete HTTP de la passerelle de paiement vers les serveurs tikento.
Sequence
- La passerelle (YooKassa, Tochka, Telegram) envoie une requete POST a l'URL webhook d'tikento.
- tikento verifie la signature de la requete (chaque passerelle utilise son propre mecanisme de signature).
- Le paiement met a jour son statut dans la base de donnees.
- Si le statut est
paid-- l'inscription du participant est confirmee, un email avec le billet est envoye. - Si le statut est
failedouexpired-- la reservation est liberee.
Delivrances repetees
Si tikento n'a pas pu traiter le webhook (par exemple, a renvoye un 5xx), la passerelle repete la requete :
- YooKassa : jusqu'a 10 tentatives avec delai exponentiel
- Tochka : jusqu'a 5 tentatives avec un intervalle de 5 minutes
Grace aux cles d'idempotence, le traitement repete d'un meme webhook est sans danger et ne cree pas de doublons.
Protection par idempotence
Chaque operation de paiement dans tikento est protegee par une cle d'idempotence -- un identifiant unique qui garantit que l'operation n'est executee qu'une seule fois.
Pourquoi c'est necessaire
- Le participant a accidentellement clique deux fois sur "Payer" -- un seul paiement est cree
- Le webhook est arrive en double a cause d'un timeout -- le statut n'est mis a jour qu'une fois
- Une panne reseau a interrompu la requete, le client a renvoye -- l'argent n'est pas debite deux fois
Comment cela fonctionne
- Lors de la creation du paiement, tikento genere un
Idempotency-Key(UUIDv7). - La cle est envoyee dans l'en-tete de la requete a la passerelle.
- Si la passerelle recoit une requete repetee avec la meme cle, elle renvoie le resultat de la premiere operation.
- tikento met en cache la cle dans Redis avec un TTL de 24 heures.
Lien entre statuts du paiement et de l'inscription
Le statut du paiement affecte directement le statut d'inscription du participant :
| Statut du paiement | Statut de l'inscription | Ce que voit le participant |
|---|---|---|
pending | payment_pending | "En attente de paiement" |
paid | registered | "Inscrit", recoit le billet par email |
failed | payment_failed | "Paiement echoue", il lui est propose de reessayer |
expired | expired | "Delai de paiement expire", il lui est propose de recommencer |
refunded | refunded | "Remboursement effectue" |
Si la moderation est activee, entre le paiement et le statut final registered, il peut y avoir une etape intermediaire de verification par l'organisateur.
Consultation de l'historique des paiements
Tous les paiements et leurs statuts sont disponibles dans la section Participants de votre evenement. Pour chaque enregistrement sont affiches :
- Le statut actuel du paiement
- La methode de paiement (carte, SBP, Stars)
- Le montant et la devise
- La date et l'heure de creation / paiement / remboursement
- La cle d'idempotence (pour le diagnostic)
- L'historique des transitions entre statuts
Pour l'export des donnees de paiement -- Export des paiements et rapports.