Cambia tema

Pagamenti per un'attività individuale: Stripe, Paddle, Lemon Squeezy o 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: concedere accesso e gestire lo stato degli abbonamenti con i webhook"

Avvertenza: questo testo non offre consulenza fiscale, legale, societaria, valutaria o di eleggibilità. Per Merchant of Record, VAT/GST/sales tax, entità nazionali o estere e versamenti, consulta termini e professionisti qualificati.

Il tuo pricing.ts definisce starter_monthly, pro_yearly, lifetime_license e wechat_one_time, ma il database ha solo is_paid. Arriva checkout.session.completed e il cliente torna da success_url, però entitlements resta vuoto. Non è un problema del pulsante: il sistema non collega prodotti, ordini, abbonamenti e accessi.

Prima di scegliere bisogna rispondere a cinque domande: cosa vendere, come fatturare, a chi, chi risponde della transazione e delle imposte sulle vendite, e chi abilita l’accesso dopo il pagamento. I quattro servizi coprono livelli diversi.

Definire il modello di vendita prima del provider

L’acquisto singolo ruota intorno a ordine e consegna. Un abbonamento SaaS richiede tutto il billing lifecycle. Il consumo richiede anche dati tracciabili. Porta prima il modello in products, prices e tabelle locali.

Modello di venditaPunti di partenzaEventi asincroni chiaveTabelle locali
Prodotto digitale singoloStripe / Paddle / Lemon Squeezycheckout.session.completed / transaction.completed / order_createdorders + entitlements
Abbonamento SaaSStripe Billing / Paddle Billing / Lemon Squeezycustomer.subscription.* / subscription.*subscriptions + entitlements + usage_events se serve
Abbonamento e acquisto singoloStripe Billing / Paddle BillingPiù eventiorders + subscriptions + entitlements
Cina continentale o WeChatWeChat Pay (JSAPI/H5/Native)Callback e query ordineorders + wechat_prepay

Tre punti importanti:

  • Un prodotto singolo richiede ordine, consegna, rimborso e reinvio, non l’intero ciclo di abbonamento.
  • Un SaaS ricorrente richiede subscriptions con current_period_start/end, cancel_at e status; il consumo aggiunge usage_events verificabili.
  • WeChat Pay è un metodo di pagamento e sistema commerciale, non un Merchant of Record globale o una piattaforma SaaS billing.

Le capacità cambiano. Prima di integrare, controlla regione dell’account, modalità prodotto, metodi, versione API e termini.

Un Merchant of Record non elimina ogni responsabilità

Il Merchant of Record, o MoR, è il venditore registrato della transazione. Paddle e Lemon Squeezy usano questo modello per prodotti digitali idonei e gestiscono pagamento, imposte sulle vendite, rimborsi o contestazioni nel relativo ambito. Il lavoro fiscale globale diminuisce, ma restano obblighi su reddito, entità, prodotto, dati e contabilità.

Con Stripe, il commerciante resta di solito il venditore registrato. Stripe Tax aiuta a calcolare sales tax, VAT e GST e offre strumenti di monitoraggio e registrazione, ma non trasforma Stripe in Merchant of Record. Registrazione e dichiarazione dipendono da giurisdizione e transazione.

Non scegliere un MoR con una soglia fissa di ricavi. Confronta:

DimensioneStack payment e billing proprioMerchant of Record
PersonalizzazioneCombinare Checkout, Billing, Tax, fatture e processi interniSeguire politica prodotto, checkout, contratto e versamenti
Operazioni fiscali e billingIl venditore verifica registrazione, dichiarazione, fatture, rimborsi e contestazioniIl MoR assume imposte, pagamento e parte della compliance nelle transazioni coperte
CostoSommare strumenti fiscali, sviluppo, finanza e supporto alla commissioneValutare versamenti, rimborsi, extra e limiti, non solo percentuale
Quando convieneMolta personalizzazione, operazioni esistenti o contratti specialiMeno lavoro fiscale globale e sugli abbonamenti per prodotti idonei

