Intégrer Stripe pour les dons entre utilisateurs
Permets aux utilisateurs de soutenir d’autres membres via Stripe, avec historique des dons.
Dans une application de chat temps réel, offrir un système de dons entre utilisateurs renforce la solidarité au sein de la communauté. Ce module vous guide pas à pas pour intégrer Stripe dans un back-end NestJS et un front-end Remix, tout en conservant un historique des dons via Prisma.
⚙️ Vous apprendrez à :
- Créer et gérer des comptes connectés Stripe (Express)
- Générer dynamiquement des produits et des prix
- Initialiser une session de paiement sécurisée
- Traiter les webhooks pour mettre à jour le statut des dons
Objectifs du module
- Mettre en place l’onboarding Stripe pour chaque utilisateur
- Permettre à un membre d’envoyer un don à un autre via une interface de paiement
- Stocker et afficher l’historique des dons dans la base de données
- Gérer les événements Stripe (webhooks) pour confirmer les paiements
Concepts clés
-
Comptes connectés (Express)
Chaque utilisateur reçoit unstripeAccountId
et un lien d’onboarding pour compléter son profil financier. -
Produits et prix dynamiques
À la première interaction, on crée un produitSoutenez <Prénom>
et on permet un montant de don libre. -
Session de paiement Checkout
Nous utilisonsstripe.checkout.sessions.create
avectransfer_data.destination
pour acheminer directement les fonds vers le bénéficiaire, sans appliquer de frais
(ou en modifiantapplication_fee_amount
selon votre modèle). -
Webhooks Stripe
Un endpoint sécurisé captepayment_intent.succeeded
, met à jour le montant du don
et valide la transaction dans Prisma.
1async createDonation({2receivingUserId,3givingUserId,4}: {5receivingUserId: string6givingUserId: string7}): Promise<{8error: boolean9message: string10sessionUrl: string | null11}> {12if (receivingUserId === givingUserId) {13throw new Error("Vous ne pouvez pas vous faire de dons à vous-même")14}15// Création ou récupération du produit prix, puis session Checkout16const session = await this.stripe.checkout.sessions.create({17mode: "payment",18line_items: [{ price: price.id, quantity: 1 }],19payment_intent_data: {20metadata: { donationId: createdDonation.id },21transfer_data: { destination: stripeAccount.id },22},23success_url: "http://localhost:3000",24cancel_url: "http://localhost:3000",25})2627return {28sessionUrl: session.url,29error: false,30message: "Session créée avec succès",31}32}
Stack et ressources
Cette formation utilise la stack suivante :
Pour approfondir :
- Découvrez l’API Webhooks de Stripe
- Consultez la documentation Prisma sur les relations
- Révisez la gestion des routes Remix
Vous êtes prêts à plonger dans l’implémentation de ce flux de dons sécurisé et à offrir une expérience engageante à vos utilisateurs !