Guide
Ricetta: abbonamento SaaS
Un piano mensile o annuale in crypto. Ogni periodo è una fattura con promemoria; la tua app chiede a Perly Pay chi ha accesso.
Non si possono prelevare crypto da un wallet, quindi un abbonamento si rinnova a fattura: prima che finisca il periodo, l’acquirente riceve la successiva e poi promemoria finché non la paga. Nessun addebito automatico. La tua app non conta i giorni: chiede a entitlements.check.
sell-subscription del plugin Perly Pay realizza questa ricetta nel tuo progetto. L’esempio eseguibile è examples/saas-subscription (MIT) nel repository del plugin.Come funziona
- 1
Un piano
Un prodotto e un prezzo con
model: "subscription"erecurring.interval(month,year…), con giorni di prova e di tolleranza se vuoi. - 2
Un abbonamento
Una fattura per quel prezzo con il tuo utente come cliente apre l’abbonamento e la sua prima fattura. Una volta pagata, il piano è attivo.
- 3
Accesso alle funzioni
entitlements.check({ customer_external_id, product })→has_accessedends_at, sul server, a ogni visita o con una cache breve. - 4
Ascolta
invoice.fulfilledper il primo pagamento e ogni rinnovo;subscription.past_due,subscription.unpaidesubscription.endedper avvisare e chiudere. - 5
Controlli per l’acquirente
Un link al portale cliente (
portalSessions.create): pagare un rinnovo aperto, pagare in anticipo o disdire.
Giorni di tolleranza, cambi di piano e stati sono in Subscriptions and reminders.
Esegui l’esempio
- 1
Installa
npm installinexamples/saas-subscription(Node 20.12+). - 2
Chiave
Copia
.env.examplein.enve metti una chiave di test (sk_test_…) inPERLY_PAY_SECRET_KEY. - 3
Prepara
npm run setupcrea il prodotto e il prezzo con la tua chiave e stampa i loro id per.env. - 4
Avvia
npm start(onpm run dev), come dice il suo README. - 5
Paga senza wallet
Abbonati dalla pagina principale, premi Simulate payment sulla fattura, poi apri
/pro?user=you@example.com: Pro resta aperto fino alla fine del periodo.
Errori comuni
- Promettere «addebiteremo dal tuo wallet». Non viene addebitato nulla; di’ «si rinnova a fattura».
- Un’email del cliente mancante o inventata: le fatture di rinnovo e i promemoria vanno lì.
- Togliere l’accesso al primo minuto di ritardo. Decidi cosa significa
past_due(dentro i giorni di tolleranza). - Dare l’accesso quando l’acquirente torna dal checkout. «Pagato» significa solo un webhook
invoice.fulfilledverificato oentitlements.checkdal tuo server.