Lizenzschlüssel aus Ihrer App prüfen, in Node oder Go: Gerätelimit, Ablauf und Widerruf
Wenn Skalp für jeden Verkauf einen Lizenzschlüssel erzeugt, prüft Ihre App ihn mit einem API-Aufruf. Die Antwort sagt, ob der Schlüssel funktioniert, und wenn nicht, warum: abgelaufen, nach einer Erstattung widerrufen, über dem Gerätelimit oder an ein beendetes Abo gebunden. Unten finden Sie die Einrichtung und den Code für Node, Go und einfaches HTTP.
Das Produkt einrichten
- Legen Sie ein Produkt an und stellen Sie die Lieferart auf Lizenzschlüssel. Jede Bestellung bekommt dann einen neuen Schlüssel.
- Legen Sie ein Gerätelimit fest, wenn ein Schlüssel nur auf wenigen Rechnern laufen soll, und eine Laufzeit, wenn die Lizenz nach einer Anzahl von Tagen ablaufen soll. Lassen Sie die Laufzeit leer für eine unbefristete Lizenz, oder verkaufen Sie das Produkt als Abo, damit der Schlüssel funktioniert, solange der Plan bezahlt ist.
- Erstellen Sie einen API-Schlüssel mit nur dem Scope
licenses:validate. Mit diesem Scope allein kann der Schlüssel weder Bestellungen lesen noch etwas ändern, er darf also in Ihrer App ausgeliefert werden.
Node
import { Skalp } from '@skalpgg/sdk'
const skalp = new Skalp({ apiKey: LICENSE_CHECK_KEY })
const result = await skalp.licenses.validate({
key: enteredKey,
hardwareId: machineId,
})
if (!result.valid) {
showError(result.message)
} else {
unlock(result.license?.expiresAt)
}
Das Paket läuft auf Node 20+, Bun, Deno und Edge-Runtimes. Im Browser startet es mit einem API-Schlüssel nur, wenn Sie dangerouslyAllowBrowser: true übergeben. Eine Prüfung für eine Webseite gehört also auf Ihren Server.
Go
client := skalp.New(skalp.Options{APIKey: licenseCheckKey})
res, err := client.ValidateLicense(ctx, skalp.ValidateLicenseParams{
Key: enteredKey,
HardwareID: machineID,
})
if err != nil {
return err
}
if !res.Valid {
return fmt.Errorf("license: %s", res.Message)
}
Jede andere Sprache
curl https://api.skalp.gg/v1/licenses/validate \
-H "x-api-key: $SKALP_LICENSE_CHECK_KEY" \
-H "content-type: application/json" \
-d '{"key":"THE-BUYERS-KEY","hardwareId":"9f2c41..."}'
Fügen Sie dem Body "productId" hinzu, wenn ein Schlüssel aus einem Ihrer anderen Produkte dieses nicht freischalten darf.
Was die Codes bedeuten
| Code | Bedeutung |
VALID | Der Schlüssel funktioniert. Die Antwort enthält auch das Ablaufdatum und die Zahl der genutzten Geräte. |
NOT_FOUND | In Ihrem Shop gibt es keinen solchen Schlüssel. |
PRODUCT_MISMATCH | Der Schlüssel gehört zu einem anderen Produkt als der gesendeten productId. |
LICENSING_DISABLED | Die Lieferart des Produkts ist nicht Lizenzschlüssel. |
REVOKED | Die Bestellung wurde erstattet oder hat eine Rückbuchung verloren. |
SUSPENDED | Die Lizenz wurde gesperrt. |
EXPIRED | Die Lizenz hat ihr Enddatum überschritten. |
SUBSCRIPTION_INACTIVE | Das Abo hinter dem Schlüssel ist beendet. |
DEVICE_LIMIT_REACHED | Der Schlüssel ist bereits an so viele Rechner gebunden, wie das Produkt erlaubt. |
Gerätelimit
Senden Sie eine hardwareId und hat das Produkt ein Gerätelimit, bindet die erste Prüfung von einem neuen Rechner diesen an den Schlüssel. Prüfungen von gebundenen Rechnern gehen durch, ein neuer Rechner über dem Limit bekommt DEVICE_LIMIT_REACHED. Senden Sie einen Wert, der auf einem Rechner gleich bleibt, und hashen Sie ihn vorher, damit keine rohen Hardwaredaten den Rechner verlassen. Tauscht ein Käufer seinen PC aus, gibt Ihr Server die Plätze mit licenses.resetDevices frei. Dieser Aufruf braucht den Scope licenses:write und gehört deshalb nie in die App selbst.
Offline arbeiten
Prüfen Sie den Schlüssel beim Start der App und speichern Sie die letzte gute Antwort mit Zeitstempel. Ohne Netz akzeptieren Sie die gespeicherte Antwort für eine Kulanzzeit Ihrer Wahl, zum Beispiel einige Tage, und prüfen erneut, sobald die App wieder online ist. Ein inzwischen widerrufener Schlüssel scheitert an dieser Prüfung.
Eine eigene Kopie führen
Wollen Sie Schlüssel lieber im eigenen Backend prüfen, nehmen Sie sie aus dem Webhook order.paid, der die Lizenzen der Bestellung enthält. Die Webhooks für Erstattungen und Streitfälle sagen Ihnen, wann Sie einen Schlüssel abschalten müssen. Webhooks und die API.
Häufige Fragen
Ist es sicher, einen API-Schlüssel in eine Desktop-App zu packen?
Nur einen Schlüssel, dessen einziger Scope licenses:validate ist. Er kann Schlüssel prüfen und sonst nichts.
Kann ein Käufer seine Lizenz auf einen neuen Rechner übertragen?
Ja, sobald Sie seine Geräte mit licenses.resetDevices über Ihren Server oder Ihr Support-Tool freigeben.
Was passiert mit dem Schlüssel, wenn ein Abo endet?
Ab dann liefert die Prüfung SUBSCRIPTION_INACTIVE.
Muss ich das SDK nutzen?
Nein. Die Prüfung ist ein einzelner HTTPS-POST mit JSON-Body, jede Sprache, die eine Anfrage senden kann, funktioniert also.