Changer le thème

Paiement pour solo founder : Stripe, Paddle, Lemon Squeezy ou WeChat Pay ?

Easton editorial illustration: one dominant circular payment-routing switch with four selectable rails, one downstream stacked entitlement ledger/database receiving the verified flow

"Paddle : accorder l'accès et gérer l'état des abonnements avec les webhooks"

Avertissement : ce texte ne constitue pas un conseil fiscal, juridique, de création de société, de change ou d’éligibilité. Pour le Merchant of Record, la VAT/GST/sales tax, les structures nationales ou étrangères et les versements, consultez les conditions des services et des professionnels qualifiés.

Votre pricing.ts définit starter_monthly, pro_yearly, lifetime_license et wechat_one_time, mais la base ne possède qu’un champ is_paid. Le webhook checkout.session.completed arrive et le client revient par success_url, pourtant entitlements reste vide. Le problème ne vient pas du bouton de paiement : produits, commandes, abonnements et droits ne sont pas reliés.

Avant de choisir un service, il faut répondre à cinq questions : que vendre, comment facturer, à qui vendre, qui porte la transaction et les taxes de vente, et qui accorde l’accès après paiement ? Stripe, Paddle, Lemon Squeezy et WeChat Pay ne sont pas quatre boutons équivalents. Leurs responsabilités se situent à des niveaux différents.

Définir le modèle de vente avant le service de paiement

Un achat unique repose sur la commande et la livraison. Un abonnement SaaS implique tout le billing lifecycle. La facturation à l’usage exige aussi des données d’utilisation traçables. Modélisez d’abord ces choix dans products, prices et les tables locales.

Modèle de ventePoints de départ à évaluerÉvénements asynchrones clésTables locales principales
Produit numérique en achat uniqueStripe / Paddle / Lemon Squeezycheckout.session.completed / transaction.completed / order_createdorders + entitlements
Abonnement SaaSStripe Billing / Paddle Billing / Lemon Squeezycustomer.subscription.* / subscription.*subscriptions + entitlements + usage_events si nécessaire
Mixte, abonnement et achat uniqueStripe Billing / Paddle BillingPlusieurs événementsorders + subscriptions + entitlements
Chine continentale ou écosystème WeChatWeChat Pay (JSAPI/H5/Native)Callback de paiement et résultat de requêteorders + wechat_prepay

Trois points comptent :

  • Un produit unique demande surtout commande, livraison, remboursement et renvoi, sans cycle d’abonnement complet.
  • Un SaaS récurrent a besoin d’une table subscriptions avec current_period_start/end, cancel_at et status. La consommation impose des usage_events auditables.
  • WeChat Pay est un moyen de paiement et un système marchand, pas un Merchant of Record mondial ni une plateforme de SaaS billing.

Les capacités de Stripe Billing, Paddle Billing et WeChat Pay évoluent. Avant l’intégration, revérifiez région du compte, mode produit, moyens de paiement, version d’API et conditions.

Un Merchant of Record ne supprime pas toutes les responsabilités

Le Merchant of Record, ou MoR, est le vendeur officiel d’une transaction. Paddle et Lemon Squeezy utilisent ce modèle pour les produits numériques éligibles et gèrent dans ce cadre paiement, taxes de vente, remboursements ou litiges. Cela réduit le travail fiscal et opérationnel mondial, sans supprimer les obligations relatives à l’impôt sur le revenu, à la structure, à la conformité produit, aux données et à la comptabilité.

Avec Stripe, le marchand reste généralement vendeur officiel. Stripe Tax aide à calculer sales tax, VAT et GST et propose des outils de surveillance et d’enregistrement, mais ne transforme pas automatiquement Stripe en Merchant of Record. Enregistrement, déclaration et responsabilité dépendent du territoire et de la transaction.

Ne choisissez pas un MoR selon un seuil de revenus fixe. Comparez plutôt ces dimensions :

DimensionStack de paiement et billing gérée en interneMerchant of Record
PersonnalisationCombiner Checkout, Billing, Tax, factures et processus internesRespecter politique produit, checkout, contrat et règles de versement de la plateforme
Fiscalité et facturationLe marchand confirme enregistrement, déclaration, factures, remboursements et litigesLe MoR prend en charge taxes de vente, paiement et certaines tâches de conformité des transactions couvertes
CoûtAjouter aux frais de paiement outils fiscaux, développement, finance et supportExaminer versements, remboursements, suppléments et limites, pas seulement le pourcentage
Cas adaptéForte personnalisation, opérations existantes ou contrats particuliersRéduire le travail de taxes mondiales et d’abonnements pour un produit éligible

