Iyzico Ödeme Sistemleri (Api)

iyzico-logo-460x231

Iyzco şuan yeni alt yapsına geçiyor fakat benim uyguladığım eski sistem.Iyzico ile ödeme sistemlerini incelediğimizde bi 2 farklı seçenek sunmakta. Bunlardan biri ortak ödeme sayfası diğeri ise kendi formunuzu kullanıp değerleri iyzico sunucuna gönderiyoruz.Gelen response cevabına göre işlemlere devam ediyoruz.

Öncelikle iyziconun kendi sitesinden hesap oluşturup, hesap ayarları kısmında test app id  ve secret keyi bi yere koyalım, live moduna geçene kadar bu keylerle işlem yapacağız ortak sayfasında form almak için aşağıdaki kodları ekrana basmanız yeterlidir , bu esnada curl kütüphanesi açık olmalıdır.


$data = array();
 $data['api_id'] = 'im5242db25a2cbeid2z2hstlupwjaut9';
 $data['secret'] = 'im5242db3422127sk5o9czq16imr79dv';
 $data['customer_language'] = 'tr';
 $data['mode'] = 'test'; // metod 
 $data['external_id'] = rand(); // random id
 $data['amount'] = '199';  // fiyat * 100
 $data['type'] = 'CC.DB';
 $data['installment'] = true; // taksit
 $data['return_url'] = 'http://localhost/eCommerce/sonuc.php'; // Sonuç url
 $data['currency'] = 'TRY';


 $rest = curl_init(); 
 curl_setopt($rest,CURLOPT_URL,$url); 
 curl_setopt($rest,CURLOPT_POST,1);
 curl_setopt($rest,CURLOPT_POSTFIELDS,$data);
 curl_setopt($rest,CURLOPT_SSL_VERIFYPEER, false); 
 curl_setopt($rest,CURLOPT_RETURNTRANSFER, true); 
 $response = curl_exec($rest);
 
 curl_close($rest);

$resultJson = json_decode($response,true); 
 echo $resultJson['code_snippet'];

Form çıktısı için tıklayın

Gönder butonuna bastıktan sonra gelen sonucu görmek için responseyi ekrana basabilirsiniz. Sonuç olumlu ise db,mail vs işlemlerinizi yapabilirsiniz.


$response = $_POST['json'];
$result = json_decode(stripslashes($response), true);
var_dump($result);

Bi diğer seçenek ise kendi formunuzu kullanmak bunun için iyzico apisi kullanarak  bin ve kullanacaksınız taksit sorgularını post işleminden önce yapmanız gerekiyor.Ben bu sorguları ajax ile yaptım.Bin servisine kredi kartının ilk 6 hanesini yollamamız gerekiyor.Bin servisinde kart türünü belirleyip taksit sorgusuna yollayacağız.


$url = https://api.iyzico.com/bin-check;
$params = 'api_id=123&secret=123&mode=test&bin=123456';

