Satış Ortakları

1.7k görüntülenme Markdown

Programdaki satış ortaklarını gören, arayan, açıp kapatan ve silen dört uç.

Genel Bakış

Satış ortaklığı, bir müşterinin kendi bağlantısıyla getirdiği müşteriler üzerinden komisyon kazandığı programdır. Bu makale programdaki kişileri yönetir: kimler var, hangisi açık, hangisi silinecek.

Her kaydın iki numarası vardır. id satış ortağı kaydına, owner_id ise arkasındaki müşteriye aittir. Atama uçları müşteri numarasıyla konuşur; ikisini karıştırmak sessiz bir yanlış atamaya yol açar.

Arama ucu ayrı durur çünkü atama ekranlarını besler: numarayı bilmeyen bir arayüz önce burada ad yazar, sonra dönen numarayı atamaya verir.

Referans

Satış Ortaklarını Listeleme

get/api/v1/admin/affiliates
Affiliates/GetAffiliates admin

Programdaki satış ortaklarını kazanç ve yönlendirme özetleriyle döndürür.

Sorgu 4
pageintKaçıncı sayfa.
limitintSayfa başına kayıt. En çok 100.
searchstringAd, şirket, e-posta, ortak numarası ve müşteri numarasında arar.
statusstringDurum süzgeci: active ya da inactive.
Dönen alanlar data[] — 13 + meta — 4
idintSatış ortağı kaydının numarası.
owner_idintOrtağın arkasındaki müşteri numarası. Atamalarda kullanılan numara budur.
user_idintAynı müşteri numarası. Sorgu birleştirmesinden gelen ikinci ad.
full_namestringMüşterinin adı soyadı.
company_namestringŞirket adı.
emailstringE-posta adresi.
disabledintKapalı mı. 0 açık, 1 kapalı demektir.
balancestringÖdenmeyi bekleyen kazanç. Dört ondalıklı metin.
currencyintKazancın para birimi numarası.
referralsintYönlendirdiği müşteri sayısı.
hitsintBağlantısına gelen tıklama sayısı.
total_paidstringBugüne kadar ödenen tutar. Yalnız tamamlanmış talepleri sayar.
datestringPrograma katıldığı an.
totalintToplam ortak sayısı. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa. Son sayfada sıfır.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/affiliates?status=active&limit=50' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/affiliates?status=active', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data } = await res.json();
const owing = data.filter((a) => Number(a.balance) > 0);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/affiliates?status=active');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// id ORTAGIN numarasi, owner_id ARKASINDAKI musteriye ait; atamalar owner_id ile konusur.
$rows = Api::Affiliates()->GetAffiliates([], ['status' => 'active'])['data'];
$byClient = array_column($rows, 'balance', 'owner_id');

Ortak, Müşteri ve Hizmet Arama

get/api/v1/admin/affiliates/select
Affiliates/SelectForAffiliate admin en çok 10 sonuç

Atama ekranlarını besleyen arama; numara yerine ad yazmanızı sağlar.

Sorgu 2
typestringNe aranacağı: affiliate, client ya da service. Öntanımlı olarak ortak aranır.
qstringArama metni. search adını da kabul eder.
Dönen alanlar data — 2
typestringAranan tür. Gönderdiğinizin aynısı.
resultsobject[]Bulunanlar.
idintBulunan kaydın numarası.
textstringEkranda gösterilecek etiket. Hizmette numara ve ad, kişide ad ile şirket birleştirilir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/affiliates/select?type=client&q=jane' \
  -H "Authorization: Bearer $API_KEY"
const url = new URL('https://panel.ornek.com/api/v1/admin/affiliates/select');
url.searchParams.set('type', 'client');
url.searchParams.set('q', term);

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$qs = http_build_query(['type' => 'client', 'q' => $term]);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/affiliates/select?' . $qs);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// En cok 10 sonuc doner: bu bir arama kutusudur, liste degil.
$hits = Api::Affiliates()->SelectForAffiliate([], ['type' => 'client', 'q' => $term])['data'];
$exact = count($hits['results']) === 1 ? $hits['results'][0]['id'] : 0;

Ortağı Açma ve Kapatma

put/api/v1/admin/affiliates/{aid}/status
Affiliates/SetAffiliateStatus admin

Satış ortağını etkinleştirir ya da devre dışı bırakır.

Gövde 1
enabledboolreqOrtak açık mı. Kayıttaki ters adlı alana çevrilir.
Dönen alanlar data — 2
idintSatış ortağının numarası.
enabledboolGüncel durum.
Hatalar 2
not_found404Satış ortağı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/affiliates/7/status' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"enabled":false}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/affiliates/${aid}/status`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ enabled: false }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/affiliates/' . $aid . '/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['enabled' => false]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kapatmak kazanci SILMEZ: bakiye durur, odeme talebi acilabilir.
Api::Affiliates()->SetAffiliateStatus(['aid' => $aid, 'enabled' => false]);

Ortağı Silme

delete/api/v1/admin/affiliates/{aid}
Affiliates/DeleteAffiliate admin geri alınamaz

Satış ortağını ve ona bağlı bütün kayıtları siler.

Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
idintSilinen ortağın numarası.
Hatalar 2
not_found404Satış ortağı bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/affiliates/7' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/affiliates/${aid}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/affiliates/' . $aid);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Panel bu adimda yonetici sifresi ister; API'de kapsam yeter. Once kapatmayi dusunun.
Api::Affiliates()->SetAffiliateStatus(['aid' => $aid, 'enabled' => false]);
// Api::Affiliates()->DeleteAffiliate(['aid' => $aid]);   // kazanc gecmisi de gider

Tuzaklar

İki numara: ortak numarası ile müşteri numarası

Listede id satış ortağı kaydının, owner_id arkasındaki müşterinin numarasıdır. Müşteri kaydında tutulan bağlantı alanı da müşteri numarasını saklar, ortak numarasını değil. Atama ve durum uçları farklı numara beklediği için ikisini ayırt edin.

Kapalılık iki ayrı kelimeyle konuşulur

Liste disabled alanını verir ve orada 0 açık demektir. Durum ucu ise enabled alır ve orada true açık demektir. İkisi aynı şeyin ters adlarıdır; birini diğerine kopyalamak durumu tersine çevirir.

Silme kazanç geçmişini de götürür

Ortağı silmek komisyon işlemlerini, ödeme taleplerini, tıklamaları, geçmişi ve yönlendirme kayıtlarını da siler; bağlı müşterilerin bağlantısı sıfırlanır. Panel bu adımda yönetici parolası ister, API ise kapsamla yetinir. Bir ortağı ayırmak istiyorsanız silmek yerine kapatın.

Arama ucu en çok on sonuç verir

Arama ucu bir liste değil, arama kutusudur: kaç kayıt eşleşirse eşleşsin en çok on sonuç döner ve sayfalama yoktur. Toplu bir işi bu uca dayandırırsanız onuncudan sonrasını sessizce kaçırırsınız. Tam liste için listeleme ucunu kullanın.

Ödenen tutar yalnız tamamlanmış talepleri sayar

total_paid alanı tamamlanmış ödeme taleplerinin toplamıdır. Bekleyen ya da işlemdeki bir talep bu sayıya girmez, ama balance alanından da düşmez. İki rakamı toplayarak "ortağa ne borçluyuz" sorusunu yanıtlamayın.

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.