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.
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.
Emre
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?
Okan Taştan
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
Emre
Sayfa açılıyor ancak yerine oluşması gereken ödeme formu gelmiyor. Söylediğiniz şekilde de denedim bir değişiklik olmadı.
Okan Taştan
status fonksiyonunda if blogunun silip echo $checkoutForm->getStatus(); bu kodu yazar mısınız?
Emre
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.
Okan Taştan
yazdığım kodu ekleyin iyzico hata döndürüyor o yüzden boş geliyor
Emre
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ı.
halil ulucak
merhabalar hocam. Bende hatalı bir test kartı denediğimde form altında kırmız uyarı yazısı çıkınca siparişid sessionun siliyor ve sipariş bilgisini kart hatalı olarak güncelleyemiyorum bunu yapmanın bir yolu varmı acaba?
Okan Taştan
Merhabalar, Iyzico entegrasyonu session değerinizi silmez, site kodlarınızda bir problem olması lazım session kontrolü yaparak hata yakalamayı deneyin
phpci
Hocam pespese iki siparis gecince oturum kapanıyor sorun nedir ?
codeigniter developer
Csrf’yi kaldırmanız gerekiyor.