Satış Ortaklığı

1.6k görüntülenme Markdown

Bir ortağın programını, kazancını ve ödeme taleplerini yöneten beş uç.

Genel Bakış

Satış ortaklığı, müşterinin kendi bağlantısıyla getirdiği alışverişlerden pay almasıdır. Bu beş uç bir ortağın kendi programını yönetir.

Kazanç iki aşamada ilerler: komisyon önce olgunlaşır, sonra kullanılabilir bakiyeye geçer. Ödemeyi yalnız kullanılabilir tutardan istersiniz.

Ödemeleri operatör elle sonuçlandırır. Talebi siz açarsınız, operatör onaylar ve aynı anda yalnız bir talep açık kalabilir.

Referans

Program Durumunu Okuma

get/api/v1/client/affiliate
Affiliate/GetAffiliate olgunlaşanı taşır

Programı, kazancı ve ödeme durumunu tek çağrıda döndürür.

Dönen alanlar data — 7
enrolledboolHesap programa katılmış mı.
disabledboolOperatör bu ortaklığı kapatmış mı.
programobjectProgramın kuralları. Komisyon oranı, izleme süresi, olgunlaşma süresi ve ödeme alt sınırı.
referralobjectPaylaşılacak referans. Kod ve tam bağlantı taşır.
balanceobjectKazanç bloğu.
availableobjectÖdeme istenebilecek tutar.
clearingobjectOlgunlaşmayı bekleyen tutar.
earnedobjectBugüne kadar kazanılan.
paid_outobjectBugüne kadar ödenen.
statsobjectReferans sayıları. Kaydolan ve komisyon üreten referanslar.
payoutobjectÖdeme durumu.
readyboolKullanılabilir bakiye alt sınırı karşılıyor mu.
pending_requestobjectBekleyen tek talep. Tutar, yöntem, durum ve istek anını taşır.
gatewaysstring[]Operatörün sunduğu ödeme yolları.
saved_destinationsobjectYol başına kayıtlı hedefiniz.
Hatalar 2
affiliate_disabled422Operatör satış ortaklığı programını kapatmış.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/affiliate' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/affiliate', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (! data.enrolled) showJoinButton(data.program);
$ch = curl_init('https://panel.ornek.com/api/v1/client/affiliate');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bu okuma YAZAR: olgunlasan komisyonlari kullanilabilir bakiyeye tasir, salt okuma degildir.
$aff = Kernel::internal('client:Affiliate/GetAffiliate', ['owner_id' => $uid])['data'];
$canAsk = $aff['payout']['ready'] ?? false;

Programa Katılma

post/api/v1/client/affiliate/enroll
Affiliate/EnrollAffiliate hesabın para birimi

Hesabı satış ortaklığı programına kaydeder.

Gövde —
——Gövde gerekmez.
Dönen alanlar 201 — data — 7
dataobjectYeni ortaklık panosu. Okuma ucuyla aynı şekildedir.
Hatalar 2
affiliate_disabled422Operatör satış ortaklığı programını kapatmış.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/affiliate/enroll' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/affiliate/enroll', {
  method: 'POST',
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
shareLink(data.referral.link);
$ch = curl_init('https://panel.ornek.com/api/v1/client/affiliate/enroll');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Ortaklik HESABIN para biriminde acilir ve sonradan degistirilemez; once profili dogrulayin.
$me = Kernel::internal('client:Account/GetMe', ['owner_id' => $uid])['data'];
if ($me['currency'] === $wanted)
    Kernel::internal('client:Affiliate/EnrollAffiliate', ['owner_id' => $uid]);

Komisyonları Listeleme

get/api/v1/client/affiliate/commissions
Affiliate/GetAffiliateCommissions anahtarın sahibi

Kazanılan komisyonları en yeniden başlayarak döndürür.

Sorgu 2
pageintKaçıncı sayfa.
limitintSayfa başına satır. En çok 100.
Dönen alanlar data[] — 10 + meta — 4
commission_idintKaydın numarası.
statusstringHam durum.
statestringMüşteriye gösterilen durum: kullanılabilir, olgunlaşıyor ya da reddedildi.
referralstringYönlendirilen müşterinin görünen adı.
servicestringKomisyonun geldiği hizmet.
service_typestringHizmetin ürün türü.
order_amountobjectYönlendirilen siparişin tutarı.
commissionobjectSize düşen pay. Ortaklık cüzdanınızın para biriminde; siparişinkinden farklı olabilir.
created_atstringKaydın düştüğü an.
clearing_datestringKullanılabilir olacağı gün.
totalintToplam kayıt. Meta altında döner.
pageintBulunulan sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa.
Hatalar 3
affiliate_disabled422Operatör satış ortaklığı programını kapatmış.
not_enrolled422Hesap henüz programa katılmamış.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/client/affiliate/commissions' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/affiliate/commissions', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const soon = data.filter((c) => c.state === 'clearing');
$ch = curl_init('https://panel.ornek.com/api/v1/client/affiliate/commissions');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Olgunlasan komisyon HENUZ odenemez: kullanilabilir bakiyeye ancak olgunlasma gunu gecer.
$rows = Kernel::internal('client:Affiliate/GetAffiliateCommissions', ['owner_id' => $uid])['data'];
$soon = array_filter($rows, fn ($c) => $c['state'] === 'clearing');

Ödeme Talebi Açma

post/api/v1/client/affiliate/withdraw
Affiliate/WithdrawAffiliate aynı anda tek talep

Kullanılabilir kazancın ödenmesini ister.

Gövde 4
amountfloatreqİstenen tutar. Alt sınır ile kullanılabilir bakiye arasında olmalıdır.
gatewaystringreqÖdeme yolu. Operatörün sunduklarından biri olmalıdır.
gateway_infostringHedef bilgisi. Kayıtlı bir hedef varsa atlanabilir.
save_defaultboolBu hedefi sonraki talepler için kaydet.
Dönen alanlar 201 — data — 4
withdrawal_idintTalebin numarası.
amountobjectİstenen tutar.
gatewaystringSeçilen ödeme yolu.
statusstringTalebin durumu. Operatör elle sonuçlandırır.
Hatalar 10
affiliate_disabled422Operatör satış ortaklığı programını kapatmış.
not_enrolled422Hesap henüz programa katılmamış.
affiliate_disabled_account422Operatör bu ortaklığı kapatmış.
withdrawal_pending422Zaten bekleyen bir talep var.
below_minimum422Kullanılabilir bakiye alt sınıra ulaşmıyor.
amount_invalid422Tutar izin verilen aralığın dışında. Alt ve üst sınır yanıtın ayrıntısında gelir.
gateway_invalid422Ödeme yolu operatörünkilerden biri değil.
gateway_info_required422Hedef verilmemiş ve kayıtlı hedef yok.
withdrawal_rejected422Bir kanca talebi reddetti.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/client/affiliate/withdraw' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"amount":40,"gateway":"PayPal","gateway_info":"[email protected]"}'
const res = await fetch('https://panel.ornek.com/api/v1/client/affiliate/withdraw', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ amount, gateway, save_default: true }),
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/affiliate/withdraw');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['amount' => 40, 'gateway' => 'PayPal']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Tutari PANODAN alin: kullanilabilir bakiye okuma sirasinda olgunlasanlarla degisebilir.
$aff = Kernel::internal('client:Affiliate/GetAffiliate', ['owner_id' => $uid])['data'];
$max = $aff['balance']['available']['amount'];

Kernel::internal('client:Affiliate/WithdrawAffiliate',
    ['owner_id' => $uid, 'amount' => $max, 'gateway' => $gw]);

Ödeme Hedefini Kaydetme

put/api/v1/client/affiliate/payment-method
Affiliate/SaveAffiliatePayoutMethod anahtarın sahibi

Bir ödeme yolunun hedef bilgisini kaydeder ya da siler.

Gövde 2
gatewaystringreqÖdeme yolu.
infostringHedef bilgisi. Boş göndermek kaydı siler.
Dönen alanlar data — 1
saved_destinationsobjectGüncel hedef haritası. Yol başına kayıtlı bilgiyi taşır.
Hatalar 4
affiliate_disabled422Operatör satış ortaklığı programını kapatmış.
not_enrolled422Hesap henüz programa katılmamış.
gateway_invalid422Ödeme yolu operatörünkilerden biri değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/client/affiliate/payment-method' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"gateway":"PayPal","info":"[email protected]"}'
const res = await fetch('https://panel.ornek.com/api/v1/client/affiliate/payment-method', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ gateway, info }),
});

const { data } = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/client/affiliate/payment-method');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['gateway' => $gw, 'info' => $info]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Hedef YOL BASINA saklanir: bir yolu silmek digerlerini etkilemez, harita tek tek yonetilir.
Kernel::internal('client:Affiliate/SaveAffiliatePayoutMethod',
    ['owner_id' => $uid, 'gateway' => $gw, 'info' => '']);

Tuzaklar

Pano okuması aslında yazar

Program durumunu okumak, olgunlaşma günü gelmiş komisyonları kullanılabilir bakiyeye taşır. Yani bu uç salt okuma değildir ve iki ardışık çağrı farklı bakiye gösterebilir. Ödeme talebinden hemen önce bir kez çağırmak, isteyebileceğiniz en yüksek tutarı verir.

Olgunlaşan komisyon henüz para değildir

Komisyonu kazandığınız anda alamazsınız: operatörün belirlediği olgunlaşma süresi dolana kadar bekler. Panodaki olgunlaşan tutar toplam kazancın parçasıdır ama ödeme talebinde kullanılamaz. İki rakamı toplayıp ödeme istemek reddedilir.

Aynı anda tek ödeme talebi

Bekleyen bir talep varken ikincisini açamazsınız. Operatör talebi elle sonuçlandırana kadar yeni isteği geri çevirir. Panodaki bekleyen talep alanını okuyup arayüzde ödeme isteme yolunu kapatın, yoksa müşteri anlamadığı bir hatayla karşılaşır.

Ortaklık hesabın para biriminde açılır

Programa katılırken ortaklık kaydınız hesabın o anki para birimini alır ve komisyonlar hep o birimde birikir. Profildeki para birimini sonradan değiştirmek kazancın birimini taşımaz. Katılmadan önce doğru birimde olduğunuzdan emin olun.

Hedef bilgisi yol başına saklanır

Her ödeme yolunun kendi kayıtlı hedefi vardır: bir yolun bilgisini silmek diğerlerini etkilemez. Talep açarken hedef göndermezseniz sistem o yolun kaydına düşer; kayıt da yoksa isteği geri çevirir.

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.