Guide
Ricetta: chiavi di licenza
Vendi un’app desktop, una CLI, un plugin o un template con chiavi di licenza. L’app verifica la chiave senza alcun segreto al suo interno.
Perly Pay emette una chiave quando il pagamento viene consegnato, conta le attivazioni per dispositivo e risponde a «questa chiave è valida per questo prodotto qui?» con endpoint pubblici. Il programma che distribuisci usa LicenseClient, che non ha bisogno di una chiave segreta.
sell-license-keys del plugin Perly Pay realizza questa ricetta nel tuo progetto. L’esempio eseguibile è examples/license-keys (MIT) nel repository del plugin.Come funziona
- 1
Un prodotto che emette chiavi
issues_license: trueelicense_activation_limit(dispositivi per chiave), con un prezzo una tantum, a vita, a durata o un abbonamento. - 2
Vendilo
Un link di pagamento sul tuo sito o una fattura per acquirente.
- 3
Consegna la chiave
Con il webhook
license.created(il suo oggetto è la chiave) o conlicenseKeys.list({ customer })dopoinvoice.fulfilled. La ricevuta non contiene la chiave. - 4
Attiva nell’app
activate({ key, product, instance_name })con un nome che non cambia su quel dispositivo; salva l’id dell’attivazione. - 5
Verifica all’avvio
validate({ key, product, instance }). Unvalid: falsenetto blocca; senza rete, l’ultima risposta buona vale per qualche giorno.
Esegui l’esempio
- 1
Installa
npm installinexamples/license-keys(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
npm run buy-test -- you@example.comcompra una copia in modalità test e stampa la chiave; poinpm run app -- activate <key>enpm run app -- pro hello.
Errori comuni
- Una chiave
sk_…dentro l’app. Chiunque può estrarla; il programma che distribuisci usa soloLicenseClient. - Senza
product, la chiamata viene rifiutata (parameter_missing). Passalo sempre; la chiave di qualsiasi altra cosa rispondewrong_product. - Un
instance_nameche cambia a ogni avvio: ogni avvio consuma un’attivazione.