Uygulamanızdan Node ya da Go ile lisans anahtarı kontrolü: cihaz sınırı, süre ve iptal
Skalp her satış için bir lisans anahtarı ürettiğinde uygulamanız bu anahtarı tek bir API çağrısıyla kontrol eder. Yanıt anahtarın çalışıp çalışmadığını, çalışmıyorsa nedenini söyler: süresi doldu, iadeden sonra iptal edildi, cihaz sınırını aştı ya da sona ermiş bir aboneliğe bağlı. Aşağıda kurulum ve Node, Go ile düz HTTP için kod var.
Ürünü ayarlayın
- Bir ürün oluşturun ve teslimatını lisans anahtarı olarak ayarlayın. Böylece her sipariş yeni bir anahtar alır.
- Bir anahtar yalnızca birkaç bilgisayarda çalışacaksa cihaz sınırı, lisans belirli bir gün sayısından sonra bitecekse süre belirleyin. Ömür boyu lisans için süreyi boş bırakın ya da ürünü abonelik olarak satın; anahtar plan ödendiği sürece çalışır.
- Yalnızca
licenses:validate kapsamına sahip bir API anahtarı oluşturun. Bu tek kapsamla anahtar siparişleri okuyamaz ve hiçbir şeyi değiştiremez, bu yüzden uygulamanızın içine konabilir.
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)
}
Paket Node 20+, Bun, Deno ve edge ortamlarında çalışır. Tarayıcıda, dangerouslyAllowBrowser: true vermediğiniz sürece API anahtarıyla başlamayı reddeder; bu yüzden bir web sayfası için kontrol sunucunuzda yapılmalı.
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)
}
Başka herhangi bir dil
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..."}'
Başka bir ürününüzün anahtarı bu ürünün kilidini açmamalıysa gövdeye "productId" ekleyin.
Kodların anlamı
| Kod | Anlamı |
VALID | Anahtar çalışıyor. Yanıtta bitiş tarihi ve kaç cihazda kullanıldığı da var. |
NOT_FOUND | Mağazanızda böyle bir anahtar yok. |
PRODUCT_MISMATCH | Anahtar, gönderdiğiniz productId'den farklı bir ürüne ait. |
LICENSING_DISABLED | Ürünün teslimatı lisans anahtarı olarak ayarlı değil. |
REVOKED | Sipariş iade edildi ya da bir ters ibrazı kaybetti. |
SUSPENDED | Lisans askıya alındı. |
EXPIRED | Lisansın bitiş tarihi geçti. |
SUBSCRIPTION_INACTIVE | Anahtarın bağlı olduğu abonelik sona erdi. |
DEVICE_LIMIT_REACHED | Anahtar zaten ürünün izin verdiği sayıda bilgisayara bağlı. |
Cihaz sınırı
Bir hardwareId gönderirseniz ve ürünün cihaz sınırı varsa, yeni bir bilgisayardan gelen ilk kontrol o bilgisayarı anahtara bağlar. Bağlı bilgisayarlardan gelen kontroller geçer, sınırın üstündeki yeni bir bilgisayar ise DEVICE_LIMIT_REACHED alır. Aynı bilgisayarda değişmeyen bir değer gönderin ve önce hash'leyin, böylece ham donanım bilgisi bilgisayardan çıkmaz. Bir alıcı bilgisayarını değiştirdiğinde sunucunuz yerleri licenses.resetDevices ile boşaltabilir. Bu çağrı licenses:write kapsamı ister, bu yüzden asla uygulamanın içine konmamalı.
Çevrimdışı çalışmak
Anahtarı uygulama açılırken kontrol edin ve son geçerli yanıtı zaman damgasıyla saklayın. Ağ yoksa saklanan yanıtı seçtiğiniz bir tolerans süresi boyunca, örneğin birkaç gün, kabul edin ve uygulama yeniden çevrimiçi olunca tekrar kontrol edin. Bu arada iptal edilen bir anahtar o kontrolden geçmez.
Kendi kopyanızı tutmak
Anahtarları kendi arka ucunuzda kontrol etmeyi tercih ederseniz, siparişin lisanslarını içeren order.paid webhook'undan alın. İade ve itiraz webhook'ları bir anahtarı ne zaman kapatmanız gerektiğini söyler. Webhook'lar ve API.
Sık sorulan sorular
Bir masaüstü uygulamasına API anahtarı koymak güvenli mi?
Yalnızca tek kapsamı licenses:validate olan bir anahtar. Bu anahtar anahtarları kontrol edebilir, başka hiçbir şey yapamaz.
Alıcı lisansını yeni bir bilgisayara taşıyabilir mi?
Evet, siz cihazlarını sunucunuzdan ya da destek aracınızdan licenses.resetDevices ile boşalttıktan sonra.
Abonelik bitince anahtara ne olur?
O andan itibaren kontrol SUBSCRIPTION_INACTIVE döndürür.
SDK kullanmak zorunda mıyım?
Hayır. Kontrol, JSON gövdeli tek bir HTTPS POST isteğidir; istek gönderebilen her dil işinizi görür.