Il confine contrattuale e fiscale dipende da entità, territorio, prodotto e cliente. Una pagina marketing non sostituisce termini o consulenza.

Scegliere Stripe, Paddle, Lemon Squeezy o WeChat Pay

Se servono abbonamenti e WeChat Pay, separa i problemi. Ciclo dell’abbonamento, pagamenti globali e Cina possono usare servizi diversi. Un metodo elencato non funziona necessariamente in ogni regione, modalità Checkout o ricorrenza.

ServizioResponsabilitàAbbonamenti e acquisti singoliPagamenti CinaLicenza nativaBuon punto di partenza
StripePayment, Billing e Tax; di solito non MoRCheckout e Billing personalizzabiliAlipay/WeChat Pay dipendono da regione, valuta e modalitàNessun License Key generaleSaaS che controlla pagamenti, abbonamenti, imposte e processi
PaddleMerchant of RecordPaddle Billing e CheckoutControllare Dashboard e documentazione per account e regioneL’app gestisce accessoSoftware che riduce imposte globali e operazioni ricorrenti
Lemon SqueezyMerchant of RecordDigitali, abbonamenti semplici e consumoAlipay/WeChat Pay per acquisti singoli; ricorrenza limitataLicense KeysDigitali, licenze e primi abbonamenti
WeChat PayMetodo di pagamento e sistema commercialeJSAPI/H5/Native; billing proprioCina continentale e WeChatNessunaAcquisti singoli in RMB e checkout WeChat

La documentazione ufficiale confermava il 18 luglio 2026:

  • Stripe Checkout offre pagine hosted, embedded e componenti combinabili. I metodi dipendono da regione, valuta e modalità Checkout.
  • Paddle consegna webhook almeno una volta. Senza 200 in cinque secondi riprova. Gli eventi possono duplicarsi o arrivare fuori ordine; usa event_id e occurred_at.
  • Lemon Squeezy elenca Cards, PayPal, Apple Pay, Google Pay, Alipay, WeChat Pay, Cash App Pay e bank debits. Gli abbonamenti accettano solo Cards, Apple Pay, Google Pay e PayPal.
  • WeChat Pay H5 richiede ordine server, callback e query attiva. Il ritorno del browser non è definitivo.

Commissioni, metodi, versamenti, paesi e politiche cambiano. Consulta prezzi e contratti correnti per il budget.

Il webhook è il confine della sincronizzazione degli accessi

Due errori comuni:

  1. checkout.session.completed arriva e success_url si apre, ma entitlements non cambia e il cliente non accede.
  2. Lo stesso evento entra due volte in webhook_events e l’handler emette due licenze.

Entrambi trattano una richiesta HTTP o una pagina di successo come verità finale. Gli eventi possono duplicarsi, ritardare o arrivare fuori ordine; alcuni stati richiedono query o eventi successivi.

Principi per l’endpoint webhook

PrincipioStripePaddleLemon SqueezyWeChat Pay
HTTPS endpointObbligatorioObbligatorioObbligatorioObbligatorio
Verifica firmaStripe-SignaturePaddle-SignatureX-SignatureFirma WeChat Pay API v3
Chiave idempotenteID evento o oggettoevent_idTipo + ID oggetto o chiave unicaout_trade_no e ID transazione
RispostaVerificare e salvare, rispondere subito, elaborare in asincrono200 entro cinque secondiRispondere successo e procedere in asincronoSeguire il contratto attuale
CompensazioneQuery pagamento o abbonamentoQuery entità e reconciliationQuery ordine o abbonamentoQuery, riconciliazione e recupero manuale

Regole operative:

  • Webhook o callback avvia la sincronizzazione. success_url mostra soltanto l’elaborazione.
  • Verifica la firma e salva evento o campi in webhook_events; sposta il lavoro complesso in un job asincrono.
  • Imposta un vincolo univoco e registra event_id, source, occurred_at, processed_at, status e payload_hash.
  • Per l’ordine confronta orario, aggiornamento oggetto o versione di stato, non solo l’arrivo.
  • Esegui reconciliation, interroga ordine o abbonamento e conserva il recupero manuale.

