Haz
29

Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler

Bu yazımın online satış sistemi kuracaklar için yararlı olacağını düşünmekteyim.

Aşağıdakileri okumaya başlamadan bir önceki yazımı okumanız, sizin açınızdan faydalı olacaktır.

Online satış sistemini 3-D SECURE ödeme modeli ile yazmaya başladım. Bunun başlıca sebebi güvenlik açısından daha üst seviyede olmasıdır.  Bu modeli bilmeyenler için öncelikle bir açıklama yapalım.

3-D SECURE Nedir, Nasıl Çalışır?

Kısaca kullanıcı kredi kartı bilgilerini girdikten sonra ilgili bankanın bir sayfası açılarak sizden şifre istemesidir. Bankanızın ilgili şifresini girdikten sonra online satış işlemine devam edecektir. Bu sayede bir kontrol mekanizması yerine fazladan bir tane daha eklenerek daha güvenli hale getirilmesidir. Sonuç olarak hem kullanıcı için hem de sitenin daha güvenli olduğunu söyleyebiliriz.

Sanal Pos Çeşitleri Nelerdir?

Siz zaten online satış işlemini yapmadan önce anlaşmalı olduğunuz bankanızdan ilgili örnek kod parçasını almanız gerekmektedir.  Ben başlığımda da yazdığım gibi Garanti bankasının kodları üzerinden gittim.

Garanti bankası bize 3 farklı online satış işlemi sunmaktadır. Bunlar 3D, 3DOOSPAY, 3DPay dir. Bunların arasında fark ise, birincisi kendi websiteniz üzerinden kullanıcı kart bilgilerini alıp ilgili linke post etmektir. 3DOOSPAY ise biz burda herhangi bir işlem yapmıyoruz. Kullanıcı ilgili linke tıkladığında bankanın kendi sitesine yönlendirip işlemleri oradan yapmaktadır. Ben3D ve 3DPay arasındaki farkı pek anlamadım ama 3DPay de bankaya  daha fazla bilgi gönderebiliyor olmamız. Kargo, Kargo ücreti, adres detayları vs.

Garanti Sanal Pos Kurulumu öncesi için gereken bilgiler nelerdir?

Bir çoğunuz biliyordur fakat bilmeyen arkadaşlarımıza şunu hatırlatmakta fayda var. Sanal pos kullanmak istiyorsanız sitenizin SSL Sertifikasına sahip olmanız gerekmektedir. Aksi takdirde Sanal Pos işlemlerini yapamazsınız. Haliyle güvenli sayfaların adresi http değil https ile başlamaktadır.

Garanti sanal pos kurmaya başlamadan önce bankanın bize bazı bilgileri vermesi gerekmektedir. Bunlar;

  • Mağaza kodu (store ID)
  • İşyeri Anahtarı (İşyeri Ayıracı)
  • Kullanıcı Adı
  • Şifre
  • 3D secure sorgulaması için sunucu adresi
  • 3D secure işleminin api sunucusunun adresi

Bana bunlardan api sunucu adresi haricinde diğerleri gönderildi. Api adresini öğrenmek için ilgili kişiyle bi kaç mailleşmeden sonra adresi alabildim. Belki sizede verilmez diye ben burada sizlerle paylaşayım.

Sunucu Adresi : https://ccpos.garanti.com.tr/servlet/gar3Dgate

Api sunucusunun adresi : https://ccpos.garanti.com.tr/servlet/cc5ApiServer

Garanti Bankası Sanal Pos sorun ve destek için  iletişim bilgileri

Olaki takıldığınız nokta olur garanti bankasındaki ilgililere soru yöneltmek isterseniz, iletişim bilgileri aşağıda yazmaktadır. Hem telefonla hem de mail yoluyla size en hızlı şekilde cevap vermektedirler. O yönden içiniz rahat olsun :) Gönül rahatlığıyla sorularınızı sorabilirsiniz.

E-posta adresleri : eticaret [at] garanti.com.tr

Telefon numarası : +90 (212) 4440339

Web adresi: http://eticaret.garanti.com.tr

Garanti Sanal Pos Kurulumu

Yukarıdaki bilgileri öğrendikten sonra artık kendi sanal pos sistemimizi kurabiliriz. Öncelikle ben 3D modeli ile sistemimi geliştirdim. Kullandığım örnek kod dosyaları “3DModel.php” ve “3DModelodeme.php” dir.

ÖNEMLİ NOT : Sizin 3D Secure modeli kullanabilmeniz için sistemden bunun tanımlı olması gerekmektedir. Yoksa aşağıdaki gibi bir hata alırsınız.

3D Dönen Parametreler

Parametre Ismi Parametre Degeri
clientid XXXXXX
oid 1093
mdStatus 7
mdErrorMsg Isyeri Kullanim Tipi Desteklenmiyor
ErrMsg Isyeri Kullanim Tipi Desteklenmiyor
Response Error
ProcReturnCode 99

Güvenlik Uyarisi. Sayisal Imza Geçerli Degil

3D islemi onay almadi.

İlk önce 3Dmodel.php dosyasındaki yapacağımız değişiklikleri anlatalım.


