Geri Dönen Ödemeleri Hesaptan Gönder

Bu servis ile transfer talebi yapılmış ancak alıcı hesap hatası nedeniyle geri dönen ödemeler için tekrar ödeme isteği gönderebilirsiniz. Geri dönen ödemeler mağazanıza ait bir alt hesaba bakiye olarak işlenir. Geri dönen bu ödemelerin listesine “Geri Dönen Ödemeler – Listele API” servisi ile ulaşabilirsiniz.

1- Hesaptan ödeme transferi gönderebilmek için tabloda belirtilen bilgileri POST ile ilgili URL’e gönderin: https://www.paytr.com/odeme/hesaptan-gonder

Token üretiminde kullanılacak veriler:

Alan adı / tipi Açıklama Zorunlu Kısıtlar
merchant_id(integer) Mağaza no: PayTR tarafından size verilen Mağaza numarası Evet -
trans_id(string) Transfer ID: Transfer işlemi için belirlediğiniz benzersiz işlem numarası. Evet En fazla 64 karakter, Alfa numerik
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 Açıklama Zorunlu Kısıtlar
merchant_id(integer) Mağaza no: PayTR tarafından size verilen Mağaza numarası Evet -
trans_id(string) Transfer ID: Transfer işlemi için belirlediğiniz benzersiz işlem numarası. Evet En fazla 64 karakter, Alfa numerik
trans_info(JSON) Transfer Bilgisi: Transfer tutarı, alıcı ismi ve IBAN değerlerini içeren JSON formatında içerik. (Nasıl tanımlanacağı için örnek koda bakın) Evet -
paytr_token(string) 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 (Hesaplama için örnek koda bakın) Evet -


2- Yaptığınız bu isteğe cevap JSON formatında döner.

a. Yapılan istek geçerli ise status değeri success ve trans_id alanında gönderdiğiniz işlem numarası döner.
b. Eğer sorguda bir hatanız varsa status değeri error döner. Bu durumda hata detayı için err_msg içeriğini kontrol etmelisiniz.

3- Success yanıtı almanız ile birlikte hesaptan gönderme talebiniz PayTR sistemi tarafından başarılı olarak alınmış olur. PayTR sistemi talebinizi ortalama 5 dakika içerisinde işleme alacak, gönderdiğiniz trans_info içeriğini kontrol ederek transferleri gerçekleştirecektir. Kontrol sırasında hatalı bilgi tespiti halinde ilgili işlem başarısız olarak işaretlenir. Oluşan sonuç JSON formatında PayTR Mağaza Paneli > Ayarlar > Platform Transfer Sonucu Bildirim URL olarak tanımladığınız adrese POST edilerek bildirilir.

<?php

    ########################### İŞLEM DÖKÜMÜ ALMAK  İÇİN ÖRNEK KODLAR ##########################
    #                                                                                          #
    ################################ DÜZENLEMESİ ZORUNLU ALANLAR ###############################
    #
    ## API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz.

    $merchant_id    = 'XXXXXX';
    $merchant_key   = 'XXXXXXXXYYYYYYYY';
    $merchant_salt  = 'XXXXXXXXYYYYYYYY';

    ## Gerekli Bilgiler
    #
    $trans_id="PHG".time();
    $trans_info=array();
    //amount 100 ile çarpılarak gönderilir!!
    $trans_info[]=array("amount"=>"1283",
        "receiver"=>"XYZ LTD ŞTİ",
        "iban"=>"TRXXXXXXXXXXXXXXXXXXXXX");
    //...$trans_info[]=...
    #
    ############################################################################################

    ################ Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. ################

    $paytr_token=base64_encode(hash_hmac('sha256',$merchant_id.$trans_id.$merchant_salt, $merchant_key, true));

    $post_vals=array('trans_info'=>json_encode($trans_info),
        'trans_id'=>$trans_id,
        'paytr_token'=>$paytr_token,
        'merchant_id'=>$merchant_id
    );
    #
    ############################################################################################

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.paytr.com/odeme/hesaptan-gonder");
    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, 90);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 90);

    //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))
    {
        echo curl_error($ch);
        curl_close($ch);
        exit;
    }

    curl_close($ch);

    $result_raw=$result;
    $result=json_decode($result,1);

    if($result['status']=='success')
    {
        //status ve trans_id içerir
        print_r($result_raw);
    }
    else//status=>error
    {
        //status ve err_no - err_msg içerir
        print_r($result_raw);
    }

Geri dönen ödemeler örnek kodları indirmek için tıklayın.