Tabelle per ordini, abbonamenti, accessi ed eventi

TabellaCampi principaliStripePaddleLemon 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_atDerivato da order o subscriptionDerivato da transaction o subscriptionDerivato da order, subscription o license
webhook_eventsprovider, event_id, occurred_at, processed_at, status, payload_hashIdempotenza e auditIdempotenza e ordineIdempotenza e audit

Non copiare ogni oggetto API. Definisci campi stabili per l’accesso e conserva gli ID del provider per query e reconciliation.

Strategie di sincronizzazione degli accessi

StrategiaQuando usarlaImplementazione
Lean cacheLa maggior parte dei SaaS ricorrentiSalvare customer, subscription, status, price e product necessari e aggiornare con gli eventi
State mirrorViste offline o pannelli operativi complessiReplicare più dati, registrare aggiornamento e prevenire differenze con reconciliation
License keyProdotto digitale singolo o desktopSalvare instance ID e verificare store, product, variant e customer; la chiave non è un sistema utenti

Paddle consiglia lean cache per la maggior parte delle app. Usa state mirror solo per query locali necessarie. Anche le chiavi Lemon Squeezy richiedono la verifica di prodotto e cliente e l’associazione dell’instance ad account e dispositivo.

Punti di integrazione per ogni servizio

Questi punti delimitano la prima implementazione e non sostituiscono la documentazione completa.

Integrare Stripe

Un SaaS iniziale può usare Checkout hosted e Customer Portal anziché mantenere un modulo carta. Stripe Billing gestisce abbonamenti, fatture, consumo e revenue recovery. Stripe Tax è uno strumento fiscale, non un MoR.

Prodotti e prezzi vanno mappati agli accessi: product_id è prodotto o pacchetto; price_id mensile, annuale, seat o usage. Non lasciare solo is_paid in users.

Il tutorial Next.js su carrello e Stripe copre Checkout Session, endpoint webhook e ordini.

Integrare Paddle

Verifica che il tutorial usi Paddle Billing, non Paddle Classic. Cambiano API, webhook, Paddle.js e Product/Price.

Paddle Checkout mostra la cassa, ma l’app esegue provisioning. Di solito bastano customer, subscription, status, price, product e scheduled change. Crea state mirror solo se servono dati completi.

Aggiorna via webhook ed esegui reconciliation. Un MoR non sa automaticamente chi può usare ogni funzione.

Integrare Lemon Squeezy

Lemon Squeezy è adatto a prodotti digitali, licenze e abbonamenti semplici. Offre MoR, checkout, subscriptions, usage-based billing, webhooks e License Keys. Verifica costi e ambito nello store plan corrente.

Dopo l’attivazione salva instance ID e verifica store_id, product_id, variant_id e customer. Una chiave altrui o rivenduta non deve attivare Pro.

Per un abbonamento WeChat Pay controlla separatamente i metodi ricorrenti. La documentazione elenca WeChat Pay e Alipay, ma gli abbonamenti accettano Cards, Apple Pay, Google Pay e PayPal.

Limiti di WeChat Pay

WeChat Pay funziona in Cina continentale e WeChat, ma non è MoR globale né ciclo SaaS completo. Il venditore gestisce stato, firma, query, rimborsi, reconciliation, fatture e accessi.

H5, JSAPI, Mini Program e Native sono scenari di pagamento. In H5 il backend crea l’ordine e passa h5_url; al ritorno del browser interroga e applica il callback allo stesso out_trade_no.

Controlla autorizzazioni, entità, domini, commissioni e parametri nella documentazione WeChat Pay attuale.

Passo successivo: trasformare il pulsante in una macchina a stati testabile

