Platform Transfer Talimatının Verilmesi

Mağaza aşağıdaki bilgileri Platform Transfer API’sine gönderir.

  • İstek (REQUEST) yapılacak URL: https://www.paytr.com/odeme/platform/transfer

Token üretiminde kullanılacak veriler

Alan adı / tipi Açıklama Zorunlu Kısıtlar
merchant_id Mağaza No: PayTR tarafından size verilen Mağaza numarası Evet
merchant_oid (string) Mağaza sipariş no: Satış işleminde gönderdiğiniz benzersiz sipariş numaranız Evet En fazla 64 karakter,Alfa numerik
trans_id (string) Satıcıya yapılacak bu ödemenin takibi için benzersiz takip numarası Evet Alfanumerik – En fazla 60 karakter
submerchant_amount (integer) Satıcıya yapılacak ödeme tutarı:Satıcıya bu sipariş için ödenecek tutarın 100 ile çarpılmış hali Evet Örn: 34.56 TL için 3456 gönderilmelidir
total_amount (integer) Toplam ödeme tutarı: Siparişe ait toplam ödeme tutarının 100 ile çarpılmış hali Evet Örn: 94.56 TL için 9456 gönderilmelidir. (94.56 * 100 = 9456)
transfer_name (string) Satıcının banka hesabı için ad soyad/ünvanı Evet Örn: Ragıp Adıgüzel
transfer_iban(int) Satıcının banka hesabı IBAN numarası Evet Örn: TRXX XXXX XXXX XXXX XXXX XXXX XX (26 Karakter)
merchant_salt PayTR Mağaza Paneli > Destek & Kurulum > Entegrasyon Bilgileri sayfası üzerinden ulaşabileceğiniz, mağazanıza özgü değer. Evet
merchant_key PayTR Mağaza Paneli > Destek & Kurulum > Entegrasyon Bilgileri sayfası üzerinden ulaşabileceğiniz, mağazanıza özgü değer. Evet


  • POST REQUEST içeriğinde gönderilecek değerler:
Alan adı / tipi Zorunlu Token Açıklama Kısıtlar
merchant_id(integer) Evet Evet Mağaza no: PayTR tarafından size verilen Mağaza numarası
merchant_oid (string) Evet Evet Mağaza sipariş no: Satış işleminde gönderdiğiniz benzersiz sipariş numaranız En fazla 64 karakter,Alfa numerik
trans_id Satıcıya yapılacak bu ödemenin takibi için benzersiz takip numarası Evet Satıcıya yapılacak bu ödemenin takibi için benzersiz takip numarası Alfanumerik – En fazla 60 karakter
submerchant_amount(integer) Evet Evet Satıcıya yapılacak ödeme tutarı:Satıcıya bu sipariş için ödenecek tutarın 100 ile çarpılmış hali Örn: 34.56 TL için 3456 gönderilmelidir
total_amount(integer) Evet Evet Toplam ödeme tutarı: Siparişe ait toplam ödeme tutarının 100 ile çarpılmış hali Örn: 94.56 TL için 9456 gönderilmelidir
transfer_name (string) Evet Evet Satıcının banka hesabı için ad soyad/ünvanı Örn: Ragıp Adıgüzel
transfer_iban Evet Evet Satıcının banka hesabı IBAN numarası Örn: TRXX XXXX XXXX XXXX XXXX XXXX XX (26 Karakter)
paytr_token (string) Evet Hayır paytr_token: İsteğin sizden geldiğine ve içeriğin değişmediğine emin olmamız için oluşturacağınız değerdir Nasıl hesaplanacağı hakkında lütfen örnek kodları inceleyin


ÖNEMLİ NOTLAR

1- Mağaza, ödemenin yapılmasını istediği tarihte en geç saat 10:00’a kadar Transfer API’si yoluyla isteği göndermelidir. Daha sonra gönderilen istekler bir sonraki gün işleme alınacaktır.

2- Sipariş ödemesi ile aynı gün transfer talebi oluşturamazsınız. Talebi en erken, ödemeyi takip eden ilk gün oluşturmanız gerekmektedir.

TRANSFER ÖRNEKLERİ (Değerler gerçek değildir. Sadece örnektir)

ÖRNEK 1: ÖDEMEDE TEK ALT SATICI OLMASI DURUMU

• Mağaza numarası (merchant_id): 100001

• Sipariş tutarı: 100 TL

• Sipariş numarası (merchant_oid): 123ABCD

• Takip numarası (trans_id): 45ABT34

• Satıcı ile olan komisyon oranınıza göre (Örnek: %8) satıcıya aktarılacak (submerchant_amount): 92 TL

• Ödemesi yapılacak işlem tutarı (total_amount): 100 TL Bu bilgilerle ödeme talimatı verdiğinizde;

• Satıcıya 92 TL ödenir,

• Kalan 8 TL içerisinden PayTR ile olan komisyon oranınız (Örnek: %3) düşülerek kalan tutar (örneğe göre 5 TL) firmanızın hesabına aktarılır. Yapılan kesinti tarafınıza faturalandırılır.


ÖRNEK 2: ÖDEMEDE BİRDEN FAZLA ALT SATICI OLMASI DURUMU

Sipariş ödemesi birden fazla satıcıyı kapsayabilir. Örneğin; Kart hamili alışveriş sepetinde birden fazla satıcıdan ürün / hizmet alıyor olabilir. Siparişin toplam bedelinin 300 TL olduğunu düşünelim. Bu durumda,

