Anleitungen
Rezept: Lizenzschlüssel
Verkaufen Sie eine Desktop-App, ein CLI, ein Plugin oder eine Vorlage mit Lizenzschlüsseln. Die App prüft den Schlüssel ohne jedes Geheimnis im Code.
Perly Pay stellt einen Schlüssel aus, wenn die Zahlung erfüllt ist, zählt Aktivierungen auf Geräten und beantwortet „ist dieser Schlüssel für dieses Produkt hier gültig?“ über öffentliche Endpunkte. Die Software, die Sie verteilen, nutzt LicenseClient – der braucht keinen geheimen Schlüssel.
sell-license-keys des Perly-Pay-Plugins in Ihrem Projekt um. Ein lauffähiges Beispiel ist examples/license-keys (MIT) im Repository des Plugins.So funktioniert es
- 1
Ein Produkt, das Schlüssel ausstellt
issues_license: trueundlicense_activation_limit(Geräte pro Schlüssel), mit Einmal-, Lebenslang-, Laufzeitpreis oder Abo. - 2
Verkaufen
Ein Zahlungslink auf Ihrer Website oder eine Rechnung pro Käufer.
- 3
Schlüssel senden
Über den Webhook
license.created(sein Objekt ist der Schlüssel) oder überlicenseKeys.list({ customer })nachinvoice.fulfilled. Der Beleg enthält keinen Schlüssel. - 4
Aktivierung in der App
activate({ key, product, instance_name })mit einem Namen, der auf diesem Gerät gleich bleibt; speichern Sie die Aktivierungs-ID. - 5
Prüfung beim Start
validate({ key, product, instance }). Ein klaresvalid: falsesperrt; ohne Netz gilt die letzte gute Antwort ein paar Tage.
Beispiel starten
- 1
Installieren
npm installinexamples/license-keys(Node 20.12+). - 2
Schlüssel
Kopieren Sie
.env.examplenach.envund tragen Sie einen Testschlüssel (sk_test_…) inPERLY_PAY_SECRET_KEYein. - 3
Vorbereiten
npm run setuplegt mit Ihrem Schlüssel Produkt und Preis an und gibt ihre IDs für.envaus. - 4
Starten
npm start(odernpm run dev), wie seine README sagt. - 5
Ohne Wallet bezahlen
npm run buy-test -- you@example.comkauft eine Kopie im Testmodus und gibt den Schlüssel aus; dannnpm run app -- activate <key>undnpm run app -- pro hello.
Fallstricke
- Ein Schlüssel
sk_…in der App. Jeder kann ihn herausziehen; Software, die Sie verteilen, nutzt nurLicenseClient. - Ohne
productwird der Aufruf abgelehnt (parameter_missing). Geben Sie es immer mit; ein Schlüssel für etwas anderes ergibtwrong_product. - Ein
instance_name, der sich bei jedem Start ändert: Jeder Start verbraucht eine Aktivierung.