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.

25 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.

  • Hüseyin 10 Eylül 2012, 09:07

    Sistem Hatasý
    mdstatus : 7
    mderrormessage : Guvenlik Kodu hatali
    errmsg : Guvenlik Kodu hatali
    clientid : 20006708
    oid : DENEME
    response : Error
    procreturncode : 99
    apiversion : v0.01
    orderid : DENEME
    txninstallmentcount :
    terminaluserid : XXXXXX
    secure3dhash : 246022DCC9E27052288E348854844D456426C2D2
    secure3dsecuritylevel : 3D
    txncurrencycode : 949
    customeremailaddress : info@tradesis.com
    errorurl : https://www.site.com/huodeme/3DModelResults.php
    terminalmerchantid : 3487070
    mode : PROD
    terminalprovuserid : PROVAUT
    txnamount : 100
    successurl : https://www.site.com/huodeme/3DModelResults.php
    customeripaddress : 127.0.0.1
    txntype : sales
    terminalid : 20006708

    Böyle bir hata alıyorum bunun nedeni nedir?

  • Enes Pekkaya 11 Eylül 2012, 20:25

    Merhaba,

    Aslında alınan hata mesajının ne olduğunu yazımda belirtmiştim. Gözünüzden kaçmış galiba. Sorununuzun nedeni aşağıdaki gibidir:

    Ö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.

  • BkrTrpn 16 Şubat 2013, 15:32

    Hüseyin bey bu hatayı nasıl çözdünüz acaba.. Aynı sistem hatasıyla bende karşılaştım.

  • Ali Gündüz 08 Haziran 2013, 21:41

    Enes Bey, Çok detaylı anlatmışsınız, Benim sorum; Elimde garanti bankasının tam api si var, bunu test accountlarla test ettiğimde çalıştıramıyorum. Yukarı da belirtiğiniz hata çıkıyor. acaba test account u kullanabilmem içinde web sitesini bankaya kayıt ettirmem mi gerekiyor?

  • Ali Gündüz 08 Haziran 2013, 21:42

    Teşekür etmeyi unuttum çok sağolun

  • Enes Pekkaya 10 Haziran 2013, 10:01

    Merhaba Ali Bey,

    aslında bankanın websitesi ile ilgili kısıtının olmaması lazım. En iyi çözüm yazımda bahsettiğim garanti sanal pos ile ilgilenen kişiye e-posta atmanız. ZAten onlar sizi yönlendirecektir. Sanal pos ile uğraşmayalı bir zaman girdi belki dediğiniz gibi güvenlik açısından ip kısıtlaması getirmiş olabilirler.

    İyi çalışmalar…

  • Mehmet Özhan Hastaoğlu 12 Temmuz 2013, 11:48

    3D ile 3D PAY arasındaki park, geçen sürede ürünün satışı yapılmış mı ?
    yapıldıysa satma ve bilgi gönderme dediğiniz gibi.

    3D müşteri SMS ile onayladığında sonuç doğru ise bu sefer stok kontrolü yap,

    daha sonra XML ile parayı çek.

    3D Pay’da 3D onayı yapıldıysa XML post etmene gerek yok, direk çekiyor.

    Not : 3D testlerinde currency eklenmemiş onun için başarısıza gönderiyor. onu hidden

    parametre olarak göndericeksiniz. Taksit hidden gönderince 3D başarısıza gönderiyor.

    Saçma sapan sistemler yapıyorlar , senelerce geliştirmiyorlar. Aslında bunlar çok basit

    işlemler günümüz teknolojisinde, böyle milleti hiç uğraştırmaya gerek yok.

  • Sami 25 Kasım 2013, 22:58

    merhaba enes hocam, bir sorum olacak ilk kez sanal pos uygulaması kuruyorum, garanti 3d model olarak açtırdık 3 doğrulama geldikten sonra xml post etmemiz gerekiyormuş parayı çekmek için bunu nasıl yapabilirim? bu konuda bir fikrim yok açıkçası php ile hazırladım.
    şimdiden çok teşekkürler.

  • Enes Pekkaya 26 Kasım 2013, 09:48

    Merhabalar,

    benim bildiğim kadarıyla xml post etmeniz gerektiğini düşünmüyorum fakat belki yeni yapıya geçmiş olabilirler. Sizden nasıl bir xml post etmeniz istiyorlar acaba? Şahsen benim de bir fikrim bulunmamakta. 🙂

  • Sami 26 Kasım 2013, 20:54

    merhaba yukarıda mehmet özhan hastaoğlu durumu aynen açıklamış, benim sanal pos ta 3d model olarak tanımlamışlar, 3d provizyon alındıktan sonra banka onay sayfamıza gönderiyor, biz xml ile tekrar bankaya bazı bilgiler gönderip parayı çektiriyoruz, epey zahmetli bi iş bu sorunu çözemedim, bende 3d pay seçeneğine geçtim sorunsuz çekiyor 3d onayından sonra direk şu anda, ancak bu sorunuda çözmekte fayda var 🙂

  • etetik 02 Mayıs 2019, 22:20

    Merhabalar,
    Alış veriş kabaca
    1. Üye ürünü seçer ve kredi kartı bilgilerini girer.
    2. Satın al butonuna tıklar, bankanın sayfası gelir, şifreyi girer
    3. Her şey düzgünse satın alma gerçekleşir ve bilgisi gelir.
    Biz de kullanıcının satın alma işlemini veritabanımıza kaydetmek isteriz.
    Bu durumda hangi aşamada kullanıcının bilgilerini veritabanımıza kaydetmek mantıklı olur?
    Yani 2. aşamada satın al butonuna tıkladığı anda kaydedip sonra bankaya yönelendirmek mi, yoksa bankadan bilgiler geri döndükten sonra mı kaydetmek uygun olur?
    teşekkürler, selamlar

Yorum Yapın

 

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

Etiketler

Son Yazılar

Son Yorumlar

Bağlantılar

Arşivler