Codeigniter Iyzico entegrasyonu

Codeigniter Iyzico entegrasyonu nasıl yapılır

Codeigniter framework’ü kullanarak Iyzico entegrasyonu yapmayı anlatacağım. Entegrasyona başlamadan önce bir sandbox hesabınız olması gerekiyor, yok ise https://sandbox-merchant.iyzipay.com/auth adresinde hesap açabilirsiniz.

Ödeme formunu göstermek için views  içinde payment.php adında dosya oluşturuyorum ve Iyzico dökümanındaki ödeme formu kodlarını ekliyorum.

Burada kodları çalışma mantığını anlatmak için paylaşıyorum, test etmek için ekteki dosyayı indirebilirsiniz.

https://github.com/iyzico/iyzipay-php buradan dosyayı indirip application/third_party içine atıyoruz.

Buradaki fiyat ve sipariş bilgilerini kendi sisteminize göre özelleştirmeniz gerekiyor.

<?php
$request = new \Iyzipay\Request\CreateCheckoutFormInitializeRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId("123456789");
$request->setPrice("1");
$request->setPaidPrice("1.2");
$request->setCurrency(\Iyzipay\Model\Currency::TL);
$request->setBasketId("B67832");
$request->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT);
$request->setCallbackUrl("https://localhost/iyzico-ci/home/status");
$request->setEnabledInstallments(array(2, 3, 6, 9));

$buyer = new \Iyzipay\Model\Buyer();
$buyer->setId("BY789");
$buyer->setName("John");
$buyer->setSurname("Doe");
$buyer->setGsmNumber("+905350000000");
$buyer->setEmail("email@email.com");
$buyer->setIdentityNumber("74300864791");
$buyer->setLastLoginDate("2015-10-05 12:43:35");
$buyer->setRegistrationDate("2013-04-21 15:12:09");
$buyer->setRegistrationAddress("Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1");
$buyer->setIp("85.34.78.112");
$buyer->setCity("Istanbul");
$buyer->setCountry("Turkey");
$buyer->setZipCode("34732");

$request->setBuyer($buyer);
$shippingAddress = new \Iyzipay\Model\Address();
$shippingAddress->setContactName("Jane Doe");
$shippingAddress->setCity("Istanbul");
$shippingAddress->setCountry("Turkey");
$shippingAddress->setAddress("Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1");
$shippingAddress->setZipCode("34742");
$request->setShippingAddress($shippingAddress);

$billingAddress = new \Iyzipay\Model\Address();
$billingAddress->setContactName("Jane Doe");
$billingAddress->setCity("Istanbul");
$billingAddress->setCountry("Turkey");
$billingAddress->setAddress("Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1");
$billingAddress->setZipCode("34742");
$request->setBillingAddress($billingAddress);

$basketItems = array();
$firstBasketItem = new \Iyzipay\Model\BasketItem();
$firstBasketItem->setId("BI101");
$firstBasketItem->setName("Binocular");
$firstBasketItem->setCategory1("Collectibles");
$firstBasketItem->setCategory2("Accessories");
$firstBasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
$firstBasketItem->setPrice("0.3");
$basketItems[0] = $firstBasketItem;

$secondBasketItem = new \Iyzipay\Model\BasketItem();
$secondBasketItem->setId("BI102");
$secondBasketItem->setName("Game code");
$secondBasketItem->setCategory1("Game");
$secondBasketItem->setCategory2("Online Game Items");
$secondBasketItem->setItemType(\Iyzipay\Model\BasketItemType::VIRTUAL);
$secondBasketItem->setPrice("0.5");

$basketItems[1] = $secondBasketItem;
$thirdBasketItem = new \Iyzipay\Model\BasketItem();
$thirdBasketItem->setId("BI103");
$thirdBasketItem->setName("Usb");
$thirdBasketItem->setCategory1("Electronics");
$thirdBasketItem->setCategory2("Usb / Cable");
$thirdBasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
$thirdBasketItem->setPrice("0.2");
$basketItems[2] = $thirdBasketItem;
$request->setBasketItems($basketItems);

$checkoutFormInitialize = \Iyzipay\Model\CheckoutFormInitialize::create($request, $options);
//print_r($checkoutFormInitialize->getStatus()); 
//print_r($checkoutFormInitialize->getErrorMessage());
print_r($checkoutFormInitialize->getCheckoutFormContent());
?>
<!-- Begin page content -->
<main role="main" class="flex-shrink-0">
  <div class="container">
      <div class="pricing-header px-3 py-3 pb-md-4 mx-auto text-center">
        <h1 class="display-4">Ödeme</h1>
      </div>
      <!--ödeme formu burada-->
      <div id="iyzipay-checkout-form" class="responsive"></div>

  </div>
