Paiements — Stripe & PayPal
Présentation
Une fois le paywall activé, vous pouvez encaisser des paiements en ligne. Fatplant livre deux fournisseurs prêts à l’emploi : Stripe et PayPal.
Tout se configure dans le back-office — aucune donnée carte ne transite jamais par Fatplant.
Architecture
Les fournisseurs de paiement sont des « plugins » : chacun est un adaptateur placé derrière une interface générique commune. Stripe et PayPal sont fournis d’origine ; en ajouter un nouveau (par exemple Mollie ou Lemon Squeezy) revient à écrire une classe d’adaptateur, qui apparaît ensuite automatiquement dans l’écran de configuration.
Le webhook fait foi
Quand un lecteur paie, il est redirigé vers la page hébergée du fournisseur. C’est ensuite le webhook envoyé par le fournisseur — pas le retour du navigateur, qui est cosmétique — qui marque la transaction « payée » et débloque l’accès.
Sans webhook configuré, l’accès n’est jamais débloqué.
PayPal : la capture (le prélèvement effectif) se fait dans le webhook. Sans webhook, l’argent n’est même pas prélevé.
Clés chiffrées, test et production
Chaque fournisseur dispose de deux jeux de clés : un pour le mode test (sandbox, cartes fictives) et un pour la production (paiements réels). Un sélecteur de mode bascule de l’un à l’autre.
Les clés sont chiffrées et jamais réaffichées : après enregistrement, l’admin n’affiche qu’un indice masqué (les derniers caractères). Pour remplacer une clé, on saisit la nouvelle et on ré-enregistre.
Flux d’achat
- Sur le mur d’un article, un lecteur connecté clique sur « Payer avec Stripe » ou « Payer avec PayPal ».
- Il est redirigé vers la page hébergée du fournisseur (aucune donnée carte ne transite par Fatplant).
- Après paiement, il revient sur
/paiement/succes(ou/paiement/annules’il abandonne). - L’accès est débloqué par le webhook, quelques secondes plus tard.
Configuration côté admin
Tout se passe dans Paramètres → « Paiement en ligne » :
- saisir les identifiants (par mode), choisir le mode, Activer le fournisseur ;
- le bouton Tester valide les identifiants (« Connexion OK ») — il ne teste pas la livraison du webhook.
L’écran « Transactions » liste les paiements (filtrable). Sur une transaction, deux actions :
- Rembourser : appelle le fournisseur puis révoque l’accès accordé ;
- Relancer : régénère un nouveau lien de paiement à transmettre au lecteur.
URLs de webhook à déclarer
À renseigner côté fournisseur :
| Fournisseur | URL de webhook |
|---|---|
| Stripe | https://fatplant.dev/platform/api/payments/webhook/stripe |
| PayPal | https://fatplant.dev/platform/api/payments/webhook/paypal |
Événements à cocher
Stripe :
checkout.session.completed
checkout.session.expired
checkout.session.async_payment_failed
charge.refunded PayPal :
CHECKOUT.ORDER.APPROVED
PAYMENT.CAPTURE.REFUNDED
PAYMENT.CAPTURE.REVERSED Champs à saisir dans l’admin
| Fournisseur | Champs (test et production) |
|---|---|
| Stripe | Clé secrète (sk_…) · Secret de signature du webhook (whsec_…) |
| PayPal | Client ID · Secret · Webhook ID |
Tester un paiement
Pour un test de bout en bout avec Stripe en mode test, utilisez une carte de test :
| Champ | Valeur |
|---|---|
| Numéro | 4242 4242 4242 4242 |
| Expiration | n’importe quelle date future |
| CVC | 3 chiffres au hasard |
Effectuez ensuite un achat depuis le mur d’un article, puis vérifiez que la transaction passe à Payé dans l’écran « Transactions » et que l’accès est bien débloqué.
Aller plus loin
Un guide pas-à-pas plus détaillé (où récupérer chaque identifiant côté Stripe / PayPal, checklist de passage en production, dépannage) est disponible dans le dépôt, sous
docs/paiement/configuration-stripe-paypal.md.