$rest = curl_init();
curl_setopt($rest,CURLOPT_URL,$url);
curl_setopt($rest,CURLOPT_POST,1);
curl_setopt($rest,CURLOPT_POSTFIELDS,$params);
curl_setopt($rest,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($rest,CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($rest);
curl_close($rest);

Buradan gelen response cevap ise  aşağıdaki gibidir.Biz eğer taksit servisi kullanacaksak bin numarasını ve tutarı taksit sorgusunda göndermemiz gerekiyor.İssuer ve brand  paremetrelerini kart  kart değişikliğine göre ekran css veya js ile süsyeyebilirsiniz.


code: 000.000.000;
status: SUCCESS
 details:
    BIN: 450803
    CARD_TYPE: CREDIT CARD
    ISSUER: MASTERCARD
    BRAND: Maximum
    BANK_CODE: 64

Taksit sorgusunda ise müşteri kart numaralarını girdiğinizi farzedersek, gidicek sorgu ise ;


$url = https://iyziconnect.com/installment/v1/;
$params = 'api_id=123&secret=123&mode=test&amount=15000&bin_number=binnumarası;

$rest = curl_init();
curl_setopt($rest,CURLOPT_URL,$url);
curl_setopt($rest,CURLOPT_POST,1);
curl_setopt($rest,CURLOPT_POSTFIELDS,$params);
curl_setopt($rest,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($rest,CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($rest);
curl_close($rest);

$resultJson = json_decode($response,true);

var_dump($resultJson);

Gelen response cevabı şu şekilde olucaktır.

response:
   state: success 
   mode:test;
   date_time: 15-07-05 10:40:4
   installment_list:
   MAXIMUM:
    {
     1: installment_count:  installment_amount: 10000 total_amount: 10000 
     2: installment_count:  installment_amount: 5163 total_amount: 10325 
     3: installment_count:  installment_amount: 3458 total_amount: 10375
     6: installment_count:  installment_amount: 1766 total_amount: 10595 
     9: installment_count:  installment_amount: 1209 total_amount: 10880 
   } 
 account: {
   card_family: Maximum 
   card_type:  CREDIT_CARD
   card_association: MASTER_CARD
   issuer_bank_name: İş Bankası
   issuer_bank_code:64
 }

Gelen cevapda status success ise bize taksit sayılarını vericektir, failed ise hata vardır gelen hata mesajına göre editleme işleminizi yapmanız gerekir.Taksit sorgularını istersenız js ile istersen php html elementlerine göre ayarlayıp, ajaxla ekrana bastırabilirsiniz.Bundan sonra aşamamız sipariş aşaması olucaktır.Debit kartlarında (hesap kartlarında) 3d ile ödeme zorunluluğu vardır.Hesap kartlarında taksit seçeneği mevcut olmağından gidicek installment değerini boş bırakabiliriz.Buda biraz js bilgisi gerektiriyor en başta bin servisinde gelen response’de kart türü debit kart ise 3D zorunluluğu kılmalısınız.Debit kartlarda 3Dsiz sorguda size hata vericektir.

$url = https://iyziconnect.com/post/v1/;
 $data['api_id'] = ''; // api id
 $data['secret'] = '';  // secret id
 $data['customer_language'] = 'tr'; 
 $data['mode'] = 'test'; 
 $data['response_mode'] = 'ASYNC'; // 3D kullanılcaksa AYSNC değeri, 3d kullanılmayakcsa SYCN olmalıdır
 $data['external_id'] = 'orderid1';
 $data['amount'] = $15000; // tutar
 $data['card_number'] = '';
 $data['card_expiry_year'] = '';
 $data['card_expiry_month'] = '';
 $data['card_brand'] = ''; // kart türü
 $data['card_holder_name'] = ''; // kart sahibi
 $data['card_verification'] = ''; // güvenlik koduı
 $data['installment_count'] = ''; // sçilen taksit sayısı
 $data['connector_type'] = ''; // banka ismi
 $data['type'] = 'CC.DB';
 $data['currency'] = 'TRY';
 $data['customer_first_name'] = ''; //müşteri adı
 $data['customer_last_name'] = ''; // müşteri soyadı
 $data['customer_contact_email'] = // müşteri email
 $data['type'] = 'DB';
 $data['descriptor'] = '';  // açıklama
 $data['return_url'] = 3dsonuc.php'; // 3D formundan gelen cevap
 
 $rest = curl_init(); 
 curl_setopt($rest,CURLOPT_URL,$url); 
 curl_setopt($rest,CURLOPT_POST,1);
 curl_setopt($rest,CURLOPT_POSTFIELDS,$data);
 curl_setopt($rest,CURLOPT_SSL_VERIFYPEER, false); 
 curl_setopt($rest,CURLOPT_RETURNTRANSFER, true); 
 $response = curl_exec($rest); 
 curl_close($rest); 

Eğer 3D ile ödeme yapılcaksa ekrana echo $response; basarak 3d formuna göndermiş olucaksınız, 3D kullanılmayacaksa $resultJson = json_decode($response,true); resultJsonu ekrana basarak gelen sonuçları görebilirsiniz

3D’siz sorgudan gelen cevap;

  $resultJson = json_decode($response,true);
  var_dump($resultJson);

3D formundan gelen cevap ;

 $response = base64_decode($_GET['response']); 
 $resultJson = json_decode($response,true);

İkisininde ortak response sonucu;

response: { 
 state: success; 
 date_time: 15-07-05 16:20:27;
 request_id: MTQzNjExMzIyNg3SEgmoCS6Y3NdRMWK7; 
 } 
 mode: test;
 transaction:
 { 
 transaction_id: MTQzNjA5MzMyNgswuSDfA6tAOGiZTXcX
 external_id: 635513741478123123123;
 reference_id: 20150705104847.036951l2
 state: reversed
 amount: 0
 connector_type:Isbank 
 installment_count: 6 
 connector_auth_code: T88131
 } 
 customer: 
 {
 first_name:
 test_firstname :
 last_name: test_lastname
 email: test@test.com
 }

Eğer sonuç success ile kredi kartından çekim işlemi yapılmıştır, eğer failed ise response cevabında hata koduna göre düzenleme işlemi yapmanız gerekmektedir.Anlatım biraz bozuk olmuş olabilir kusura bakmayın.Iyzico destek konusunda kendileri destek veriyorlar.Tüm işlemlerden sonra gerekli evrakları iyzico’ya göndererek live app id ve secret keyinizi alarak alarak live metoduna geçebilirsiniz

Kaynak

1 Yorum

Yorum Bırak.