</main>

Daha sonra controllers içinde Home.php oluşturuyorum ve aşağıdaki fonksiyonları ekliyorum.

//iyzico kütüphanesi import ediliyor
public function initialize_iyzico()
{
	require_once(APPPATH . 'third_party/iyzipay/IyzipayBootstrap.php');
	IyzipayBootstrap::init();
	$options = new \Iyzipay\Options();
	$options->setApiKey('api keyiniz');
	$options->setSecretKey('secret keyiniz');
	$options->setBaseUrl("https://sandbox-api.iyzipay.com");
	return $options;
}

//ödeme formu çalışıyor
public function payment()
{
	$data['options'] = $this->initialize_iyzico();
	$this->load->view('partials/header', $data);
	$this->load->view('payment', $data);
	$this->load->view('partials/footer');
}

//ödeme formundan sonuç dönüyor
public function status()
{
	$options = $this->initialize_iyzico();
	# create request class
	$request = new \Iyzipay\Request\RetrieveCheckoutFormRequest();
	$request->setLocale(\Iyzipay\Model\Locale::TR);
	$request->setConversationId("123456789");
	$request->setToken($_POST["token"]);
	$checkoutForm = \Iyzipay\Model\CheckoutForm::retrieve($request, $options);
	//form sonucu(object)
	//print_r($checkoutForm);
	if($checkoutForm->getStatus() == "success")
	{
		$data['status'] = 'Ödeme başarıyla alındı.';
	}
	else{
		$data['status'] = 'Ödeme alınamadı, bir hata oluştu.';
	}

	$this->load->view('partials/header', $data);
	$this->load->view('index', $data);
	$this->load->view('partials/footer');
}

initialize_iyzico fonksiyonunda Iyzico’yu import ediyoruz ve apikey, secretkey, base url tanımlıyoruz.

payment fonskiyonunda views/payment.php’deki ödeme formuna options değişkeni iledeğerleri gönderiyoruz ve ödeme formu çalışıyor.

status fonksiyonunda ise ödeme formundan dönen değerleri alıyoruz. print_r($checkoutForm); yaptığımızda formdan dönen bütün değerleri görebilir ve istediğimiz değerleri çekebiliriz. Ben $checkoutForm->getStatus() kodu ile ödemenin başarılı olup olmadığını kontrol ederek bilgi mesajı gösterdim.


Daha sonra test etmek için siteadi.com/home/payment sayfasına gidiyoruz. Aşağıdaki gibi ödeme formumuz geliyor.

Iyzico Codeigniter entegrasyon

https://dev.iyzipay.com/tr/test-kartlari adresinden test kartlarına ulaşabilirsiniz. Onun dışındaki Kart Üzerindeki İsim, aa/yy ve cvc kodlarına test için istediğinizi yazabilirsiniz.

Codeigniter’da Iyzico entegrasyonu bu kadar. Sorularınızı yorum olarak iletebilirsiniz.

Kodları indirmek için tıklayınız.

Diğer Yazılar

Okan Taştan

Full Stack Developer

7 Yorum

  1. Merhaba, kendi codeigniter tabanlı sistemime örnek kodlarınızı nasıl çalıştığını anlayabilmek adına aynen attım. Sandbox api ve güvenlik anahtarlarını da girdim. Ancak /home/payment url’ine gittiğimde ödeme formu oluşmuyor. Sebebi ne olabilir, neyi atlıyor olabilirim?

    1. siteadı. com/index.php/home/payment olarak deneyin,
      index.php’yi kaldırmak için application/config/config.php içinde $config[‘index_page’] = ”; olarak güncelleyin, anadizindeki htaccess dosyanızdan da index.php kodunu silerek deneyin

  2. Sayfa açılıyor ancak yerine oluşması gereken ödeme formu gelmiyor. Söylediğiniz şekilde de denedim bir değişiklik olmadı.

    1. status fonksiyonunda if blogunun silip echo $checkoutForm->getStatus(); bu kodu yazar mısınız?

      1. Geliyor, yukarıda header, aşağıda footer ve ortada payment view’ındaki Ödeme yazısı geliyor.

        yerine gelmesi gereken ödeme formu gelmiyor. “Ödeme” yazısının altında boşluk ve en altta footer geliyor.

          1. if ve else’i silip yazdığınızı ekledim. ancak hala payment sayfasında ödeme formunu göremiyorum. browser cachini de temizledim, tekrar denedim. anlayamadım neden olmadığını.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir