"Enter"a basıp içeriğe geçin

Iyzico Nedir? PHP ile Ödeme Formu Entegrasyonu

Iyzico ödeme formu entegrasyonu ve Iyzico nedir konusuna değinecek olursam. İnternetten ödeme yapmanıza olanak sağlayacak bir sanal pos firması. Iyzico sanal pos firmalarının öncülerinden olmakla birlikte gerek hız ve verimlilik açısından benim bir numaralı tercihimdir. Kolay kullanılabilir ödeme altyapısı ile gerçekten kullanıcı dostu bir sanal pos firması diyebiliriz.

Peki Neden Iyzico?

Iyzico’nun verimliliğinden ve hızından bahsettik ayrıca, sunucu taraflı programlama diline uygun 6 adet istemci (client) sunar. Bu istemcilerden programlama yapmak istediğiniz dile uygun olanı seçip sandbox (test) bilgileri ile kullanmaya başlayabilirsiniz. Bu kısım ise bizim daha kolay bir kullanım ile entegre etmemize olanak sağlıyor.

Entegrasyon Metoduna Karar Vermek

  • Ödeme Formu
    Bu yazımızda da anlatacağım konu olan ödeme formu iframe ve ortak ödeme sayfası olarak kullanım şekilleri mevcuttur. Hızlı bir şekilde  ödeme almaya başlamak isterseniz Iyzico ödeme formunu tercih edebilirsiniz. Tek bir sorgu dahi uğraşmadan kolay bir şekilde halledebileceğiniz ödeme formunun popup ve responsive kullanımını bu yazımda anlatacağım fakat iyzico ortak ödeme sayfasının da kullanımını da şu konumda detaylı bir şekilde bahsettim. 
  • API
    İşyeri bu ödeme biçiminde kendi formunu kullanır. Bu entegrasyonda iyzico servisleri üye işyeri ödeme formunun arkasında çalışır. İşyeri kendi isteğine ve ödeme modeline göre gerektiği gibi değiştirebilir.

Entegrasyon Sürecinde Dikkat Edilecek Hususlar

  • Entegrasyon sürecinde her kullanıcı için ayrı ayrı bilgi set edilmeli yani kullanıcıdan çekilen gerçek bilgileri Iyzico tarafına gönderilmelidir.
  • Ödeme işlemi sonucunda dönen değerler (price, paidPrice, basketId, conversationId) kullanıcı tarafına gösterilmelidir. Gelen değerleri sizin tarafınızda kaydettiğiniz değerlerle karşılaştırarak farklı bir durum var ise hata mesajı gösterebilirsiniz.

Ödeme Formu Entegrasyonu (Popup ve Responsive)

iyzico ödeme formu entegrasyonu kullanımı aslında çok kolay ve basit. İlk olarak Iyzico’nun GitHub hesabından api’nin son versiyonunu indiriyoruz. Daha sonrasında;

  1. SandBox (Test) Hesabı Oluşturmak
    Iyzico servislerini test edebilmek adına sandbox ortamına kayıt olmamız gerekiyor. Bu adresten kaydınızı gerçekleştirip giriş işlemi yapın. Ayarlar kısmından api ve secret keyleri alın.
  2. Gerekli Ayarların Yapılması
    Iyziconun GitHub hesabındaki api’den src klasörünü ve IyzipayBootstrap.php dosyasını aldıktan sonra yeni bir dosya ekleyip aşağıdaki kodu yüklemeniz gerekmekte. Klasör yapımız şu şekilde olmalı;
    • iyzico
      • src
      • IyzipayBootstrap.php
      • buyer.php (Yani aşağıdaki kodumuz bu dosya size gelmez yeni bir buyer.php adlı dosya açıp aşağıdaki kodu yapıştırmanız gerekmekte.)
    • sonuc.php
    • index.php
<?php
require_once('IyzipayBootstrap.php');

IyzipayBootstrap::init();

class Config
{
    public static function options()
    {
        $options = new \Iyzipay\Options();
        $options->setApiKey("API-KEY");
        $options->setSecretKey("SECRET-KEY");
        $options->setBaseUrl("https://sandbox-api.iyzipay.com");
        return $options;
    }
}

$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://www.siteadi.com/sonuc");
$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, Config::options());
print_r($checkoutFormInitialize->getErrorMessage());
print_r($checkoutFormInitialize->getCheckoutFormContent());
?>

Kod bloğunu kısaca açıklayacak olursam; İlk olarak test ortamından aldığımız secret ve api keyini ilgili alana yapıştırıp geri dönüş url yani setCallbackUrl belirliyoruz burada sipariş no şeklinde get ile sonuç sayfasına sipariş numarasına gönderebilirsiniz. Daha sonrasında kullanıcı bilgilerini ve sepet içeriğini çekiyoruz. getCheckoutFormContent ile form içeriğini alıyoruz. Bu dosyada işlemimiz bu kadar.

Formu Gösterme

Ödeme yapacağımız kısımda formu nasıl göstereceğiz derseniz aşağıdaki gibi kullanabilirsiniz.

<?php include ‘iyzico/buyer.php’; ?>
<div id=”iyzipay-checkout-form” class=”responsive”></div>

Not: responsive yerine popup yazarsanız popup şeklinde kullanabilirsiniz.

Sonuç Sayfası Kullanımı

<?php
ob_start();
session_start();
require_once('iyzico/IyzipayBootstrap.php');

IyzipayBootstrap::init();

class Config
{
    public static function options()
    {
        $options = new \Iyzipay\Options();
        $options->setApiKey("API-KEY");
        $options->setSecretKey("SECRET-KEY");
        $options->setBaseUrl("https://sandbox-api.iyzipay.com");
        return $options;
    }
}

$token=$_POST['token'];
$siparis_no=$_GET['siparis_no'];

$request = new \Iyzipay\Request\RetrieveCheckoutFormRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId("$siparis_no");
$request->setToken("$token");
$checkoutForm = \Iyzipay\Model\CheckoutForm::retrieve($request, Config::options());

//print_r($checkoutForm->getStatus());
echo $odeme_durum=$checkoutForm->getPaymentStatus();
echo "<br>";
$islem_no=$checkoutForm->getpaymentId();

if ($odeme_durum=="FAILURE") {
	
	echo "Başarısız Ödeme...";

} elseif ($odeme_durum=="SUCCESS") {

	echo "Başarılı Ödeme işlem numaranız :".$islem_no;
	
}
?>

Yukarıdaki kod bloğunun mantığı şöyle çalışmakta; İlk olarak belirlediğimiz setCallbackUrl ile bize gelen token ilgili dosyaya post ediliyor. Bu token her kullanıcı için farklıdır. Daha sonrasında setCallbackUrl de eğer bir sipariş no diye bir parametre ile gönderip siparişi kaydetmek isterseniz get ile sipariş numarasını çekiyoruz. Gönderdiğimiz sipariş no iyzico tarafına ulaşmış mı diye kontrol ettikten sonra eğer başarısız ise FAILURE içinde eğer başarılı ise SUCCESS içinde işlem yapıyoruz.

Projenin Kaynak Kodları: İndir

Aklınıza takılan herhangi bir soruyu yorum kısmında belirtebilirsiniz. Keyifli kodlamalar 🙂

Okuyucu Puanı
[Toplam: 1 Ortalama: 5]

İlk Yorumu Siz Yapın

Bir cevap yazın

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