Satış Ortaklığı

1.7k görüntülenme Markdown

Satış ortaklığını açan, komisyonu belirleyen, kazancın ödenmesini yürüten ve şüpheli referansları tarayan dokuz uç.

Genel Bakış

Satış ortaklığında müşteri, getirdiği her satıştan komisyon kazanır. Bu uçlar ortaklığı açar, komisyon kuralını belirler, kazancın ödenmesini yürütür ve şüpheli referansları tarar.

Komisyonun iki periyodu vardır: lifetime müşterinin her yenilemesinde öder, onetime yalnız ilk satışta. Seçim ortak başınadır.

Referans

Ortaklık Durumunu Getirme

get/api/v1/admin/clients/{id}/affiliate
Clients/GetClientAffiliate admin

Müşterinin satış ortaklığı durumunu, komisyon ayarlarını ve bakiyesini döndürür.

Dönen alanlar data — 8
is_affiliateboolMüşteri satış ortağı mı.
activated_atdatetimeOrtaklığın açıldığı tarih.
disabledboolOrtaklık devre dışı mı.
disabled_reasonstringDevre dışı bırakma nedeni.
commission_valuefloatKomisyon oranı, yüzde olarak. 0 ile 100 arasında.
commission_periodstringlifetime her yenilemede komisyon verir, onetime yalnız ilk satışta. Boş değer varsayılanı kullanır.
balancefloatOrtağın kazanç bakiyesi.
currency_idintBakiyenin para birimi kimliği.
Hatalar 2
not_found404Müşteri bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetClientAffiliate(['id' => 42]);

if (!($response['data']['is_affiliate'] ?? false)) {
    return;
}

Ortaklığı Açma

post/api/v1/admin/clients/{id}/affiliate
Clients/ActivateClientAffiliate admin

Müşteriyi satış ortağı yapar. Zaten ortak olan bir müşteride hata döner.

Gövde 3
commission_valuenumberKomisyon oranı. 0-100 aralığına sıkıştırılır; dışarıdaki değer reddedilmez, kırpılır.
commission_periodstringlifetime ya da onetime. Başka bir değer boşa çevrilir.
currency_idintBakiye para birimi. Liste: reference/currencies.
Dönen alanlar data
dataobjectAçılan ortaklık, 201 ile döner. Durum ucuyla aynı şekildedir.
Hatalar 4
not_found404Müşteri bulunamadı.
already_affiliate422Müşteri zaten satış ortağı.
activate_failed500Ortaklık açılamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"commission_value":10,"commission_period":"lifetime","currency_id":1}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    commission_value: 10,
    commission_period: 'lifetime',
    currency_id: 1,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'commission_value'  => 10,
        'commission_period' => 'lifetime',
        'currency_id'       => 1,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->ActivateClientAffiliate([
    'id'                => 42,
    'commission_value'  => 10,
    'commission_period' => 'lifetime',
    'currency_id'       => 1,
]);

Ortaklık Ayarlarını Güncelleme

patch/api/v1/admin/clients/{id}/affiliate
Clients/UpdateClientAffiliate admin engelleme burada

Komisyonu, bakiyeyi ve ortağın durumunu değiştirir. Engelleme de bu uçtan yapılır.

Gövde 7
commission_valuenumberKomisyon oranı; 0-100 aralığına sıkıştırılır.
commission_periodstringlifetime ya da onetime.
currency_idintBakiye para birimi.
balancenumberOrtağın bakiyesi. Negatif gönderilirse sıfıra çekilir.
disabledboolOrtaklığı devre dışı bırakır ya da geri açar.
disabled_reasonstringDevre dışı nedeni. Yalnız disabled açıkken yazılır.
block_partnerboolOrtağı engeller ve bekleyen ödeme taleplerini iptal eder.
Dönen alanlar data
dataobjectGüncel ortaklık. Durum ucuyla aynı şekildedir.
Hatalar 3
not_found404Müşteri bulunamadı.
not_affiliate422Müşteri satış ortağı değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"commission_value":15}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ commission_value: 15 }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['commission_value' => 15]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Engelleme bekleyen odeme taleplerini de iptal eder.
$response = Api::Clients()->UpdateClientAffiliate([
    'id'            => 42,
    'block_partner' => true,
    'block_reason'  => 'Sahte referans',
]);

