Ödeme İsteği Gönderme (Tekrarlı/Tek Sefer)
- Ödeme isteği gönderme işlemi için gerekli parametreleri doldurup Payfula istek atılınca, Payfull ilgili müşterilere E-mail veya Sms yoluyla belirlediğiniz kriterlerin hazır olduğu ödeme sayfasına ait linki gönderir.
- Oluşturulan linkler özel linklerdir, belirledğiniz kriterler ile oluşturulmuş bir ödeme sayfasına yönlendirme yapar. Tek yapılması gereken kart bilgilerinin girilmesi ve ödeme talimatı verilmesidir.
- İki çeşit ödeme isteği bulunmaktadır. Tekrarlı ödemeler demek belirlenen tarihlerde ilgili kişinin kartından aynı ücret otomatik olarak tahsil edilir. Bir diğer yöntemi ise tek seferlik ödemelerdir.
- Toplam tutar değeri istek oluşturulurkende üretilebilir yada Payful hesabından ödeme kalemi oluşturularakta üretilebilir.
- Tekrarlı ödeme isteği günlük, aylık yada yıllık olarak seçilebilir.
- Tekrar sayısı ve başlam tarihi seçilebilir.
Gerekli parametreler
merchant: ZORUNLU
Payfull hesabınız içerisinde(Ayarlar->Apı Hesapları) tanımladığınız Apı hesabına ait "Üye İşyeri Adı" alanına girilen değerdir.
type: ZORUNLU
İşlem tipi Set olmalıdır.
set_param: ZORUNLU
Parametre değeri Request olmaldır.
language: ZORUNLU
Satış işlemi sonrası gelecek olan cevabın dil seçeneğini belirlemekte kullanılır. İki seçenek vardır. en / tr
client_ip: ZORUNLU
İşlemi yapacak olan kişiye ait IP bilgisi gönderilmelidir.
title: ZORUNLU
Her satış işlemine ait belirlenmesi gereken işlem başlığıdır. Örnek olarak: Çay Bardağı 6'lı Set
recipient_first_name: OPSİYONEL
Müşterilerin İsim
recipient_last_name: OPSİYONEL
Müşterilerin Soyadı
recipient_email: ZORUNLU
Müşterilerin e-mail adresleri
recipient_phone: OPSİYONEL
üşterilerin telefon numarası, eğer belirtilmez ise ülke kodu Türkiye için 0090 olmalıdır
recipient_code: OPSİYONEL
Ödeme talebinde kayıtlı bayi kodu ile gönderim sağlanır ise, email adresi ve telefon bilgisi otomatik olarak algılanır. Bu parametrelerin gönderilmesine gerek kalmaz.
start_date: ZORUNLU
Ödem işleminin başlangıç tarihi
end_date: ZORUNLU
Bitiş tarihi
changeable_quantity: ZORUNLU
Müşterinizin miktarı değiştirebilmesini sağlayan parametredir 0 / 1 olabilir. 1 olması müşterinizin miktarı değiştirebileceği anlamına gelir.
predefined_payment: ZORUNLU
Toplam değeri için payful içeriisnde oluşturulan bir ödeme kalemi kullanılabilmesi için gerekli parametredir.
payment_item: OPSİYONEL
Eğer predefined_payment = 1 olarak ayarlanmış ise ZORUNLU hangi ödeme kaleminin kullanılacağını belirlemek için kullanılır.
payment_free_amount: OPSİYONEL
Eğer predefined_payment = 0 olarak ayarlanmış ise ZORUNLU hale helir. Alınacak ücreti belirlememiz gerekir.
payment_free_title: OPSİYONEL
Eğer predefined_payment = 0 olarak ayarlanmış ise ZORUNLU hale gelir. Ödemenin ismini belirlemek gerekir.
quantity: ZORUNLU
Ürün miktarı
currency: ZORUNLU
Desteklenen para birimleri şunlardır. TRY/USD/EUR/GBP
kdv: ZORUNLU
KDV değerinin olabileceği değerler. 0% / 1% / 8% / 18%
via_email_sms: ZORUNLU
Ödeme isteğinin yollları belirlenir. 3 seçenek vardır. 0:email / 1:sms / 2:email+sms
email_text: OPSİYONEL
Eğer via_email_sms = 0 or 2 değerlerinden biri ise ZORUNLU olur. SMS içeriği belirlenmelidir.
Bazı taglar önemli bilgileri göndermenizde yardımcı olacaktır.

