Intégrer Stripe pour les dons entre utilisateurs

Permets aux utilisateurs de soutenir d’autres membres via Stripe, avec historique des dons.

3 min read

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

  1. Mettre en place l’onboarding Stripe pour chaque utilisateur
  2. Permettre à un membre d’envoyer un don à un autre via une interface de paiement
  3. Stocker et afficher l’historique des dons dans la base de données
  4. Gérer les événements Stripe (webhooks) pour confirmer les paiements

Concepts clés

  • Comptes connectés (Express)
    Chaque utilisateur reçoit un stripeAccountId et un lien d’onboarding pour compléter son profil financier.

  • Produits et prix dynamiques
    À la première interaction, on crée un produit Soutenez <Prénom> et on permet un montant de don libre.

  • Session de paiement Checkout
    Nous utilisons stripe.checkout.sessions.create avec transfer_data.destination
    pour acheminer directement les fonds vers le bénéficiaire, sans appliquer de frais
    (ou en modifiant application_fee_amount selon votre modèle).

  • Webhooks Stripe
    Un endpoint sécurisé capte payment_intent.succeeded, met à jour le montant du don
    et valide la transaction dans Prisma.

src/stripe.service.ts
1
async createDonation({
2
receivingUserId,
3
givingUserId,
4
}: {
5
receivingUserId: string
6
givingUserId: string
7
}): Promise<{
8
error: boolean
9
message: string
10
sessionUrl: string | null
11
}> {
12
if (receivingUserId === givingUserId) {
13
throw 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 Checkout
16
const session = await this.stripe.checkout.sessions.create({
17
mode: "payment",
18
line_items: [{ price: price.id, quantity: 1 }],
19
payment_intent_data: {
20
metadata: { donationId: createdDonation.id },
21
transfer_data: { destination: stripeAccount.id },
22
},
23
success_url: "http://localhost:3000",
24
cancel_url: "http://localhost:3000",
25
})
26
27
return {
28
sessionUrl: session.url,
29
error: false,
30
message: "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 !