La limite contractuelle et fiscale dépend de la structure, du territoire, du produit et du client. Une page marketing présente un positionnement ; elle ne remplace ni les conditions ni un avis professionnel.

Choisir Stripe, Paddle, Lemon Squeezy ou WeChat Pay

Si vous voulez des abonnements et WeChat Pay, séparez d’abord les problèmes. Cycle d’abonnement, paiements mondiaux et paiement en Chine continentale peuvent utiliser des services différents. La présence d’un moyen de paiement ne garantit pas chaque région de compte, mode Checkout ou paiement récurrent.

ServiceModèle de responsabilitéAbonnements et achats uniquesPaiements en ChineLicence nativeBon point de départ
StripeOutils Payment, Billing et Tax ; généralement pas MoRCheckout et Billing très personnalisablesAlipay/WeChat Pay selon région, devise et mode produitPas de License Key généralSaaS qui veut contrôler paiement, abonnement, outils fiscaux et processus internes
PaddleMerchant of RecordPaddle Billing et CheckoutVérifier Dashboard et documentation selon compte et régionL’application gère les droitsLogiciel qui veut réduire taxes mondiales et opérations d’abonnement
Lemon SqueezyMerchant of RecordProduits numériques, abonnements simples et consommationAlipay/WeChat Pay possibles en achat unique ; abonnement plus limitéLicense KeysProduits numériques, licences et premiers abonnements
WeChat PayMoyen de paiement et système marchandJSAPI/H5/Native ; cycle de billing à construireChine continentale et WeChatAucuneAchats uniques en RMB et paiement WeChat

Les documents officiels confirmaient au 18 juillet 2026 :

  • Stripe Checkout propose page hébergée, page intégrée et composants combinables. Les moyens disponibles dépendent de la région, de la devise et du mode Checkout.
  • Les webhooks Paddle sont livrés au moins une fois. Sans réponse 200 en cinq secondes, Paddle réessaie. Les événements peuvent être dupliqués ou désordonnés ; utilisez event_id pour dédupliquer et occurred_at pour l’ordre.
  • Lemon Squeezy liste Cards, PayPal, Apple Pay, Google Pay, Alipay, WeChat Pay, Cash App Pay et bank debits. Les abonnements n’acceptent actuellement que Cards, Apple Pay, Google Pay et PayPal.
  • Le flux H5 de WeChat Pay exige création de commande côté serveur, callback et requête active de statut. Le retour navigateur n’est pas une preuve suffisante.

Frais, moyens, cycles de versement, pays et politiques évoluent. Pour le budget final, ouvrez les pages de prix et les contrats du jour plutôt que de recopier un ancien pourcentage.

Le webhook est la frontière de synchronisation des droits

Deux échecs fréquents :

  1. checkout.session.completed arrive et success_url est visité, mais entitlements n’est pas mis à jour et le client payant reste bloqué.
  2. Le même événement entre deux fois dans webhook_events et le handler émet deux licences.

Ces erreurs viennent du fait qu’une requête HTTP ou une page de succès est traitée comme vérité métier finale. Les événements peuvent être dupliqués, retardés ou désordonnés. Certains états exigent aussi une requête ou un événement ultérieur.

Principes de conception d’un endpoint webhook

PrincipeStripePaddleLemon SqueezyWeChat Pay
HTTPS endpointObligatoireObligatoireObligatoireObligatoire
Vérification de signatureStripe-SignaturePaddle-SignatureX-SignatureSignature WeChat Pay API v3
Clé d’idempotenceID d’événement ou d’objet métierevent_idType d’événement + ID d’objet ou clé uniqueout_trade_no et ID de transaction
RéponseVérifier et stocker, répondre vite, puis traiter en asynchroneRetourner 200 en cinq secondesRépondre avec succès puis traiter en asynchroneSuivre le contrat API actuel
CompensationInterroger paiement ou abonnementInterroger les entités et réconcilierInterroger commande ou abonnementInterroger, rapprocher les relevés et réparer manuellement

Les règles d’exploitation sont simples :

  • Le webhook ou callback est l’entrée de synchronisation. success_url affiche le traitement sans accorder les droits.
  • Vérifiez d’abord la signature, puis stockez l’événement brut ou les champs requis dans webhook_events. Déplacez le travail complexe vers un job asynchrone.
  • Une contrainte unique assure l’idempotence. Enregistrez event_id, source, occurred_at, processed_at, status et payload_hash.
  • Pour l’ordre, comparez heure de l’événement, mise à jour de l’objet ou version d’état, jamais uniquement l’heure d’arrivée.
  • Exécutez régulièrement une reconciliation, interrogez commande ou abonnement et conservez une reprise manuelle.