[email or name-surname]: Kayıtlı değilse e-mail bilgisi yada isim soyisim bilgisi
[PRDATE]: Oluşturulma tarihi
[PRNAME]: Gönderilme tarihi
[TOTAL]: istenen toplam ücret
[LASTPAYMENTDATE]: Bitiş tarihi
sms_text: OPSİYONEL
eğer via_email_sms = 1 or 2 değerlerinden biri ise ZORUNLU olur. E-mail içeriği belirlenmelidir.
Bazı taglar önemli bilgileri göndermenize yardımcı olur.

[email or name-surname]: Kayıtlı değilse e-mail bilgisi yada isim soyisim bilgisi
[PRDATE]: Oluşturulma tarihi
[PRNAME]: Gönderilme tarihi
[TOTAL]: istenen toplam ücret
[LASTPAYMENTDATE]: Bitiş tarihi
[LINK]: Ödeme Linki

request_type: ZORUNLU
İstek tipi tekrarlı yada tek seferlik olabilir. normal or recurring
request_action_type: OPSİYONEL
Bu parametre iki değer alabilir. manual or auto, Eğer request_type = recurring olarak seçilirse ZORUNLU hale gelir.
request_period: OPSİYONEL
Tekrarlı Ödeme periodları seçilebilir. 1:day / 2:week / 3:month / 4:year, Eğer request_type = recurring olarak seçildiyse ZORUNLU hale gelir.
repetition_count: OPSİYONEL
Tekrarlı ödemeler için tekrar sayısı seçilebilir, Eğer request_type = recurring olarak seçildiyse ZORUNLU hale gelir.
extra_field_: OPSİYONEL
To provide extra data with payment request, you can add more fields to the request, those fields should start with prefix extra_field_, then the field machine name come after, Example: extra_field_invoiceid, where the field invoiceid is created from UI side before.
extra_field_: OPSİYONEL
Ekstra alan bilgisi ödeme talebinde ek bilgi gsağlamak amacı ile kullanılır. Bu parametre panelde oluşturulan ekstra alan entegrasyon bilgisi ile kullanılır. Örn : extra_field_faturaid, faturaid ekstra alanı Payfull panelinde oluşturulmuş olmaldır.
installments_active: OPSİYONEL
0 : Taksitleri gizle / 1 : Taksitleri göster
hash: ZORUNLU
İşlemin hangi api kullanıcısına ait olduğunu anlamamız ve güvenlik için kullanılan Güvenlik kodu parametresidir. Nasıl oluşturulacağı aşağıda anlatılmış olup sayfanın sağ tarafındaki örnekte php örneği olarak gösterilmiştir.

Güvenlik kodu (hash) değerini oluşturmak için aşağıdaki işlemler sırası ile gerçekleştirilmelidir;

- Bütün parametrelerin oluşturulduğundan emin olun. Her senaryo için Güvenlik kodu (hash) oluşturma işlemi son işlem ve son parametreniz olmalıdır.
- Parametreleri alfabetik olarak A'dan Z'ye sıralayınız.
- Bir string değeri($siraliParametreler) oluşturup teker teker her parametrenizin uzunluğunu ve kendisini yanyana ekleyiniz.
- sha256 hash kodu üretici fonksiyon ile parametrelerinizden oluşturduğunuz ($siraliParametreler) string değerinizi ve Payfull hesabınızda belirlenen "Üye İşyeri Şifresi" ni kullanarak bir Güvenlik kodu üretiniz.
- Parametreleriniz içerisine parametre ismi "hash", değeri ise şimdi oluştuduğunuz Güvenlik kodunu yerleştirerek Api isteğinizi Endpoint Url'inize gönderiniz.