Sahtecilik Analizi

post/api/v1/admin/clients/{id}/affiliate/fraud-check
Clients/CheckClientAffiliateFraud admin

Ortağın giriş yaptığı IP adreslerini, yönlendirdiği müşterilerin giriş IP'leriyle karşılaştırır ve aynı IP'yi paylaşan her yönlendirilen müşteriyi listeler. Personelin "müşteri olarak giriş" oturumları yok sayılır. Önce state alanını okuyun: no_referrals ve no_logins karşılaştırılacak veri olmadığı anlamına gelir, temiz sonuç değildir.

Gövde —
——Gövde gerekmez. Tarama her zaman ortağın tüm referans geçmişini kapsar ve daraltılamaz.
Dönen alanlar data — 7
statestringmatch · clean · no_referrals · no_logins. Son ikisi ortağın yönlendirdiği müşteri ya da karşılaştırılacak kendi girişi olmadığını söyler.
has_issuesboolYalnız state match iken true.
referral_countintOrtağın yönlendirdiği müşteri sayısı.
matching_ipsarrayHer ortak IP ve yönlendirilen müşteri için bir satır; state match değilse boş.
matching_ips[].ipstringHem ortağın hem yönlendirilen müşterinin giriş yaptığı IP.
matching_ips[].referral_user_idintYönlendirilen müşterinin ID'si.
matching_ips[].referral_namestringYönlendirilen müşterinin adı (ad boşsa şirket adı).
Hatalar 3
not_found404Müşteri bulunamadı.
not_affiliate422Müşteri satış ortağı değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate/fraud-check' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/fraud-check', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/fraud-check');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->CheckClientAffiliateFraud(['id' => 42]);

// Tarama yalnizca rapor uretir; engellemeyi siz karar verip yaparsiniz.
if (($response['data']['state'] ?? '') === 'match') {
    $sharedIps = $response['data']['matching_ips'];
}

Ödeme Taleplerini Listeleme

get/api/v1/admin/clients/{id}/affiliate/withdrawals
Clients/GetClientAffiliateWithdrawals admin

Ortağın kazancını çekmek için açtığı talepleri döndürür.

Dönen alanlar data[] — 6
idintÖdeme talebinin kimliği.
amountfloatTalep tutarı.
gatewaystringÖdemenin yapılacağı yöntem.
statusstringawaiting, process, completed, rejected ya da cancelled.
status_msgstringDuruma dair not.
created_atdatetimeTalep tarihi.
Hatalar 3
not_found404Müşteri bulunamadı.
not_affiliate422Müşteri satış ortağı değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetClientAffiliateWithdrawals(['id' => 42]);

Ödeme Talebini Güncelleme

patch/api/v1/admin/clients/{id}/affiliate/withdrawals/{wid}
Clients/UpdateClientAffiliateWithdrawal admin makbuz eklenebilir

Talebin durumunu değiştirir. Ödemeyi yaptıysanız makbuzu da bu istekte iletirsiniz.

Gövde 4
statusstringzorunluYeni durum. Eski adlar kabul edilir: pending → awaiting, inprocess → process, paid → completed.
status_msgstringOrtağa iletilecek mesaj.
receiptstring | objectÖdeme makbuzu. Yalnız completed'a geçerken kabul edilir. base64 data-URI, {filename, content} ya da {url}. İzinli: görsel ve PDF.
remove_receiptboolVar olan makbuzu kaldırır.
Dönen alanlar data
dataobjectGüncel ödeme talebi. Talep listesindeki öğeyle aynı şekildedir.
Hatalar 4
not_found404Müşteri ya da ödeme talebi bulunamadı.
status_required422status boş.
file_invalid422Makbuz çözümlenemedi ya da yüklenemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals/5' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"completed","receipt":{"url":"https://ornek.com/makbuz.pdf"}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals/5', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    status: 'completed',
    receipt: { url: 'https://ornek.com/makbuz.pdf' },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/affiliate/withdrawals/5');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'status'  => 'completed',
        'receipt' => ['url' => 'https://ornek.com/makbuz.pdf'],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->UpdateClientAffiliateWithdrawal([
    'id'      => 42,
    'wid'     => 5,
    'status'  => 'completed',
    'receipt' => ['url' => 'https://ornek.com/makbuz.pdf'],
]);