Dopo la scelta, dividi l’integrazione in attività verificabili:

  1. Crea orders, subscriptions, entitlements e webhook_events; aggiungi usage_events per il consumo.
  2. Implementa firma, idempotenza, ordine inverso, risposta rapida e recupero per ogni webhook o callback.
  3. Fai interrogare lo stato locale alla pagina di successo invece di scrivere is_paid=true.
  4. Aggiungi test di query, reconciliation, rimborso, rinnovo fallito e recupero manuale.
  5. Reinvia eventi e inverti aggiornamenti nella sandbox; l’accesso non deve duplicarsi o tornare indietro per errore.

Per backend e database continua con Supabase Edge Functions e gli articoli backend e dati della serie. Completare non significa tornare dalla pagina di pagamento: ordini, abbonamenti e accessi devono convergere nonostante duplicati, ritardi, disordine e rimborsi.

Scegliere e implementare i pagamenti per un'attività individuale

Parti dal modello di vendita, dalle responsabilità e dal mercato per scegliere i provider e creare una sincronizzazione degli accessi verificabile.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: Definire il modello di vendita

    Specifica acquisto singolo, abbonamento SaaS, consumo o modello ibrido e documenta rimborso, rinnovo, upgrade, downgrade e fine dell'accesso.
  2. 2

    Step 2: Assegnare responsabilità fiscali e operative

    Decidi se combinare payment, billing e Tax o usare un Merchant of Record. Verifica entità e obblighi fiscali nei termini del provider e con consulenza professionale.
  3. 3

    Step 3: Scegliere i metodi per ogni mercato

    Valuta Stripe, Paddle e Lemon Squeezy per carte e abbonamenti globali e WeChat Pay per acquisti singoli in Cina o WeChat, verificando regione, categoria ed eleggibilità.
  4. 4

    Step 4: Creare lo stato locale

    Crea orders, subscriptions, entitlements e webhook_events. ID univoci di evento o ordine garantiscono idempotenza e audit.
  5. 5

    Step 5: Provare la sincronizzazione asincrona

    Prova firma, duplicati, ordine invertito, timeout, rimborsi, rinnovi falliti e recupero manuale. La pagina di successo mostra soltanto lo stato.

FAQ

Qual è la differenza principale tra Stripe, Paddle e Lemon Squeezy?
Stripe offre strumenti Payment, Billing e Tax, mentre il venditore mantiene in genere responsabilità commerciali, fiscali e operative. Paddle e Lemon Squeezy sono Merchant of Record per le transazioni coperte. L'applicazione deve comunque sincronizzare i propri entitlements.
Conviene iniziare con un Merchant of Record o con Stripe?
Non basta una soglia di ricavi. Confronta mercati, eleggibilità del prodotto, capacità fiscale e di fatturazione, versamenti, rimborsi, personalizzazione e costo totale. Per entità e imposte consulta un professionista.
Paddle o Lemon Squeezy abilitano automaticamente l'accesso SaaS?
No. Gestiscono pagamento, billing o compiti da Merchant of Record, ma l'app riceve i webhook, associa ordini o abbonamenti agli entitlements e recupera gli eventi mancanti con reconciliation.
Il supporto WeChat Pay di Lemon Squeezy vale anche per gli abbonamenti?
Non automaticamente. La documentazione elenca WeChat Pay e Alipay, ma gli abbonamenti accettano attualmente solo carte, Apple Pay, Google Pay e PayPal. Verifica la documentazione prima del lancio.
WeChat Pay può sostituire Stripe per un SaaS globale?
Non direttamente. È un metodo di pagamento e sistema commerciale per Cina continentale e WeChat. Abbonamenti globali, imposte, billing lifecycle e valute richiedono un altro progetto.
Come gestire webhook duplicati, fuori ordine o mancanti?
Verifica la firma, conserva l'evento e imponi un ID univoco. Usa orario o versione di stato per l'ordine, rispondi subito, elabora in asincrono e correggi con query, reconciliation e recupero manuale.
Quali tabelle servono a un sistema di pagamento minimo?
Almeno orders, entitlements e webhook_events. Aggiungi subscriptions per i ricorrenti e usage_events tracciabili per il consumo.

9 min di lettura · Pubblicato il: 21 ott 2026

Commenti

Accedi con GitHub per lasciare un commento

Easton BlogEaston Blog