> İstek Örneği

merchant : api_merch
type : Set
set_param: Request
language: tr
client_ip: 192.168.1.1
title: payment title here
recipient_first_name: Muhammed
recipient_last_name: Salih
recipient_email: MuhammedSalihTestEmail@payfull.com
recipient_phone: 00905..........
start_date: 01-09-2016
end_date: 01-01-2030'
changeable_quantity: 0
predefined_payment: 0
payment_item: 0
payment_free_amount: 12.25
payment_free_title: Item Title here
quantity: 1
currency: TRY
kdv: 1
via_email_sms: 0
email_text: email text come here
sms_text: email text come here
request_type: recurring
request_action_type: auto
request_period: 1
repetition_count: 2
hash: 14339MjuG01015018
installments_active: 0

> Cevap Örneği

{
“status”: 1,
“ErrorMSG”: "",
“ErrorCode”: "00",
{
“status”: "1",
“ErrorMSG”: "",
“ErrorCode”: "00",
“data”: "{"approved":true, paymentRequestHash:token_value, "paymentRequestLink":"https://yourDomain.payfull.com/tahsilat-sayfasi/token_value"}",
}

>  Php Örneği

 $api_url =
'https://yourSubDomain.payfull.com/integration/api/v1';    

   $merchantPassword = 'your merchant password';  

                        $params = array(                  
                     "merchant"        => 'your merchant name',
                       "type"            => 'Set',          
                        "set_param"            => 'TrustedClient',
                        "language"            => 'tr',

                       "client_ip"        => '192.168.1.1',
                     "client_firstname"       => 'Muhammed'
                     "client_lastname"       => 'Sahin'
                     "recipient_email"       => 'MuhammedSalihTestEmail@payfull.com'
                     "recipient_phone"       => '009053.........'
                     "title"       => 'payment title here'
                      "start_date"            => '01-09-2016',
                      "end_date"              => '01-01-2030',
                      "changeable_quantity"   => '0',
                      "predefined_payment"    => '0',

                      "payment_item"          => '1',
                      "payment_free_amount"   => '1',
                      "payment_free_title"    => 'Item Title here',

                      "quantity"              => '1',
                      "currency"              => 'TRY',
                      "kdv"                   => '1',
                      "via_email_sms"         => '0',
                      "email_text"            => 'email text come here',
                      "sms_text"              => 'sms text come here',

                      "request_type"          => 'recurring',
                      "request_action_type"   => 'auto',
                      "request_period"        => '1',
                      "repetition_count"      => '2',
     );
                     // Hash kodu üretme yöntemi.
                        ksort($params);
                     $hashString = "";
                     foreach ($params as $key=>$val) {                             
                      $l = mb_strlen($val);  
                      if($l) $hashString .= $l . $val;
                       }


                       $params["hash"] = hash_hmac("sha256", $hashString, $merchantPassword);
// Hash kodu üretilip parametreler arasına "hash" index'i ile eklendi.

//curl sürecini başlatıyoruz.
                       $ch = curl_init();
                       curl_setopt($ch, CURLOPT_URL, $api_url);            
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                               curl_setopt($ch, CURLOPT_TIMEOUT, 60);      
                        curl_setopt($ch, CURLOPT_POST, 1);  
                        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));

//curl için gerekli olan URL değeri ve parametreler hazırlandı ve curl_exec() fonksiyonu ile işlemi başlatıp cevabı $response değerine atıyoruz.

                         $response = curl_exec($ch);                    

           $curlerrcode = curl_errno($ch);
           $curlerr = curl_error($ch);              

           var_dump(json_decode($response));