Hazır Metinleri Listeleme

get/api/v1/admin/clients/affiliate/templates
Clients/GetAffiliateTemplates admin

Ortaklık işlerinde kullanılan hazır metinleri döndürür: kapatma nedenleri, ödeme notları, engelleme nedenleri.

Dönen alanlar data — 3
deactivate_reasonsstring[]Ortaklığı kapatma nedenleri.
withdrawal_notesstring[]Ödeme talebine düşülen notlar.
block_reasonsstring[]Engelleme nedenleri.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/clients/affiliate/templates' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->GetAffiliateTemplates();

Hazır Metin Ekleme

post/api/v1/admin/clients/affiliate/templates
Clients/AddAffiliateTemplate admin

Seçtiğiniz türe yeni bir metin ekler.

Gövde 2
typestringzorunluMetnin türü: deactivate_reasons, withdrawal_notes ya da block_reasons.
valuestringzorunluEklenecek metin.
Dönen alanlar data — 2
typestringMetnin eklendiği tür.
itemsstring[]O türün güncel listesi.
Hatalar 3
type_invalid422Tür üç değerden biri değil.
value_required422value boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/affiliate/templates' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"block_reasons","value":"Sahte referans tespit edildi"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ type: 'block_reasons', value: 'Sahte referans tespit edildi' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type'  => 'block_reasons',
        'value' => 'Sahte referans tespit edildi',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->AddAffiliateTemplate([
    'type'  => 'block_reasons',
    'value' => 'Sahte referans tespit edildi',
]);

Hazır Metin Silme

delete/api/v1/admin/clients/affiliate/templates
Clients/DeleteAffiliateTemplate admin metinle silinir

Bir metni listeden çıkarır. Kimlik değil, metnin kendisi gönderilir.

Gövde 2
typestringzorunluMetnin türü: deactivate_reasons, withdrawal_notes ya da block_reasons.
valuestringzorunluSilinecek metin. Listedekiyle birebir aynı olmalı.
Dönen alanlar data — 2
typestringMetnin çıkarıldığı tür.
itemsstring[]O türün güncel listesi.
Hatalar 3
type_invalid422Tür üç değerden biri değil.
value_required422value boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/clients/affiliate/templates' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"block_reasons","value":"Sahte referans tespit edildi"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates', {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ type: 'block_reasons', value: 'Sahte referans tespit edildi' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/affiliate/templates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type'  => 'block_reasons',
        'value' => 'Sahte referans tespit edildi',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->DeleteAffiliateTemplate([
    'type'  => 'block_reasons',
    'value' => 'Sahte referans tespit edildi',
]);

Tuzaklar

Değerler reddedilmez, kırpılır

Komisyon oranı 0-100 aralığına sıkıştırılır, negatif bakiye sıfıra çekilir ve tanınmayan bir komisyon periyodu boşa döner. Hiçbiri hata vermez; yanlış bir değer sessizce düzeltilmiş olarak kaydedilir. Yazdıktan sonra okuyup doğrulayın.

Engellemek bekleyen ödemeleri iptal eder

block_partner yalnız ortağı durdurmaz; bekleyen ödeme taleplerini de iptal eder. Ödemesi yapılmak üzere olan bir ortağı engellemeden önce talep listesine bakın.

Sahtecilik taraması karar vermez

Tarama yalnız rapor üretir: kendi kendine referans sayısı ve aynı IP'den gelen kayıtlar. Ortağı engellemek ayrı bir istektir ve kararı siz verirsiniz.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.