Guide de la démo Stripe

Cette démo simule de bout en bout le parcours de souscription Upcoop Business+ et Business+ Premium : le commerçant souscrit depuis son portail authentifié, paye via Stripe, reçoit ses emails, et nos systèmes écrivent les bonnes données dans l'ERP. Tout est en mode TEST — aucun débit réel n'a lieu.

Schéma high-level

1
Le commerçant clique « Souscrire » sur la landing Upcoop
Sidebar simule la session SSO du portail commerçant. On envoie à Stripe : email, raison sociale, SIRET, adresse, plan choisi.
Business+ 39 €/mois (90 j gratuits) Business+ Premium 79 €/mois
2
Stripe Checkout (page sécurisée hébergée par Stripe)
Saisie carte test, validation 3DS si demandée, retour sur /success.
Carte CB classique par défaut Stripe Link optionnel
3
Webhooks signés HMAC reçus par notre serveur
checkout.session.completed · customer.subscription.created · invoice.finalized · invoice.paid · invoice.payment_failed · customer.subscription.updated/deleted
4
3 actions automatiques à chaque event utile
(a) Écriture mock ERP (journal.jsonl append-only) — visible dans /erp.
(b) Téléchargement local du PDF facture Stripe (invoices/).
(c) Envoi email transactionnel SMTP au commerçant.
5
Le commerçant gère son abonnement en autonomie
Customer Portal Stripe (bouton bordeaux dans la sidebar quand un commerçant a une sub active) : changer de carte, télécharger l'historique des factures, résilier — sans passer par le support.

Scénarios de test (5)

Chaque scénario s'exécute depuis la landing en quelques clics. Les emails sont redirigés vers contact@ecobeez.fr (override demo) avec une bannière le rappelant.

Test 1

Souscription Business+ classique

Premier achat, trial 90 jours offerts.

  1. Sidebar → choisir Le Bistrot Parisien par exemple
  2. Cliquer Souscrire Business+
  3. Carte 4242 4242 4242 4242 · 12/30 · 123 · 75002
Attendu Email welcome reçu · journal ERP affiche checkout.session.completed + subscription.created (trialing) + invoice 0 €.
Test 2

Souscription Business+ Premium

Sans trial, paiement immédiat 79 €.

  1. Sidebar → choisir un commerçant
  2. Cliquer Souscrire Business+ Premium
  3. Carte 4242 4242 4242 4242
Attendu 2 emails reçus : welcome + facture 79 € (avec PDF en pièce jointe). Journal ERP affiche invoice.paid 7900 cents.
Test 3

Renouvellement post-trial (Test Clock)

Simuler la 1ère facture 39 € après les 90 j gratuits.

  1. Sidebar → cocher « Mode Test Clock »
  2. Souscrire Business+ avec carte 4242…
  3. Aller sur /erp → ligne Test Clock → Avancer 91 jours
  4. Patienter ~60 sec (Stripe replay en 2 paliers)
Attendu Email facture 39 € reçu · journal ERP affiche invoice.finalized 3900 puis invoice.paid 3900.
Test 4

Échec de paiement (dunning)

Carte qui marche au 1er paiement puis décline aux suivants.

  1. Sidebar → cocher Test Clock
  2. Souscrire Business+ avec carte 4000 0000 0000 0341
  3. Aller sur /erpAvancer 91 jours
Attendu Email dunning rouge « Action requise » reçu · journal ERP affiche invoice.payment_failed (attempt 1) avec date prochaine tentative auto Stripe.
Test 5

Résiliation depuis le portail

Self-service Customer Portal Stripe.

  1. Sidebar → choisir un commerçant déjà abonné
  2. Bannière → cliquer « Gérer mon abonnement »
  3. Sur le portail Stripe → Cancel plan + choisir un motif
Attendu Email résiliation programmée reçu · journal affiche subscription.updated avec note « Résiliation programmée à la fin de période ».
(Pour voir l'email cancel completed, avancer un Test Clock après la fin de période.)

Cartes test Stripe (mode TEST)

Numéro Comportement À utiliser pour
4242 4242 4242 4242 Succès toujours Tests 1, 2, 3 — souscription nominale
4000 0000 0000 0341 Succès au 1er paiement, décline aux suivants Test 4 — dunning post-trial
4000 0000 0000 0002 Décline immédiatement Échec de souscription dès le 1er paiement
4000 0027 6000 3184 Demande 3DS / authentification renforcée Tester le flow Strong Customer Authentication (PSD2)
4000 0000 0000 9995 Décline pour fonds insuffisants Variante alternative au 0341

Date d'expiration : n'importe quelle date future (ex 12/30). CVC : 3 chiffres au choix. Code postal : 75002.

Mécaniques techniques en arrière-plan

Webhook signé HMAC

Chaque event Stripe reçu sur /webhooks/stripe est vérifié avec stripe.webhooks.constructEvent(rawBody, signature, whsec_…). Body brut préservé via un Content-Type parser custom Fastify.

Idempotence Customer

1 commerçant Upcoop = 1 Customer Stripe unique. Cache local en mémoire + customers.search par metadata.upcoop_merchant_id comme fallback. Plus de doublons si on clique « Souscrire » plusieurs fois.

Idempotence Catalogue

Au boot, le serveur s'assure que les Products + Prices Stripe existent via lookup_keys. Aucune duplication même si on relance 100 fois.

Test Clock multi-paliers

Stripe limite à 2 intervalles à la fois. Pour avancer 91 j sur une sub mensuelle, on coupe en 2 paliers de 55 j avec polling du statut ready entre chaque.

SMTP transactionnel

Compte applicatif centaur-platform@ecobeez.com sur Webmo (port 587). EMAIL_OVERRIDE_TO=contact@ecobeez.fr redirige tous les envois en démo avec une bannière jaune de rappel.

E-invoicing FR (à venir)

Jusqu'au 31 août 2026, on émet la facture via Stripe (PDF hosted). Au 1er septembre, bridge vers Pennylane (PDP agréée DGFIP) pour émission Factur-X conforme PPF B2B France.

← Retour à la landing