Vérifier des clés de licence depuis votre application en Node ou Go : limite d'appareils, expiration et révocation
Quand Skalp génère une clé de licence pour chaque vente, votre application la vérifie en un seul appel d'API. La réponse indique si la clé fonctionne et, sinon, pourquoi : expirée, révoquée après un remboursement, au-delà de sa limite d'appareils ou liée à un abonnement terminé. Voici la configuration et le code pour Node, Go et HTTP brut.
- Créez un produit et réglez sa livraison sur clé de licence. Chaque commande reçoit alors une nouvelle clé.
- Fixez une limite d'appareils si une clé ne doit tourner que sur quelques machines, et une durée si la licence doit expirer après un certain nombre de jours. Laissez la durée vide pour une licence à vie, ou vendez le produit en abonnement pour que la clé fonctionne tant que la formule est payée.
- Créez une clé API avec la seule portée
licenses:validate. Avec cette portée seule, la clé ne peut ni lire les commandes ni rien modifier, elle peut donc être livrée dans votre application.
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)
}
Le paquet tourne sur Node 20+, Bun, Deno et les runtimes edge. Dans un navigateur, il refuse de démarrer avec une clé API sauf si vous passez dangerouslyAllowBrowser: true, la vérification pour une page web a donc sa place sur votre serveur.
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)
}
Tout autre langage
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..."}'
Ajoutez "productId" au corps si une clé d'un autre de vos produits ne doit pas débloquer celui-ci.
Ce que signifient les codes
| Code | Signification |
VALID | La clé fonctionne. La réponse contient aussi sa date d'expiration et le nombre d'appareils utilisés. |
NOT_FOUND | Aucune clé de ce type n'existe dans votre boutique. |
PRODUCT_MISMATCH | La clé appartient à un autre produit que le productId envoyé. |
LICENSING_DISABLED | La livraison du produit n'est pas réglée sur clé de licence. |
REVOKED | La commande a été remboursée ou a perdu une rétrofacturation. |
SUSPENDED | La licence a été suspendue. |
EXPIRED | La licence a dépassé sa date de fin. |
SUBSCRIPTION_INACTIVE | L'abonnement lié à la clé est terminé. |
DEVICE_LIMIT_REACHED | La clé est déjà liée à autant de machines que le produit le permet. |
Limite d'appareils
Si vous envoyez un hardwareId et que le produit a une limite d'appareils, la première vérification depuis une nouvelle machine la lie à la clé. Les vérifications depuis les machines liées passent, et une nouvelle machine au-delà de la limite reçoit DEVICE_LIMIT_REACHED. Envoyez une valeur stable sur une même machine, et hachez-la d'abord pour qu'aucune donnée matérielle brute ne quitte l'ordinateur. Quand un acheteur change de PC, votre serveur peut libérer les places avec licenses.resetDevices. Cet appel demande la portée licenses:write et n'a donc jamais sa place dans l'application elle-même.
Fonctionner hors ligne
Vérifiez la clé au démarrage de l'application et enregistrez la dernière réponse valide avec son horodatage. Sans réseau, acceptez la réponse enregistrée pendant un délai de grâce que vous choisissez, quelques jours par exemple, puis vérifiez à nouveau quand l'application retrouve la connexion. Une clé révoquée entre-temps échoue à cette vérification.
Garder votre propre copie
Pour vérifier les clés dans votre propre backend, récupérez-les dans le webhook order.paid, qui contient les licences de la commande. Les webhooks de remboursement et de litige vous disent quand désactiver une clé. Les webhooks et l'API.
Questions fréquentes
Peut-on mettre une clé API dans une application de bureau sans risque ?
Seulement une clé dont la seule portée est licenses:validate. Elle peut vérifier des clés et rien d'autre.
Un acheteur peut-il transférer sa licence sur un nouvel ordinateur ?
Oui, dès que vous libérez ses appareils avec licenses.resetDevices depuis votre serveur ou votre outil de support.
Que devient la clé à la fin d'un abonnement ?
À partir de là, la vérification renvoie SUBSCRIPTION_INACTIVE.
Dois-je utiliser le SDK ?
Non. La vérification est un simple POST en HTTPS avec un corps JSON, tout langage capable d'envoyer une requête convient donc.