# Pazar Yeri Ürününü Lisanslama

https://dev.wisecp.com/tr/pazar-yeri-urun-lisanslama

Ücretli ürününüzü yalnız satın alanların indirebilmesi için, Pazar Yeri'nin lisans sorusunu kendi sunucunuza nasıl soracağını tanımlayın.

## Genel Bakış

WISECP size hazır bir lisans sistemi vermez. Bir alan adının lisanslı olup olmadığına **kendi sunucunuz** karar verir. Siz yalnızca üç şeyi tanımlarsınız: sorunun hangi adrese gideceği, istekle birlikte ne gönderileceği ve hangi cevabın "lisanslı" anlamına geldiği.

Pazar Yeri her indirme isteğinde sunucunuza tek bir soru sorar: *indirmeyi yapan sistemin alan adı sizde lisanslı mı?*

Lisans kontrolü tanımlamak zorunlu değildir. Tanımlamazsanız ücretli ürününüz yine yayına girer, ancak indirmesi ücretsiz bir ürünle aynı şekilde herkese açık kalır.

## Ön Koşullar

- **Ticari bir ürün kaydı**: Lisans kontrolü ayarı yalnız fiyatı olan ürünlerde görünür. Ücretsiz üründe lisanslanacak bir şey yoktur.
- **İnternete açık bir https adresi**: Adres dışarıdan erişilebilir olmalı ve isteğe doğrudan cevap vermelidir. Yerel ağ adresleri kabul edilmez, yönlendirmeler izlenmez.
- **Alan adına göre verilen bir cevap**: Sunucunuz kararı yalnızca alan adına bakarak verebilmelidir. Karar için başka bilgi isteyen bir sistem bu kontrole bağlanamaz.
- **Lisanslı olduğunu bildiğiniz bir alan adı**: Testin geçmesi için gerçek bir olumlu cevap gerekir. Her alan adına "lisanssız" diyen bir adres de erişilebilir sayılır, ama testi geçmez.

## Yapı

Önce **Lisans kontrolü tanımla** seçeneğini açın, sonra türünü seçin. Bu ikisi aynı ayarın seçenekleri değil, iki farklı bağlantı yöntemidir; her birinde farklı alanlar doldurursunuz.

| Tür | Kime uygun | Ne verirsiniz |
| --- | --- | --- |
| WISECP | Kendi WISECP sisteminiz var ve ürünü lisans anahtarlı yazılım olarak satıyorsunuz | Kendi paketinizde zaten hazır olan kontrol adresi |
| Özel | Diğer her şey: kendi API'niz, bir lisans servisi ya da sabit bir izin listesi | İsteğin biçimi ve olumlu cevabın nasıl tanınacağı |

Kontrol yalnız iki anda çalışır: bir alıcı indirmeye başladığında ve bir müşteri değerlendirme yazmaya başladığında. Sayfa açılışlarında sorulmaz. Olumlu cevap on dakika saklanır ve bu süre içinde tekrar sorulmaz.

## Adım Adım

### WISECP türünü bağlayın

1. Kendi panelinizde yazılım ürününüzü açıp **Lisanslama** sekmesine gidin. Kontrol adresi orada kopyalanmaya hazır durur: `https://siteniz.example/license/checking/{token}/{urun-id}`.
2. Adresi **Kontrol adresi** alanına yapıştırın. Başka alan doldurmanız gerekmez; bu türde hem isteğin hem cevabın biçimi sabittir.
3. Pazar Yeri bu adresi alıcının alan adıyla çağırır. Sisteminiz ister düz `OK` cevabını, ister yeni imzalı cevap biçimini döndürsün, ikisi de lisanslı sayılır.

> **Adresi elle yazmayın, kopyalayın**
> 
> Bu adres, ziyaretçilere gösterilen çevrilmiş sayfa adresi değil, sabit sistem adresidir. Sayfa adresleri dile göre değişir; bu adres her dilde aynı kalır.

### Özel bir uç bağlayın

1. Sunucunuzun adresini yazın ve isteğin **POST** mu **GET** mi gönderileceğini seçin.
2. Alan adının hangi parametre adıyla gönderileceğini yazın. Boş bırakırsanız `domain` kullanılır.
3. Sunucunuzun beklediği sabit değerler varsa satır başına bir `ad: değer` olacak şekilde ekleyin. İstek başlıklarını da aynı biçimde girin.
4. Hangi cevabın "lisanslı" sayılacağını tanımlayın: beklediğiniz HTTP durum kodu, cevabın JSON mu düz metin mi olduğu, JSON içindeki alanın yolu ve o alanın lisanslı anlamına gelen değeri.

### Test edin

1. Sunucunuzda gerçekten lisanslı olan bir alan adı girin.
2. **Bağlantıyı Sına** butonuna tıklayın. İstek tarayıcıdan değil Pazar Yeri sunucusundan gönderilir, böylece girdiğiniz kimlik bilgileri sayfaya hiç inmez.
3. Test geçerse tanım onaylanır ve bölüm tamamlanmış sayılır. Tanımda yaptığınız her değişiklik bu onayı düşürür; değişiklikten sonra testi tekrarlayın.

### Ürünün içinde lisansı kontrol edin

Yukarıdaki tanım yalnızca **indirmeyi** denetler. Kurulmuş bir kopyayı denetlemez; onun lisansını ürününüzün kendisi kontrol etmelidir.