$clientId = "XXXXXXXX";    //Banka tarafindan verilen is yeri numarasi
$amount = "9.95";           //Islem tutari
$oid = "";         //Siparis numarasi

$okUrl = "http://<magaza_sunucu_adresi>/3DModelodeme.php";        //Islem basariliysa dönülecek isyeri sayfasi  (3D isleminin sonucu, ödeme isleminin degil)
$failUrl = "http://<magaza_sunucu_adresi>/3DModelodeme.php";      //Islem basarisiz ise dönülecek isyeri sayfasi (3D isleminin sonucu, ödeme isleminin degil)

$rnd = microtime();            //Tarih veya her seferinde degisen bir deger güvenlik amaçli
//$rnd = "x";

$storekey = "xxxxxx";          //is yeri ayiraci (is yeri anahtari)
$storetype = "3d";             //3D modeli

Yukarıda zaten gerekli açıklamalar yazmaktadır. Ama ben size dikkat etmeniz gereken hususları anlatacağım.

  1. İşlem tutarını yazarken ayraç kullancağınız zaman nokta (.) kullanınız.
  2. $okUrl =”https://www.benimsitem.com/3DModelodeme.php” olsun. Mesela biz bu url’den parametre göndermek isteyebiliriz (Örn: ?fail=true). Sakın böyle bir şey yapmayın. Çünkü sistem size hata fırlatacaktır. Aynı durum $failUrl içinde geçerlidir. Hata mesajı : (Güvenlik Uyarisi. Sayisal Imza Geçerli Degil)

//      ISTEGE BAGLI ALANLAR

$description = ""; //Açiklama
$xid = "";    //Islem takip numarasi 3D için XID i magaza üretirse o kullanir, yoksa sistem üretiyor. (3D secure islemleri için islem takip numarasi 20 bytelik bilgi 28 karaktere base64 olarak kodlanmali, geçersiz yada bos ise sistem tarafindan üretilir.)
$lang="";     //gösterim dili bos ise Türkçe (tr), Ingilizce için (en)
$email="";    //email adresi
$userid="";   //Kullanici takibi için id

Yukarıdaki alanlar isteğe bağlı alanlardır. Eğer siz kullanıcının id’ sini 3DModelodeme.php sayfasından almak isterseniz $userid’ye bir değer verebilirsiniz. (İllaki göndermeniz gerekecek sonuç itibariyle para transferinden sonra kullanıcının ödeme bilgilerini veritabanına kaydetmeniz vs gerekcek.) Eğer userid ye değer verdiğinizde bir başka yapmanız gereken bi tane hiddenfield oluşturup value suna useridnin değerini vermeniz gerekmektedir (<input type=”hidden” name=”userid” value=”<?php  echo $userid?>” > ). Çünkü örnek kodda yukarıdaki alanlar zorunlu olmadığı için eklenmemiştir.


<form method="post" action="https://<sunucu_adresi>/<3dgate_path>">

Son olarak formun actionına garanti bankasının bize vermiş olduğu ” https://ccpos.garanti.com.tr/servlet/gar3Dgate” linki yazarak, 3DModel.php dosyasında yapacağımız değişiklikleri böylelikle bitmiş olacağız.

Şimdi gelelim 3DModelodeme.php dosyasında yapacağımız değişikliklere ;


$hashparams = $_POST["HASHPARAMS"];
 $hashparamsval = $_POST["HASHPARAMSVAL"];
 $hashparam = $_POST["HASH"];
 $storekey="xxxxxx";
 $paramsval="";
 $index1=0;
 $index2=0;

 while($index1 < strlen($hashparams))
 {
 $index2 = strpos($hashparams,":",$index1);
 $vl = $_POST[substr($hashparams,$index1,$index2- $index1)];
 if($vl == null)
 $vl = "";
 $paramsval = $paramsval . $vl;
 $index1 = $index2 + 1;
 }
 $storekey = "xxxxxx";
 $hashval = $paramsval.$storekey;

yukarıdaki kod parçasında sadece “xxxxxx” yazan yerlere işyeri anahtarını yazmamızdır.


//             ÖDEME ISLEMI ALANLARI

$name="XXXXXXXX";               //is yeri kullanic adi
$password="xxxxxxxxx";            //Is yeri sifresi
$clientid=$_POST["clientid"];          //Is yeri numarasi

Burada ise iş yeri kullanıcı adını ve işyeri şifresini yazacağız.


// Sanal pos adresine baglanti kurulmasi

 $url = "https://<sunucu_adresi>/<apiserver_path>";  //TEST

Son işlemimiz ise api server adresini yazarak işlemimizi tamamlayacağız. Burada $url değişkenine “https://ccpos.garanti.com.tr/servlet/cc5ApiServer” linkini atayacağız.

Garanti Sanal Pos sistemini kurmuş bulunuyoruz. İlgili bilgileri yazdıktan sonra tek şey kullanıcının kart bilgilerini girip ilgili para transferini sorunsuzca halletmektir. :)

NOT : Son bir bilgilendirme daha yapmak istiyorum. Sipariş numarası “$oid” eşsiz olmak zorundadır. Yoksa SQL ile ilgili bir hata mesajı alacaksınız.