Tables de commandes, abonnements, droits et événements

TableChamps principauxMapping StripeMapping PaddleMapping Lemon Squeezy
ordersprovider_order_id, customer_id, amount, currency, status, created_atCheckout Session / PaymentIntenttransactionorder
subscriptionsprovider_subscription_id, customer_id, status, current_period_end, cancel_atsubscriptionsubscriptionsubscription
entitlementsuser_id, product_id, feature_key, source, status, expires_atDérivé de order ou subscriptionDérivé de transaction ou subscriptionDérivé de order, subscription ou license
webhook_eventsprovider, event_id, occurred_at, processed_at, status, payload_hashIdempotence et auditIdempotence et ordreIdempotence et audit

Ne copiez pas tous les objets d’une API dans les tables locales. Définissez les champs stables nécessaires au contrôle d’accès, puis conservez les ID fournisseur pour requêtes et reconciliation.

Stratégies de synchronisation des droits

StratégieUsageMise en œuvre
Lean cacheLa plupart des SaaS récurrentsStocker seulement customer, subscription, status, price et product nécessaires à l’accès, puis mettre à jour par événement
State mirrorVues de facturation hors ligne ou opérations complexesRépliquer davantage de données, enregistrer l’heure de mise à jour et éviter les écarts par reconciliation
License keyProduit numérique unique ou logiciel desktopStocker l’instance ID après activation et vérifier store, product, variant et customer ; une clé n’est pas un système utilisateur complet

La documentation officielle de provisioning Paddle recommande un lean cache pour la plupart des applications. Passez au state mirror seulement si des requêtes locales plus riches sont nécessaires. Les clés Lemon Squeezy exigent aussi de valider produit et client côté application et de relier l’instance au modèle de compte et d’appareil.

Points d’intégration propres à chaque service

Ces points définissent une première limite de mise en œuvre sans remplacer la documentation complète des services.

Intégrer Stripe

Un jeune SaaS peut commencer par Checkout hébergé et Customer Portal plutôt que maintenir un formulaire de carte. Stripe Billing gère abonnements, factures, facturation à l’usage et revenue recovery. Stripe Tax est un outil de calcul et de processus fiscal, pas un Merchant of Record.

Produits et prix doivent correspondre aux droits locaux : product_id représente le produit ou paquet d’accès, price_id le tarif mensuel, annuel, par seat ou usage. Ne laissez pas seulement is_paid sur users.

Le tutoriel Next.js de panier et paiement Stripe présente Checkout Session, endpoint webhook et traitement de commande.

Intégrer Paddle

Vérifiez qu’un tutoriel vise Paddle Billing et non Paddle Classic. Leurs API, webhooks, Paddle.js et modèles Product/Price diffèrent.

Paddle Checkout affiche la caisse, mais l’application reste responsable du provisioning. La plupart n’ont besoin que de customer, subscription, status, price, product et scheduled change pour décider l’accès. Créez un state mirror seulement si les opérations exigent les données complètes.

Dans les deux cas, mettez le cache à jour par webhook et lancez une reconciliation. Un Merchant of Record ne dit pas automatiquement à l’application qui peut utiliser quelle fonction.

Intégrer Lemon Squeezy

Lemon Squeezy est un point de départ pour produits numériques, licences et abonnements assez simples. Il fournit Merchant of Record, checkout, abonnements, usage-based billing, webhooks et License Keys. Vérifiez frais et portée dans le store plan et la documentation actuels.

Après activation, stockez l’instance ID et vérifiez store_id, product_id, variant_id et customer. Une clé d’un autre produit ou revendue ne doit pas donner directement le droit Pro.

Pour un abonnement WeChat Pay, vérifiez séparément les moyens récurrents. La documentation liste WeChat Pay et Alipay, mais les abonnements n’acceptent que Cards, Apple Pay, Google Pay et PayPal.

Limites de WeChat Pay

WeChat Pay convient aux paiements en Chine continentale et dans WeChat, mais n’est ni un Merchant of Record mondial ni un cycle de SaaS billing complet. Le marchand doit gérer état de commande, signature du callback, requêtes, remboursements, reconciliation, factures et droits.

H5, JSAPI, Mini Program et Native sont des scénarios de paiement, pas des systèmes d’abonnement. En H5, le backend crée la commande et transmet h5_url au frontend. Après le retour du navigateur, il interroge encore la commande et applique le callback à celle identifiée par out_trade_no.

Vérifiez droits produit, entité marchande, domaines, frais et paramètres API dans la documentation marchande WeChat Pay actuelle.

Étape suivante : transformer le bouton en machine à états testable

