Comment ajouter des paiements à votre application : paiement, abonnements et webhooks
La façon la plus simple d'ajouter des paiements à votre application est Stripe : utilisez un Payment Link si vous avez seulement besoin d'un bouton « Acheter » et pouvez traiter les commandes à la main, Stripe Checkout si votre application doit savoir qui a payé et réagir automatiquement, et Checkout en mode abonnement plus le portail client de Stripe pour la facturation récurrente. Dans tous les cas sauf le plus simple, vous avez aussi besoin d'un webhook : un point de terminaison serveur que Stripe appelle lorsqu'un paiement réussit. Testez tout avec les clés de test et les cartes de test de Stripe avant de passer aux clés de production.
Ce guide explique chaque option, la partie webhook que la plupart des tutoriels passent sous silence, et ce qu'il faut vérifier avant d'encaisser de vrais paiements. Les détails sur Stripe proviennent de la documentation officielle de Stripe, en septembre 2026.
Pourquoi utiliser un prestataire de paiement
Ne collectez jamais les numéros de carte dans vos propres formulaires. Manipuler les données brutes de carte vous soumet à la norme PCI DSS (la norme de sécurité du secteur des cartes bancaires) et représente un risque important. Un prestataire de paiement comme Stripe héberge le formulaire de paiement, stocke la carte, gère l'authentification bancaire et indique à votre application le résultat. Votre application ne voit jamais que « le client X a payé pour Y ».
Ce guide utilise Stripe parce qu'il est très répandu, bien documenté et pris en charge par la plupart des créateurs d'applications par IA. D'autres prestataires existent ; certains agissent comme « marchand officiel » et prennent en charge la gestion de la TVA pour vous. Si la conformité fiscale vous inquiète, ce modèle mérite d'être comparé.
Les trois façons d'encaisser avec Stripe
| Option | Code nécessaire | Votre application sait qui a payé ? | Idéal pour |
|---|---|---|---|
| Payment Links | Aucun | Seulement si vous ajoutez un webhook | Vendre quelques produits fixes, dons, tester la demande |
| Checkout (paiement unique) | Code serveur pour créer une session | Oui, via webhook | Boutiques, téléchargements payants, achats ponctuels |
| Checkout (abonnement) | Code serveur et gestion des webhooks | Oui, via webhook | SaaS, adhésions, tout ce qui est récurrent |
Payment Links
Un Payment Link est une page de paiement hébergée par Stripe que vous créez dans le tableau de bord Stripe sans code. Vous obtenez une URL que vous pouvez placer derrière un bouton de votre application, partager dans un e-mail ou afficher sous forme de QR code. Selon la documentation de Stripe, les Payment Links peuvent vendre un produit, un abonnement ou recevoir un don ; vous pouvez laisser le client choisir ce qu'il paie ou limiter le nombre d'achats.
Le piège : votre application ne sait pas automatiquement qu'un utilisateur connecté précis a payé. Pour une page de dons ou une petite boutique où vous expédiez les commandes à la main à partir des notifications e-mail de Stripe, cela suffit. Pour « payer pour débloquer les fonctionnalités Pro », ce n'est pas adapté.
Stripe Checkout
Checkout est une page de paiement que votre serveur crée à la demande pour un achat précis. Votre serveur indique à Stripe ce qui est acheté (et éventuellement quel client achète), Stripe renvoie une URL, et vous envoyez le client vers celle-ci. Selon la documentation de Stripe, il prend en charge les paiements uniques comme les abonnements, sous forme de page complète hébergée par Stripe, de page intégrée à votre site ou de formulaire intégré.
Le déroulement :
- Le client clique sur Acheter dans votre application.
- Votre serveur crée une session Checkout avec votre clé secrète, en y incluant un identifiant qui la relie à votre utilisateur ou à votre commande.
- Le client est redirigé vers Stripe et paie.
- Stripe le redirige vers votre page de succès.
- Stripe envoie un événement
checkout.session.completedà votre webhook, et votre serveur marque la commande comme payée ou débloque l'accès.
L'étape 2 doit se faire côté serveur, car elle utilise votre clé secrète. C'est la principale raison pour laquelle Checkout nécessite un backend.
Abonnements
Les abonnements utilisent Checkout en mode abonnement avec un prix récurrent que vous configurez dans Stripe. Le premier paiement suit le déroulement ci-dessus. Ensuite, les renouvellements, les cartes refusées, les changements de formule et les résiliations surviennent au fil du temps, souvent alors que le client n'est pas dans votre application ; votre application n'en est informée que par les webhooks.
Pour permettre aux clients de gérer leur abonnement eux-mêmes, Stripe propose un portail client hébergé. Selon la documentation de Stripe, les clients peuvent y mettre à jour leurs moyens de paiement et leurs informations de facturation, modifier ou résilier leur abonnement, et consulter et télécharger leurs factures. Vous le configurez dans le tableau de bord Stripe et ajoutez un bouton « Gérer la facturation » qui y envoie le client. Vous évitez ainsi de créer vous-même ces écrans.
Webhooks : la partie incontournable
Un webhook est une requête HTTP que Stripe envoie à votre serveur lorsque quelque chose se produit. (Voir ce qu'est un webhook pour l'idée générale.) Le guide d'exécution de Stripe est explicite : on ne peut pas se fier uniquement à la page de succès pour traiter les commandes, car un client peut payer puis perdre sa connexion avant que la page ne s'affiche. Pour les abonnements et les moyens de paiement différés, les webhooks sont obligatoires.
Événements à gérer
| Événement | Signification | Ce que fait votre application |
|---|---|---|
checkout.session.completed | Checkout terminé | Marquer la commande comme payée ou lancer l'accès |
checkout.session.async_payment_succeeded | Un moyen de paiement différé (comme un prélèvement bancaire) a abouti plus tard | Exécuter la commande maintenant |
checkout.session.async_payment_failed | Ce paiement différé a échoué | Prévenir le client ; ne pas exécuter la commande |
invoice.paid | Un paiement d'abonnement a réussi, renouvellements compris | Prolonger l'accès |
invoice.payment_failed | Un renouvellement a échoué | Avertir l'utilisateur ; Stripe peut réessayer |
customer.subscription.updated | Formule modifiée, ou résiliation programmée | Mettre à jour la formule de l'utilisateur |
customer.subscription.deleted | Abonnement terminé | Retirer l'accès payant |
Règles pour un gestionnaire de webhook correct
Ces règles viennent directement de la documentation de Stripe sur les webhooks, et les gestionnaires générés par l'IA en oublient parfois une :
- Vérifiez la signature. Chaque événement comporte un en-tête
Stripe-Signature. Votre gestionnaire le contrôle avec la clé de signature du point de terminaison (elle commence parwhsec_). Sans cela, n'importe qui pourrait envoyer à votre serveur un faux « paiement réussi ». - Utilisez le corps brut de la requête. La vérification de signature échoue si votre framework analyse ou modifie d'abord le corps.
- Renvoyez rapidement une réponse 2xx, puis effectuez les traitements plus lents. Les dépassements de délai comptent comme des échecs.
- Gérez les doublons. Stripe peut livrer le même événement plus d'une fois. Enregistrez les identifiants d'événements déjà traités, ou rendez l'exécution sûre même si elle a lieu deux fois.
- Ne supposez pas l'ordre. Stripe ne garantit pas que les événements arrivent dans l'ordre où ils se sont produits.
- Prévoyez les nouvelles tentatives. En mode production, Stripe réessaie les livraisons échouées pendant trois jours au maximum : une courte panne ne fait donc pas perdre de paiements, mais votre gestionnaire doit savoir traiter les événements en retard.
Les webhooks nécessitent une adresse HTTPS publique : ils ne fonctionnent donc généralement qu'une fois votre application publiée (la CLI de Stripe peut transmettre les événements à une machine locale pour les développeurs).
Une requête qui couvre tout le déroulement
Ajoute un achat unique avec Stripe Checkout pour le « Pack Pro » (identifiant de prix dans STRIPE_PRICE_ID). Crée la session Checkout côté serveur en utilisant STRIPE_SECRET_KEY depuis les secrets, et inclus l'identifiant de l'utilisateur connecté dans la session. Ajoute un point de terminaison POST /api/stripe/webhook qui vérifie la signature Stripe avec STRIPE_WEBHOOK_SECRET à partir du corps brut de la requête, gère checkout.session.completed et marque cet utilisateur comme ayant le Pack Pro. Assure-toi qu'il reste sûr si le même événement arrive deux fois. Ajoute les pages de succès et d'annulation. N'expose jamais la clé secrète au navigateur.
Pour les abonnements, ajoute : « Utilise le mode abonnement avec STRIPE_PRICE_ID. Gère invoice.paid, invoice.payment_failed, customer.subscription.updated et customer.subscription.deleted. Ajoute un bouton Gérer la facturation qui ouvre le portail client Stripe. »
Mode test
Stripe propose des environnements séparés, sandbox (test) et production, avec des clés distinctes. Les clés de test commencent par pk_test_, sk_test_ ou rk_test_ ; les clés de production commencent par pk_live_, sk_live_ ou rk_live_. Les transactions de test ne déplacent pas d'argent.
Cartes de test utiles issues de la documentation de test de Stripe (n'importe quelle date d'expiration future, n'importe quel CVC à trois chiffres) :
| Numéro de carte | Résultat |
|---|---|
4242 4242 4242 4242 | Paiement réussi |
4000 0000 0000 0002 | Carte refusée |
4000 0000 0000 3220 | Authentification 3D Secure requise, puis réussite |
Testez au minimum :
- Un paiement réussi débloque la bonne chose pour le bon utilisateur
- Une carte refusée affiche un message clair et ne débloque rien
- Fermer l'onglet du navigateur juste après le paiement donne quand même accès (cela prouve que le webhook fonctionne, pas seulement la page de succès)
- Annuler sur la page Stripe renvoie l'utilisateur dans votre application sans rien facturer
- Pour les abonnements : résiliez dans le portail client et vérifiez que l'accès prend fin au moment prévu
Mise en production
- Activez votre compte Stripe avec les informations de votre entreprise et de votre banque.
- Remplacez par les clés de production dans les secrets de votre application. Stripe recommande des clés restreintes, n'ayant que les autorisations dont votre intégration a besoin, plutôt qu'une clé secrète sans restriction.
- Créez un point de terminaison webhook de production pointant vers votre application publiée. Il a sa propre clé de signature, différente de celle de test : mettez-la à jour.
- Recréez les produits et les prix en mode production ; leurs identifiants de test n'existent pas dans ce mode.
- Effectuez un vrai petit achat et remboursez-le.
Conservez chaque clé dans les secrets de votre projet, jamais dans le code ni dans le chat. Notre liste de contrôle de sécurité détaille la gestion des clés et la vérification des webhooks.
Taxes, remboursements et formalités
Les paiements entraînent des obligations que le code ne résout pas. Ce n'est pas un conseil fiscal ; consultez un expert-comptable.
- TVA et taxes de vente. Selon l'endroit où vous et vos clients vous trouvez, vous pourriez devoir vous enregistrer, facturer et déclarer la taxe. Stripe Tax peut calculer et collecter la taxe au moment du paiement, surveiller les endroits où vos ventes pourraient créer une obligation, et aider aux enregistrements et aux déclarations, mais la responsabilité reste la vôtre. Les marchands officiels sont une alternative qui prend davantage de ces obligations en charge.
- Remboursements et litiges. Définissez votre politique de remboursement avant le lancement et publiez-la sur votre site. Les litiges (rétrofacturations) arrivent ; conservez les traces de ce qui a été acheté et livré.
- Reçus et factures. Stripe peut envoyer des reçus par e-mail ; les entreprises peuvent avoir besoin de véritables factures.
- Frais. Chaque prestataire facture par transaction. Consultez la page tarifaire actuelle du prestataire plutôt que de vous fier aux chiffres des articles.
Quelle configuration pour votre application
- Dons ou quelques produits : Payment Links. Voir comment créer un site de dons pour une association.
- Une boutique avec panier : Checkout avec lignes de commande et webhook. Voir comment créer une boutique en ligne.
- SaaS ou adhésions : Checkout en mode abonnement, webhooks et portail client. Voir comment créer un MVP SaaS et comment fixer le prix d'un produit SaaS.
- Une marketplace qui reverse des fonds aux vendeurs : une configuration différente, plus réglementée (Stripe Connect ou équivalent). Prévoyez-la séparément.
Ajouter des paiements dans Mythex
Les paiements dans les applications créées sur Mythex utilisent votre propre compte Stripe et vos propres clés ; il n'existe pas de bouton « Connecter Stripe » en un clic pour votre application. Le déroulement habituel :
- Obtenez les clés Stripe de test.
- Ajoutez
STRIPE_SECRET_KEY(et plus tard le secret du webhook) aux secrets du projet, via/secrets, les paramètres du projet, ou la carte de secrets que l'agent affiche lorsqu'il a besoin d'une clé. - Demandez à l'agent un Checkout avec une requête semblable à celle ci-dessus.
- Testez dans l'aperçu avec les cartes de test. Publiez avant d'enregistrer le webhook, car il a besoin de votre URL publique.
- Après le passage aux clés de production, publiez à nouveau pour que l'application en production les prenne en compte.
Voir Accepter les paiements avec Stripe et Gérer les webhooks dans votre backend dans la documentation.
Questions
Quelle est la façon la plus simple d'accepter des paiements dans une application ?
Un Stripe Payment Link ne demande aucun code : vous le créez dans le tableau de bord Stripe et vous y faites un lien depuis votre application. Si votre application doit savoir qui a payé et débloquer quelque chose automatiquement, utilisez plutôt Stripe Checkout avec un webhook.
Ai-je besoin d'un webhook pour encaisser des paiements ?
Si votre application doit réagir à un paiement (débloquer un compte, marquer une commande comme payée, gérer un renouvellement), oui. La documentation de Stripe indique qu'on ne peut pas se fier uniquement à la page de succès, car un client peut payer sans jamais l'atteindre. Les webhooks sont aussi indispensables pour les abonnements.
Comment tester les paiements sans vrai argent ?
Utilisez les clés d'API de test (sandbox) de Stripe et ses numéros de carte de test, comme 4242 4242 4242 4242 avec n'importe quelle date d'expiration future et n'importe quel CVC à trois chiffres. Les transactions de test ne déplacent aucun argent réel.
Stripe gère-t-il la TVA et les taxes de vente à ma place ?
Stripe Tax peut calculer et collecter la taxe au moment du paiement, et signaler les endroits où vous pourriez devoir vous enregistrer, mais vous restez responsable de vos obligations fiscales. Consultez un expert-comptable pour votre situation.