Sc 8 — Pays non supporté côté transporteur
Si le carrier appartient à un pays non whitelisté côté Stripe Connect, l’onboarding est bloqué dès la création de l’annonce. Référence : commita783274
Sc 9 — Carte refusée 3DS DSP2
Authentification forte (Strong Customer Authentication) requise par PSD2. Le frontend doit gérer 3 codes Stripe :Codes Stripe gérés
| Code | UX frontend | Backend |
|---|---|---|
requires_action | Stripe.js handleCardAction() | Pas de transition |
payment_intent_authentication_failure | Message rejet 3DS | Stay EN_ATTENTE_PAIEMENT |
requires_payment_method | Demander nouvelle carte | Stay EN_ATTENTE_PAIEMENT |
Idempotence
Webhookpayment_intent.succeeded protégé par clé idempotency stockée dans processed_webhook_events (table dédiée).
Référence : commit d6ccab9
Sc 10 — Cumul LCB-FT silencieux → Stripe Identity (Pivot Flynanga)
Décision archi explicite (ADR2026-05-01-pivot-flynanga-stripe-identity.md) : drop Didit V2, bascule sur Stripe Identity quand le seuil LCB-FT est atteint.
Migration
- Compteur mensuel via
UtilisateurLcbftJpaEntity(5 colonnes + id,@DynamicUpdate, table partagéeutilisateurADR-008) - V16 migration LCB-FT déployée
- Webhooks Stripe Identity configurés
- Statut runbook :
runbooks/2026-05-01-rollout-didit-disabled-lcbft.mdready
Sc 11 — Webhook perdu / reconciliation cron
Si un webhook Stripe est perdu (réseau, downtime), un scheduler répare l’incohérence en interrogeant l’API Stripe directement.Logique
- Lookup JPQL :
findStaleEnAttentePaiement(cutoff) - Replay idempotent (clé event Stripe ne re-déclenche pas)
- 6 tests Mockito (zero, succeeded+LCB-FT, requires_capture, processing skip, déjà reconcilié, continue après failure)
PaymentLogenregistré avec sourcestripe-cron
d0de512
Sc 19 — Wallet transporteur (Stripe Express direct)
Plutôt que de maintenir un dashboard wallet custom, ColisMove redirige le carrier directement vers le Stripe Express dashboard (solde, payouts, fiscal docs natifs).Avantages
- Solde, payouts, fiscal docs natifs Stripe
- Zéro maintenance ColisMove
- Conforme PSD2 (Stripe gère)
4e873f4
Sc 20 — Compte transporteur Stripe fermé
Si Stripe désactive un compte carrier (suspension, fraude), le webhookaccount.updated détecte la transition chargesEnabled: true → false et bloque les nouvelles réservations.
Logique technique
StripeAccountStatusChangedEventshared-domain (factoriesdisabled/reactivated)- Détection idempotente via prior chargesEnabled lookup
- Carrier gate dans
ReservationService.creerlèveTransporteurIndisponibleExceptionHTTP 422 - 16e champ
AnnonceSnapshot.createurStripeChargesEnabled - 7 tests Mockito (5 transitions service + 2 carrier gate)
2216fd0
Récap effets Stripe
| Scénario | Webhook | Action backend |
|---|---|---|
| Sc 9 | payment_intent.succeeded (3DS OK) | → RESERVATION_PAYEE |
| Sc 11 | payment_intent.succeeded (replay) | Idempotent → RESERVATION_PAYEE |
| Sc 20 | account.updated | Disable/enable carrier annonces |
| Scénario | Endpoint Stripe SDK |
|---|---|
| Sc 19 | accounts.loginLinks.create() |
| Sc 6/16 | refunds.create() + transfers.createReversal() |