Herhangi bir sorunuzu garanti uzmanlarına yöneltebileceğiniz gibi banada çekinmeden sorabilirsiniz.

14 yorum bulunmaktadır - “Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler”

  • istanbul çiçek 27 Ekim 2010, 10:06

    Çok faydalı oldu teşekkürler.

  • TK 17 Aralık 2010, 02:04

    ÖNEMLİ NOT : Sizin 3D Secure modeli kullanabilmeniz için sistemden bunun tanımlı olması gerekmektedir. Yoksa aşağıdaki gibi bir hata alırsınız.

    bunu sisteme nasıl tanımlıyoruz? bende aynı hatayı alıyorum sürekli fakat çözüm konusunda bir şey bulamadım.

  • Enes Pekkaya 17 Aralık 2010, 09:27

    3D secure ile online alışveriş işlemini açtırmak için garanti bankasının vermiş olduğum iletişim bilgileriyle iletişim kurmanız gerekmekte. email adreslerine “3d secure ile işlem yapamadığımı açtırmak istediğinizi” söyleyin. Söylemeye gerek yok ama mağaza kodunuzu falan göndermeniz gerekmekte. Yoğunluğa bağlı olarak 1-2 saat içinde size geri dönüş yaparlar zaten.

  • ahmet 20 Ocak 2011, 14:30

    Bu dosyaların tam hallerini nereden indirebiliriz?

  • Enes Pekkaya 20 Ocak 2011, 16:27

    Siz hangi banka ile anlaştıysanız, onlar size ilgili dökümanları okumanız vs için bir adres vermeleri gerekmekte. İşte oradan kodlar vs dahil herşeyi indirebilirsiniz.

  • Kemal 06 Mayıs 2011, 23:17

    güzel anlatım olmuş hocam teşekkürler

  • Gökmen 22 Haziran 2011, 14:20

    Hocam SSL şart diyorsun ama artık ortak ödeme sayfası yada güvenli ödeme sayfası adı altında bütün bankalar SSL gerekmeden de sanal pos çalıştırıyor bilgin olsun.

  • Enes Pekkaya 22 Haziran 2011, 14:58

    Evet haklısın ama dikkat edersen bankalar seni kendi sistemlerine yönlendiriyorlar. Yani onların sistemi haliyle ssl sertifikasına sahip :) Zaten ssl sertifikasına sahip değilsen kendi sitenden onliine pos ödemesi yaptıramazsın. Senin dediğin 2. farklı bir yöntem. Ama dediğim gibi her halukarda ssl sertikası olmadan sanal pos yapılmaz.

  • Hüseyin 12 Eylül 2011, 11:39

    Enes hocam teşekkürler. Böyle bir yazıya ihtiyaç vardı.

  • murat 16 Kasım 2011, 18:39

    herşey düzgün fakat gelen veri boş dönüyor. işlem başarısız uyarısı alıyorum. garanti’ye mail attım, hosts dosyasını kontrol edin dediler. yine sonuç değişmedi. sunucunuzdan çıkış olmayabilir dediler. oysa CURL ile bağlanamasam zaten hata verirdi. ne yaptıysam olmadı

  • Enes Pekkaya 18 Kasım 2011, 09:20

    Herşeyin doğru olduğunu düşünüyorsanız bu sorunun sebebi urlden parametre gönderdiğinizden dolayı olabilir yada online işlem yapılan sayfa güvenli olmadığından dolayıda olmayabilir. Yani https yerine http ile göndermiş olabilirsiniz.

  • mehmet 25 Kasım 2011, 16:30

    Garanti sanal pos test sunucusunu ben hiç çalıştıramadım. Gerçek ortamda test yapın derim, 10 krş ile işlem yaparak tamamladım işlemleri. Bana sorarsan garanti test sunucusunda bir gariplik var.

  • Cemil 21 Nisan 2012, 12:56

    Merhaba, çok faydalı bir yazı olmuş teşekkürler. Küçük bir de sorum olacak: wordpress sitelere sanalpos sistemi kurabilir miyiz. Ne tür sorunlarla karşılaşırız. Çok teşekkürler şimdiden.

  • Enes Pekkaya 23 Nisan 2012, 14:22

    Merhaba,

    kendi sitem hariç :) diğer yazmış oldğumu sitelerde hazır framework kullanmamaktayım. Daha önce wordpress de kod geliştirme deneyimim olmadığından dolayı size çok fazla bilgi veremeyeceğim. Sadece şunu söyleyebilirim; bence son derece dikkatli yazılması gereken bir siteye hazır kod kullanarak nasıl güveneceğinizdir. Sonuç itibariyle işin içine para girdiğinden dolayı wordpress de kod deneyimi olmuş bir arkadaşa inceletmenizi tavsiye ederim. Sonradan başınızı çok ağrıtabilir.

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Haftanın Özlü Sözü

Akıllı bir adam yalnız kendi tecrübelerinden, çok akıllı bir adam başkalarının da tecrübelerinden yararlanır. (Çin Atasözü)

Bağlantılar

Arşivler