3D ile Satış İşlemi
- 3D Secure güvenlik satış İşleminde, normal satıştan farklı olarak use3d  ve return_url olmak üzere iki ekstra parametre bulunur.
- Ayrıca lütfen TOKEN ve taksitlerin kullanılacağını öğrenmek/görmek için Satış İşlemi sayfasını kontrol edin.

- Aşama A:Satış isteği gönderirken  use3d ve return_url ile birlikte göndermeniz gerekir.
- Aşama B: bağlantı isteği güvenli bir şekilde kurulursa HTML yanıtı alırsınız.
- Aşama C: : Dönen cevabı tarayıcıya HTML olarak yazdırmanız gerekir; bu sayede 3D doğrulama sayfası tarayıcınızda (OTP girişi yapılacak ekran) görünür ve kart sahibi işleme devam edebilir.
- Aşama D: Kart sahibi 3D şifresini ekrana başarılı olarak girdikten sonra, Payfull response mesajını (JSON formatında) return_url’nize döner.
Önemli notlar
- 3D isteği güvenli bir şekilde kurulmazsa, B Aşamasındaki sonuç/response HTML yanıtı yerine JSON formatında yanıt alırsınız.
- Aşama D’nin sonunda, Payfull üye işyeri eşleştirmesi ve güvenlik için Hash kullanarak dönüş sağlayacaktır.
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 Sale olmalıdır.
total: ZORUNLU
Ödemenin miktarında kuruş değeride belirtilmelidir. Örnek olarak: 10.23 yada 10.00
cc_name: ZORUNLU
Ücret Tahsil edilecek kişinin kart bilgilerine ihtiyaç vardır.Kart üzerinde yazan isim.
cc_number: ZORUNLU
16 haneli kart numarasıÖrnek olarak: 4123456789123456
cc_month: ZORUNLU
Kart Son Kullanım Tarihi Ay değeriÖrnek Olarak: 05
cc_year: ZORUNLU
Kart Son Kullanım Tarihi Yıl değeriÖrnek Olarak: 2017
cc_cvc: ZORUNLU
Kart Güvenlik NumarasıÖrnek Olarak: 000
currency: ZORUNLU
Desteklenen para birimleri şunlardır. TRY/USD/EUR/GBP
installments: ZORUNLU
Taksit değerinin girildiği alanı ifade eder. Tek çekim işlem tapılacaksa değer 1 olarak atanmalıdır.
campaign_id: OPSİYONEL
Belirli bankalar belirli koşullar yerine geldiğinde taksit değerlerinde kampanyalar oluşturmaktadır. Kampanyadan faydalanılmak istenirse ilgili id bilgisini göndermeniz gerekmektedir.
Buradan kampanyalara ait tüm bilgiye ulaşabilirsiniz.
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 kişiye ait IP bilgisi gönderilmelidir.
payment_title: ZORUNLU
Her satış işlemine ait belirlenmesi gereken işlem başlığıdır. Örnek olarak: Çay Bardağı 6'lı Set
use3d: ZORUNLU
Bu parametre 1 olmalıdır aksi halde normal bir satış işleminden farksız çalışır.
return_url: ZORUNLU
3D sayfasından dönecek olan sonuç verilerinin gönderileceği link adresini buraya giriniz.
gateway: OPSİYONEL
Taksitli işlem yapılmak istenildiğinde ZORUNLU olan bir parametre daha. bank_id ile beraber kullanılmak istenen bankaya ait özel bir değer girilmesi gerekir. İlgili değeri nasıl temin edeceğinizi Taksit Bilgisi sayfasından öğrenebilirsiniz.
customer_firstname: ZORUNLU
İşlemi yapan kişinin bilgilerine ihtiyaç vardır. İlk olarak isim.
customer_lastname: ZORUNLU
Soyisim
customer_email: ZORUNLU
Email hesabı
customer_phone: ZORUNLU
Telefon numarası
customer_tc: OPSİYONEL
TC kimlik numarası.
passive_data: OPSİYONEL
Bu parametre işlem için göndermek ve sonrasında tekrar geri almak istediğiniz herhangi data yada bilgi için oluşturulmuş bir parametredir.
(not: lütfen bunu kart numaraları veya şifreler gibi önemli bir veri göndermek için kullanmayın).
merchant_trx_id: OPSİYONEL
Bu parametre işlem için özgün bir id değeri tanımlamanız ve göndermeniz içindir. Sonrasında üretmiş olduğunuz bu değeri İşlem Durum Bilgisi için kullanmanız gerekmektedir.
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 : merchant name
type : Sale
tota : 23.02
cc_name : ALI
cc_number: 4111111111111111
cc_month: 09
cc_year: 2024
cc_cvc: 000
currency: TRY
merchant: merchant name
installments: 1
language: tr
client_ip: 192.168.1.1
payment_title: just payment title
return_url: https://your_Application/return3D bank_id: Akbank
gateway: 160
customer_firstname: ALI
customer_lastname: MUHAMAD
customer_email: alitestemail@gmail.com
customer_phone: 5394659832
customer_tc: 12590326514
passive_data: just any passive data
hash: 14339MjuG01015018

> Cevap Örneği

