# Configuration Stripe pour Xpeditis Ce guide explique comment configurer Stripe pour le système de licences et d'abonnements. ## 1. Prérequis - Compte Stripe (https://dashboard.stripe.com) - Accès aux clés API Stripe ## 2. Configuration du Dashboard Stripe ### 2.1 Créer les Produits Dans le Dashboard Stripe, allez dans **Products** et créez les produits suivants : | Produit | Description | |---------|-------------| | **Xpeditis Starter** | Plan Starter - Jusqu'à 5 utilisateurs | | **Xpeditis Pro** | Plan Pro - Jusqu'à 20 utilisateurs | | **Xpeditis Enterprise** | Plan Enterprise - Utilisateurs illimités | ### 2.2 Créer les Prix Pour chaque produit, créez 2 prix (mensuel et annuel) : #### Starter | Type | Prix | Récurrence | |------|------|------------| | Mensuel | 49 EUR | /mois | | Annuel | 470 EUR | /an (~20% de réduction) | #### Pro | Type | Prix | Récurrence | |------|------|------------| | Mensuel | 149 EUR | /mois | | Annuel | 1430 EUR | /an (~20% de réduction) | #### Enterprise | Type | Prix | Récurrence | |------|------|------------| | Mensuel | Prix personnalisé | /mois | | Annuel | Prix personnalisé | /an | ### 2.3 Récupérer les Price IDs Après avoir créé les prix, notez les **Price IDs** (format: `price_xxxxx`) pour chaque prix. ## 3. Configuration du Webhook ### 3.1 Créer le Webhook Endpoint 1. Allez dans **Developers > Webhooks** 2. Cliquez sur **Add endpoint** 3. Configurez : - **Endpoint URL**: `https://votre-domaine.com/api/v1/subscriptions/webhook` - **Events to send**: Sélectionnez les événements suivants : - `checkout.session.completed` - `customer.subscription.created` - `customer.subscription.updated` - `customer.subscription.deleted` - `invoice.payment_failed` 4. Cliquez sur **Add endpoint** 5. Notez le **Webhook signing secret** (format: `whsec_xxxxx`) ### 3.2 Test Local avec Stripe CLI Pour tester les webhooks en local : ```bash # Installer Stripe CLI brew install stripe/stripe-cli/stripe # Se connecter à Stripe stripe login # Écouter les webhooks et les transférer en local stripe listen --forward-to localhost:4000/api/v1/subscriptions/webhook # Le CLI affichera le webhook secret à utiliser localement # > Ready! Your webhook signing secret is whsec_xxxxx ``` ## 4. Variables d'environnement Ajoutez ces variables dans votre fichier `.env` du backend : ```bash # Clés API Stripe STRIPE_SECRET_KEY=sk_test_xxxxx # Clé secrète (test ou live) STRIPE_WEBHOOK_SECRET=whsec_xxxxx # Secret du webhook # Price IDs (créés dans le Dashboard) STRIPE_STARTER_MONTHLY_PRICE_ID=price_xxxxx STRIPE_STARTER_YEARLY_PRICE_ID=price_xxxxx STRIPE_PRO_MONTHLY_PRICE_ID=price_xxxxx STRIPE_PRO_YEARLY_PRICE_ID=price_xxxxx STRIPE_ENTERPRISE_MONTHLY_PRICE_ID=price_xxxxx STRIPE_ENTERPRISE_YEARLY_PRICE_ID=price_xxxxx # URL Frontend (pour les redirections) FRONTEND_URL=http://localhost:3000 ``` ## 5. Configurer le Customer Portal Le Customer Portal permet aux clients de gérer leur abonnement (changer de plan, annuler, mettre à jour le paiement). 1. Allez dans **Settings > Billing > Customer portal** 2. Activez les options souhaitées : - [x] Allow customers to update their payment methods - [x] Allow customers to update subscriptions - [x] Allow customers to cancel subscriptions - [x] Show invoice history 3. Configurez les produits autorisés dans le portal ## 6. Mode Test vs Production ### Mode Test (Développement) - Utilisez `sk_test_xxxxx` comme clé secrète - Les paiements ne sont pas réels - Utilisez les cartes de test Stripe : - Succès: `4242 4242 4242 4242` - Échec: `4000 0000 0000 0002` - 3D Secure: `4000 0025 0000 3155` ### Mode Production - Utilisez `sk_live_xxxxx` comme clé secrète - Activez le mode live dans le Dashboard - Assurez-vous d'avoir complété la vérification de compte ## 7. Flux d'abonnement ``` ┌─────────────────┐ │ Page Subscription│ │ (Frontend) │ └────────┬────────┘ │ Clic "Upgrade" ▼ ┌─────────────────┐ │ POST /checkout │ │ (Backend) │ └────────┬────────┘ │ Crée Checkout Session ▼ ┌─────────────────┐ │ Stripe Checkout │ │ (Stripe) │ └────────┬────────┘ │ Paiement réussi ▼ ┌─────────────────┐ │ Webhook │ │ checkout. │ │ session.completed│ └────────┬────────┘ │ Met à jour la subscription ▼ ┌─────────────────┐ │ Base de données │ │ (PostgreSQL) │ └─────────────────┘ ``` ## 8. Gestion des erreurs ### Paiement échoué - Le webhook `invoice.payment_failed` est déclenché - L'abonnement passe en statut `PAST_DUE` - L'utilisateur est informé et peut mettre à jour son moyen de paiement ### Annulation - Via le Customer Portal ou l'API - L'abonnement reste actif jusqu'à la fin de la période - À la fin de la période, le webhook `customer.subscription.deleted` est déclenché - L'organisation repasse au plan FREE ## 9. Vérification ### Checklist de configuration - [ ] Produits créés dans Stripe Dashboard - [ ] Prix créés (mensuel + annuel pour chaque plan) - [ ] Webhook endpoint configuré - [ ] Customer Portal configuré - [ ] Variables d'environnement ajoutées au `.env` - [ ] Test avec Stripe CLI en local - [ ] Test d'un paiement complet (checkout → webhook) ### Test manuel 1. Lancez le backend et le frontend 2. Connectez-vous en tant qu'ADMIN 3. Allez dans Settings > Subscription 4. Cliquez sur "Upgrade" sur un plan payant 5. Utilisez la carte de test `4242 4242 4242 4242` 6. Vérifiez que le plan est mis à jour dans la base de données 7. Vérifiez que les licences sont correctement comptées ## 10. Commandes utiles ```bash # Voir les webhooks reçus stripe events list --limit 10 # Déclencher un webhook manuellement stripe trigger checkout.session.completed # Voir les logs stripe logs tail ``` ## Support Pour toute question sur Stripe : - Documentation Stripe : https://stripe.com/docs - Support Stripe : https://support.stripe.com