1. Kendi sunucunuza ürününüzün kodu içinden sorun. `License::remote_check()` isteği gönderir ve cevabı bir gün saklar; böylece ürün her sayfa açılışında sunucunuza gitmez.
2. Kararı kodunuz verir. Bu fonksiyon cevabı yorumlamaz ve imza doğrulamaz. `null` dönmesi sunucunuza ulaşılamadığı anlamına gelir; kopyanın lisanssız olduğu anlamına *gelmez*.
3. Bu kontrolü, şifrelenmek üzere işaretlediğiniz bir dosyaya yazın; böylece ilgili satır ürününüzden silinemez. İşaretleme ve paketleme: [Modül Lisanslama](https://dev.wisecp.com/tr/modul-lisanslama).

## Referans

Özel türde doldurulan alanlar.

- **Adres**: Zorunlu. Yönlendirmeler izlenmediği için son adresi yazın.
- **Yöntem**: POST ya da GET. GET seçilirse alanlar sorgu dizesiyle gönderilir.
- **Alan adı anahtarı**: Alan adının hangi parametre adıyla gönderileceği. Varsayılan `domain`.
- **Ek alanlar**: İsteğe bağlı. Her istekte gönderilen sabit değerler, satır başına bir `ad: değer`.
- **Başlıklar**: İsteğe bağlı istek başlıkları, aynı biçimde. Buraya yazdığınız erişim belirtecinin yetkisini dar tutun.
- **Beklenen durum kodu**: Gelen kod bundan farklıysa cevap reddedilir. Sunucunuz her durumda 200 dönüyorsa buraya 0 yazın.
- **Gövde türü**: JSON ya da düz metin. Düz metin seçilirse cevabın tamamı değerlendirilir ve yol alanı sorulmaz.
- **Yol**: JSON içindeki alanın noktayla ayrılmış yolu, örneğin `data.valid`. JSON seçilip yol boş bırakılırsa cevap reddedilir.
- **Beklenen değer**: Büyük küçük harf gözetmeden karşılaştırılır. Boş bırakırsanız dolu olan her değer kabul edilir; `0`, `false`, `null`, `no` ve boş değer reddedilir.

Test başarısız olduğunda size gösterilen gerekçeler.

| Gerekçe | Anlamı |
| --- | --- |
| Erişilemedi | Sunucunuzdan cevap gelmedi. Tanımlanmış ama erişilemeyen bir kontrol indirmeyi reddeder. |
| Durum kodu | Sunucunuz cevap verdi, ama beklediğinizden farklı bir durum koduyla. |
| Reddedildi | Sunucunuz cevap verdi, ama cevap sizin tanımladığınızla uyuşmadı. |
| Hatalı adres | WISECP türü. Adresteki belirteç başka bir ürüne ait ya da adres belirteç taşımıyor. |
| Eksik istek | WISECP türü. Sunucunuz, beklediği alanların isteğe ulaşmadığını bildiriyor. |

## Örnek

200 dönen ve kararı iç içe bir alanda veren bir JSON ucu.

```json
{"data": {"valid": true, "expires_at": "2027-06-01"}}
```

```ini
Adres               = https://vendor.example/api/licence
Yöntem              = POST
Alan adı anahtarı   = domain
Ek alanlar          = product: sample-pro
Başlıklar           = Authorization: Bearer <belirteciniz>
Beklenen durum kodu = 200
Gövde türü          = JSON
Yol                 = data.valid
Beklenen değer      = true
```

Aynı sunucu düz metinle de cevap verebilir. O zaman gövde türü metin olur, yol boş bırakılır ve beklenen değer kelimenin kendisidir, örneğin `OK`.

Ürünün içinde aynı soru şu şekilde sorulur. Dönen değer sunucunuzun ham cevabıdır; anlamını kodunuz belirler.

```php
$answer = \License::remote_check('https://vendor.example/api/licence', [
    'product' => 'sample-pro',
    'domain'  => \Utility::getDomain(),
]);

// Sunucuya ulaşılamaması bir ret değildir: kendi kesintiniz yüzünden müşteriyi kilitlemeyin.
if ($answer === null) return true;

$body = \Utility::jdecode((string) ($answer['body'] ?? ''), true);

return (int) ($answer['status'] ?? 0) === 200 && ($body['data']['valid'] ?? false) === true;
```

## Tuzaklar

> **Cevapsızlık izin sayılmaz**
> 
> Bir kontrol tanımladıktan sonra sunucunuza ulaşılamazsa indirme reddedilir. Kontrolü tanımlayarak "her indirmede bana sor" demiş olursunuz; cevap gelmemesi olumlu sayılmaz.

> **Cevap olduğu gibi kabul edilir**
> 
> Bu istek müşterinin tarayıcısından değil, Pazar Yeri sunucusundan doğrudan sizin sunucunuza yapılır. Araya girip sahte bir olumlu cevap üretebilecek bir taraf olmadığı için cevabın imzası ayrıca doğrulanmaz.

> **Tanımı düzenlemek onayı düşürür**
> 
> Onay, "şu anda kayıtlı olan tanım cevap veriyor" demektir. Adresi, bir başlığı ya da yolu değiştirdiğinizde bölüm yeniden eksik duruma döner ve testi tekrarlamanız gerekir.

## İlgili Makaleler

- [Ürün Yayınlama](https://dev.wisecp.com/tr/pazar-yerinde-urun-yayinlama)
- [Sürüm Yayınlama](https://dev.wisecp.com/tr/pazar-yeri-surum-yayinlama)
- [Modül Lisanslama](https://dev.wisecp.com/tr/modul-lisanslama)
