Prompt : Implémentation Stripe dans une API REST Node.js
Contexte
Stack technique :
- Backend : Node.js + Express.js
- Base de données : MongoDB + Mongoose + MongoDB Atlas
- Langages : JavaScript/TypeScript
- Niveau : Développeur full-stack expérimenté
Objectif
Implémenter une solution de paiement Stripe complète dans mon API REST en suivant les meilleures pratiques 2025.
Étapes d'implémentation requises
1. Configuration et sécurité
- Installation des dépendances (stripe, dotenv, helmet, etc.)
- Configuration sécurisée des clés API Stripe (dev/prod)
- Variables d'environnement avec validation (Joi/Zod)
- Middlewares de sécurité pour webhooks
- Configuration CORS appropriée
2. Architecture du projet
Structure des dossiers :
├── controllers/payments/
├── services/stripe/
├── models/
│ ├── Order.js
│ ├── Payment.js
│ └── Customer.js
├── routes/payments/
├── middlewares/stripe/
└── utils/stripe/
Patterns à implémenter :
- Séparation controllers/services/models
- Gestion centralisée des erreurs
- Validation des schémas de données
3. Endpoints principaux
POST /api/payments/create-intent # Création PaymentIntent
POST /api/payments/confirm # Confirmation paiement
GET /api/payments/:id/status # Status d'un paiement
POST /api/webhooks/stripe # Webhooks Stripe
POST /api/customers # Gestion customers
GET /api/payments/history/:userId # Historique paiements
POST /api/payments/refund # Remboursements
4. Fonctionnalités avancées
- Paiements récurrents/abonnements
- Support multi-devises (EUR, USD, etc.)
- Métadonnées personnalisées
- Gestion des coupons/promotions
- Paiements différés (capture manuelle)
- Split payments (marketplace)
5. Sécurité et validation
- Validation signatures webhooks Stripe
- Sanitisation des inputs utilisateur
- Gestion des idempotency keys
- Logs sécurisés (pas de données sensibles)
- Rate limiting sur les endpoints
- Validation stricte des montants/devises
6. Gestion d'erreurs et monitoring
- Gestion centralisée des erreurs Stripe
- Retry logic avec backoff exponentiel
- Alertes sur échecs de paiement
- Monitoring des performances
- Dead letter queue pour webhooks échoués
- Tests unitaires et d'intégration
7. Synchronisation et cohérence
- Synchronisation Stripe ↔ MongoDB
- Gestion des états incohérents
- Transactions atomiques MongoDB
- Mécanisme de réconciliation
- Audit trail des opérations
Livrables attendus
Code source
- Controllers avec gestion d'erreurs complète
- Services Stripe modulaires et testables
- Modèles Mongoose avec validation
- Middlewares de sécurité et validation
- Routes avec documentation OpenAPI/Swagger
Configuration
- Variables d'environnement (.env.example)
- Configuration MongoDB avec indexes
- Configuration Stripe (webhooks endpoints)
- Scripts de déploiement et migration
Documentation
- Documentation des endpoints (format OpenAPI)
- Exemples de requêtes cURL/Postman
- Guide de déploiement
- Procédures de test et debugging
Tests
- Tests unitaires (Jest/Mocha)
- Tests d'intégration avec Stripe Test API
- Mocks pour les webhooks
- Tests de charge et performance
Contraintes techniques
Code quality
- ES6+ avec async/await exclusivement
- TypeScript avec types stricts si possible
- Validation avec Joi ou Zod
- Respect des principes SOLID
- Code coverage > 80%
Performance
- Gestion optimisée des connexions DB
- Cache Redis pour les données fréquentes
- Pagination pour les listes
- Optimisation des requêtes MongoDB
Versions et packages
- Node.js >= 18 LTS
- Stripe API version 2024-12-18
- Mongoose >= 8.x
- Express >= 4.x avec security middlewares
Cas d'usage à couvrir
E-commerce standard
1. Création d'une commande
2. Paiement par carte bancaire
3. Confirmation et traitement
4. Envoi de reçu par email
5. Gestion des remboursements
Abonnements
1. Création d'un plan d'abonnement
2. Souscription utilisateur
3. Gestion des renouvellements
4. Annulation et prorata
Marketplace
1. Paiements avec commission
2. Transferts vers vendeurs
3. Gestion des disputes
4. Reporting financier
Questions spécifiques à résoudre
1. Comment gérer les webhooks dupliqués de Stripe ?
2. Quelle stratégie pour les paiements partiellement échoués ?
3. Comment implémenter un système de retry robuste ?
4. Gestion des timeouts et connexions perdues ?
5. Stratégie de test avec l'environnement Stripe ?
6. Comment gérer les migrations de données Stripe ?
7. Monitoring et alerting : quelles métriques suivre ?
Format de réponse souhaité
Pour chaque composant :
- Code complet avec commentaires détaillés
- Explication des choix d'architecture
- Exemples d'utilisation concrets
- Gestion des cas d'erreur
- Tests associés
- Points d'attention sécurité
Structure : Code → Explication → Tests → Bonnes pratiques
Générez-moi une implémentation production-ready complète avec tous ces éléments, en expliquant chaque décision technique prise.