• Mağaza numarası (merchant_id): 100001

• Sipariş tutarı: 300 TL

• Sipariş numarası (merchant_oid): 123ABCDE

• Takip numarası (trans_id): 75ZTY39

• Satıcı ile olan komisyon oranınıza göre (Örnek: %8) satıcıya aktarılacak (submerchant_amount): 92 TL

• Ödemesi yapılacak işlem tutarı (total_amount): 100 TL

• Mağaza numarası (merchant_id): 100001

• Sipariş tutarı: 300 TL

• Sipariş numarası (merchant_oid): 123ABCDE

• Takip numarası (trans_id): DF43DFC

• Satıcı ile olan komisyon oranınıza göre (Örnek: %5) satıcıya aktarılacak (submerchant_amount): 47,5 TL

• Ödemesi yapılacak işlem tutarı (total_amount): 50 TL

• Mağaza numarası (merchant_id): 100001

• Sipariş tutarı: 300 TL

• Sipariş numarası (merchant_oid): 123ABCDE

• Takip numarası (trans_id): 98DFVXS

• Satıcı ile olan komisyon oranınıza göre (Örnek: %10) satıcıya aktarılacak (submerchant_amount): 135 TL

• Ödemesi yapılacak işlem tutarı (total_amount): 150 TL şeklinde birden fazla ödeme talimatı verebilirsiniz.


ÖRNEK 3: ÖDEMENİN ALT SATICI İÇİN OLMAMA DURUMU

Yazılımınız üzerinden geçen diğer ödemeler için (örneğin 50 TL üyelik ücreti, hizmet bedeli, vb.) eğer tutarın tamamını firmanız hesabına almak istiyorsanız,

• Mağaza numarası (merchant_id): 100001

• Sipariş tutarı: 50 TL

• Sipariş numarası (merchant_oid): 1881ABCD

• Takip numarası (trans_id): 18ATT81

• Satıcı ile olan komisyon oranınıza göre (Örnek: %0) satıcıya aktarılacak (submerchant_amount): 0 TL

• Ödemesi yapılacak işlem tutarı (total_amount): 50 TL şeklinde talep oluşturduğunuz durumda tutarın tamamı firmanız hesabına transfer edilecektir.


Yapılan isteğe geri dönecek yanıt (RESPONSE) JSON formatındadır. Detaylar için örnek kodları inceleyebilirsiniz.

<?php

    $merchant_id = 'MAGAZA_NO';
    $merchant_key = 'XXXXXXXXXXX';
    $merchant_salt = 'YYYYYYYYYYY';

    // Mağaza sipariş no: Satış işlemi için belirlediğiniz benzersiz sipariş numarası
    $merchant_oid = "";

    // Satıcıya yapılacak bu ödemenin takibi için benzersiz takip numarası
    $trans_id = time();

    // Satıcıya yapılacak ödeme tutarı: Satıcıya bu sipariş için ödenecek tutarın 100 ile çarpılmış hali (Örnek: 50.99 TL için 5099)
    $submerchant_amount = "";

    // Toplam ödeme tutarı: Siparişe ait toplam ödeme tutarının 100 ile çarpılmış hali (Örnek: 50.99 TL için 5099)
    $total_amount = "";

    // Satıcının banka hesabı için ad soyad/ünvanı
    $transfer_name = "";

    // Satıcının banka hesabı IBAN numarası
    $transfer_iban = "";

    // İsteğin sizden geldiğine ve içeriğin değişmediğine emin olmamız için oluşturacağınız değerdir
    $hash_str = $merchant_id . $merchant_oid . $trans_id . $submerchant_amount . $total_amount . $transfer_name . $transfer_iban;
    $token = base64_encode(hash_hmac('sha256',$hash_str.$merchant_salt,$merchant_key,true));

    $post_vals=array(
            'merchant_id'=>$merchant_id,
            'merchant_oid'=>$merchant_oid,
            'trans_id'=>$trans_id,
            'submerchant_amount'=>$submerchant_amount,
            'total_amount'=>$total_amount,
            'transfer_name'=>$transfer_name,
            'transfer_iban'=>$transfer_iban,
            'paytr_token'=>$token
        );

    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.paytr.com/odeme/platform/transfer");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1) ;
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vals);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);

    //XXX: DİKKAT: lokal makinanızda "SSL certificate problem: unable to get local issuer certificate" uyarısı alırsanız eğer
    //aşağıdaki kodu açıp deneyebilirsiniz. ANCAK, güvenlik nedeniyle sunucunuzda (gerçek ortamınızda) bu kodun kapalı kalması çok önemlidir!
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $result = @curl_exec($ch);

    if(curl_errno($ch))
        die("PAYTR platform transfer request connection error. err:".curl_error($ch));

    curl_close($ch);

    $result=json_decode($result,1);

    /*
        Başarılı yanıt örneği:
        {"status":"success", "merchant_amount":"5", "submerchant_amount":"92", "trans_id":"45ABT34", "reference":"12SF45" }

        Başarısız yanıt örneği:
        {"status":"error", "err_no":"010", "err_msg":"toplam transfer tutarı kalan tutardan fazla olamaz"}
    */

    if($result['status']=='success')
    {
        //VT işlemleri vs.
    }
    else
    {
        echo $result['err_no']." - ".$result['err_msg'];
    }
    #########################################################################

?>

Transfer talimatının verilmesi örnek kodları indirmek için tıklayın.