{
“type”: ”Sale”,
“status”: 1,
“transaction_id”: ”T4U_7dd053f6b8_d9a58906b”,
“ErrorMSG”: ”Success Transaction”,
“ErrorCode”: ”00”,
“passive_data”: ”just any passive data”,
“original_currency”: ”TRY”,
“total”: 23.02,
“currency”: ”TRY”,
“conversion_rate”: 1,
“bank_id”: ”Akbank”,
“use3d”: 1,
“installments”: 1,
“time”: ”08-09-2016 02:53:25”
“hash”: ”14339MjuG01015018”
}

>  Php Örneği

//API isteğini göndereceğiniz Endpoint URL değeri                      
 $api_url =
'https://yourSubDomain.payfull.com/integration/api/v1';    

                  //Payfull hesabınız içerisinde oluştuduğunuz API hesabına ait "Üye İşyeri Şifresi" değeri.                    
   $merchantPassword = 'your merchant password';  

                     //parametrelerinizi oluşturduğunuz dizi.
                      $params = array(                  
                      "merchant"        => 'your merchant name',
                      "type"            => 'Sale1',
                      "total"            => '1.01',
                      "cc_name"        => 'Mohammad',
                     "cc_number"       => '4111111111111111
                      "cc_month"  =>   '12',
                      "cc_year"           => '2030',
                     "cc_cvc"  => '000',                  

                      "currency"        => 'TRY',  
                     "installments"    => 1,  
                      "language"        => 'tr',  
                      "client_ip"       => '192.168.1.1',  
                      "payment_title"   => 'test payment title',    
                      "use3d"           => '1',  
                      "return_url"      => 'https://your_Application/return3D',      
                       "bank_id"         => 'Akbank',      
                       "gateway"         => '160',        

                       "customer_firstname" => 'ALI',      
                      "customer_lastname"  => 'MUHAMAD',    
                      "customer_email"     => 'alitestemail@gmail.com',                            "customer_phone"     => '5394659832',      
                      "customer_tc"     => '12590326514',          
           
                      "passive_data"  => 'write here what you like',                        );
                     
                     // 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);              

           //cevabı öğrenmek için print ediyoruz.                      
          
           var_dump(json_decode($response));   //3d'siz işlemde json olarak dönüyoruz.
          var_dump($response);  //3d'li işlemde html form olarak gönderiyoruz.

                     "cc_name"        => 'Mohammad',
                     "cc_number"       => '4111111111111111
                     "cc_month"  =>   '12',
                      "cc_year"           => '2030',
                    "cc_cvc"  => '000',                  
"currency"        => 'TRY',  
                     "installments"    => 1,  
                       "language"        => 'tr',  
                       "client_ip"       => '192.168.1.1',  
                       "payment_title"   => 'test payment title',    
                       "use3d"           => '1',  
                       "return_url"      => 'https://your_Application/return3D',      
                       "bank_id"         => 'Akbank',      
                        "gateway"         => '160',        
                       "customer_firstname" => 'ALI',      
                      "customer_lastname"  => 'MUHAMAD',    
                      "customer_email"     => 'alitestemail@gmail.com',                                              "customer_phone"     => '5394659832',      
                     "customer_tc"     => '12590326514',                      
                     "passive_data"  => 'write here what you like',                        );
                     
                     // 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);              

           //cevabı öğrenmek için print ediyoruz.                      
           var_dump(json_decode($response));
                       "cc_name"        => 'Mohammad',
                     "cc_number"       => '4111111111111111
                     "cc_month"  =>   '12',
                      "cc_year"           => '2030',
                    "cc_cvc"  => '000',                  
"currency"        => 'TRY',  
                     "installments"    => 1,  
                       "language"        => 'tr',  
                       "client_ip"       => '192.168.1.1',  
                       "payment_title"   => 'test payment title',    
                       "use3d"           => '1',  
                       "return_url"      => 'https://your_Application/return3D',      
                       "bank_id"         => 'Akbank',      
                        "gateway"         => '160',        
                       "customer_firstname" => 'ALI',      
                      "customer_lastname"  => 'MUHAMAD',    
                      "customer_email"     => 'alitestemail@gmail.com',                                              "customer_phone"     => '5394659832',      
                     "customer_tc"     => '12590326514',                      
                     "passive_data"  => 'write here what you like',                        );
                     
                     // 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);              

           //cevabı öğrenmek için print ediyoruz.                      
           var_dump(json_decode($response));                       "cc_name"        => 'Mohammad',
                     "cc_number"       => '4111111111111111
                     "cc_month"  =>   '12',
                      "cc_year"           => '2030',
                    "cc_cvc"  => '000',                  
"currency"        => 'TRY',  
                     "installments"    => 1,  
                       "language"        => 'tr',  
                       "client_ip"       => '192.168.1.1',  
                       "payment_title"   => 'test payment title',    
                       "use3d"           => '1',  
                       "return_url"      => 'https://your_Application/return3D',      
                       "bank_id"         => 'Akbank',      
                        "gateway"         => '160',        
                       "customer_firstname" => 'ALI',      
                      "customer_lastname"  => 'MUHAMAD',    
                      "customer_email"     => 'alitestemail@gmail.com',                                              "customer_phone"     => '5394659832',      
                     "customer_tc"     => '12590326514',                      
                     "passive_data"  => 'write here what you like',                        );
                     
                     // 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);              

           //cevabı öğrenmek için print ediyoruz.                      
           var_dump(json_decode($response));
Başlangıç
Taksit/Komisyon Bilgisi  Ekstra Taksit Bilgisi Kart Bilgisi Sorgulama
Hata Kodları ve Anlamları
Test Kartları Test Sanal Pos BilgileriSingle Sign On