Flux de paiement
Votre serveur ──POST /checkout-sessions──▶ GC API ──renvoie checkout_url──▶
Client ──visite checkout_url──▶ Page de paiement GC
│
├── Choisit le moyen de paiement
├── Saisit la carte
├── Authentification 3DS (si requise)
│
├── Succès ──redirection──▶ success_url
└── Échec ──redirection──▶ failure_url
Votre serveur ──GET /checkout-sessions/{id}──▶ Vérifie le statut (serveur à serveur)
GC ──POST webhook──▶ Votre endpoint webhook (confirmation autoritative)Les deux sources de vérité
Un paiement a deux confirmations sur lesquelles agir :
- Redirection du client vers
success_urloufailure_url. Utile pour l'UX (afficher "Merci pour votre commande"), mais non autoritative — le client peut fermer le navigateur avant la redirection, le réseau peut tomber, et l'URL ne contient aucune donnée de paiement. - Livraison du webhook vers votre endpoint enregistré. Autoritative — déclenchée dès que la passerelle confirme. Avec relances en backoff en cas d'échec.
Que faire après la redirection
http
GET /api/v1/checkout-sessions/{id}Utilisez-le dans le handler de redirection pour afficher la page de reçu ou un état intermédiaire "nous confirmons votre paiement". Le statut de session sera completed si le paiement est capturé.
Que faire dans le webhook
Traitez le webhook comme la source de vérité pour la livraison, la logique de remboursement et la comptabilité. Même si le client ne revient jamais sur votre success_url, le webhook se déclenchera quand même.
TIP
Rendez votre logique de livraison idempotente sur transaction_id. Le webhook peut être ré-envoyé — votre code ne doit pas livrer deux fois.
Suite
- Webhooks — payload, vérification de signature, calendrier de relances
- Gestion des erreurs — à quoi ressemblent les échecs et refus