Après le choix des services, découpez l’intégration en tâches vérifiables :

  1. Créez orders, subscriptions, entitlements et webhook_events, puis usage_events pour la consommation.
  2. Implémentez signature, idempotence, désordre, réponse rapide et reprise pour chaque webhook ou callback.
  3. Faites interroger l’état local par la page de succès au lieu d’écrire is_paid=true.
  4. Ajoutez des tests de requête, reconciliation, remboursement, renouvellement échoué et reprise manuelle.
  5. Dans la sandbox, renvoyez les événements et inversez les mises à jour. Les droits ne doivent être ni doublés ni annulés à tort.

Pour l’hébergement backend et la base de données, poursuivez avec le guide pratique Supabase Edge Functions et les articles backend et base de données de cette série. La fin n’est pas le retour réussi de la page de paiement : commandes, abonnements et droits doivent converger vers le bon état malgré doublons, retards, désordre et remboursements.

Choisir et mettre en œuvre une stack de paiement en solo

Partez du modèle de vente, des responsabilités et du marché cible pour choisir les services et construire une synchronisation des droits auditable.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: Définir le modèle de vente

    Précisez achat unique, abonnement SaaS, facturation à l'usage ou modèle hybride, puis documentez remboursement, renouvellement, montée et baisse de gamme et fin d'accès.
  2. 2

    Step 2: Répartir les responsabilités fiscales et opérationnelles

    Décidez de combiner vous-même paiement, billing et Tax ou de choisir un Merchant of Record. Vérifiez les questions de structure juridique et de fiscalité dans les conditions du service et auprès de professionnels.
  3. 3

    Step 3: Choisir les moyens de paiement par marché

    Évaluez Stripe, Paddle et Lemon Squeezy pour les cartes et abonnements mondiaux. Étudiez WeChat Pay pour les achats uniques en Chine continentale ou dans WeChat, en vérifiant région du compte, catégorie de produit et éligibilité.
  4. 4

    Step 4: Créer le modèle d'état local

    Créez orders, subscriptions, entitlements et webhook_events. Des identifiants d'événement ou de commande uniques garantissent idempotence et audit.
  5. 5

    Step 5: Tester la synchronisation asynchrone des droits

    Testez signature, doublons, ordre inversé, délais, remboursements, échecs de renouvellement et reprise manuelle. La page de succès affiche l'état sans accorder l'accès.

FAQ

Quelle est la différence principale entre Stripe, Paddle et Lemon Squeezy ?
Stripe fournit des outils de paiement, Billing et Tax, tandis que le marchand conserve généralement les responsabilités commerciales, fiscales et opérationnelles. Paddle et Lemon Squeezy sont Merchant of Record pour les transactions couvertes et prennent en charge paiements, taxes de vente et une partie de la conformité. Votre application synchronise toujours ses droits.
Faut-il commencer avec un Merchant of Record ou Stripe ?
Un seuil de chiffre d'affaires unique ne suffit pas. Comparez marchés, éligibilité du produit, capacité à gérer fiscalité et facturation, versements, remboursements, personnalisation et coût total. Demandez conseil pour la structure juridique et la fiscalité.
Paddle ou Lemon Squeezy activent-ils automatiquement l'accès au SaaS ?
Non. Le service traite paiement, billing ou rôle de Merchant of Record, mais votre application doit recevoir les webhooks, relier commandes ou abonnements aux entitlements locaux et réparer les événements manqués par reconciliation.
Le support de WeChat Pay par Lemon Squeezy permet-il un abonnement WeChat Pay ?
Non, pas automatiquement. Lemon Squeezy liste actuellement WeChat Pay et Alipay, mais ses produits par abonnement n'acceptent pour le moment que les cartes, Apple Pay, Google Pay et PayPal. Vérifiez la documentation actuelle avant lancement.
WeChat Pay peut-il remplacer Stripe pour un SaaS mondial ?
Pas directement. WeChat Pay est un moyen de paiement et un système marchand pour la Chine continentale et WeChat. Abonnements mondiaux, taxes de vente, cycle de facturation et multi-devise demandent une conception séparée.
Comment traiter des webhooks en double, désordonnés ou manquants ?
Vérifiez la signature, stockez l'événement d'origine et imposez un identifiant d'événement ou de commande unique. Utilisez l'heure ou la version d'état pour l'ordre, répondez vite, traitez en asynchrone et comblez les écarts par requêtes, reconciliation et reprise manuelle.
Quelles tables faut-il pour un système de paiement minimal ?
Au minimum orders, entitlements et webhook_events. Ajoutez subscriptions pour le récurrent et des usage_events traçables pour la facturation à l'usage.

11 min de lecture · Publié le: 21 oct. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog