# Satış Ortaklığı

https://dev.wisecp.com/tr/satis-ortakligi-kazanci

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.

balanceobject balanceKazanç 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 payoutÖ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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/affiliate' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
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);
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/client/affiliate/enroll' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
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);
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/client/affiliate/commissions' \
  -H "Authorization: Bearer $CLIENT_KEY"
```

```javascript
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');
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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":"partner@example.com"}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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 JavaScript PHP (HTTP) PHP (Dahili)

```bash
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":"partner@example.com"}'
```

```javascript
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();
```

```php
$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);
```

```php
// 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.

## İlgili Makaleler

- [Hesap Bakiyesi](https://dev.wisecp.com/tr/hesap-bakiyesi-api)
- [Satış Ortakları](https://dev.wisecp.com/tr/satis-ortaklari)
