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.
- İşlem tutarını yazarken ayraç kullancağınız zaman nokta (.) kullanınız.
- $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”
Yorum Yapın
Etiketler
Son Yazılar
- Uzak sunucuda bulunan android cihaz ile otomasyon
- Mac’ de çoklu Java versiyon yönetimi
- İş yarar docker komutları
- Eski branchlerin git’ den silinmesi
- Kubernetes Süresi Dolmuş Sertifikaları Yenilemek
Son Yorumlar
- Hosting koşuşturması için
- Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler için
- Visual Studio Toolbox’a component(bileşen) eklenmesi için
- “File is too large for destination file system” hatasını gidermek için
- Php’de UTF-8 Türkçe karakter sorunu ve çözümü için
Bağlantılar
Arşivler
- Kasım 2021
- Eylül 2021
- Ağustos 2021
- Temmuz 2021
- Aralık 2020
- Kasım 2020
- Ekim 2020
- Eylül 2020
- Kasım 2017
- Mayıs 2017
- Mart 2017
- Şubat 2017
- Ocak 2017
- Nisan 2015
- Aralık 2014
- Mayıs 2014
- Eylül 2013
- Haziran 2013
- Şubat 2013
- Kasım 2012
- Ekim 2012
- Eylül 2012
- Mart 2012
- Şubat 2012
- Ocak 2012
- Aralık 2011
- Kasım 2011
- Ekim 2011
- Eylül 2011
- Temmuz 2011
- Haziran 2011
- Mayıs 2011
- Mart 2011
- Ocak 2011
- Aralık 2010
- Kasım 2010
- Ekim 2010
- Eylül 2010
- Ağustos 2010
- Temmuz 2010
- Haziran 2010
- Mayıs 2010
- Nisan 2010
- Mart 2010
- Şubat 2010
- Ocak 2010
- Haziran 2009
- Mayıs 2009
- Nisan 2009
- Mart 2009
Çok faydalı oldu teşekkürler.
Ö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.
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.
Bu dosyaların tam hallerini nereden indirebiliriz?
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.
güzel anlatım olmuş hocam teşekkürler
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.
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.
Enes hocam teşekkürler. Böyle bir yazıya ihtiyaç vardı.
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ı
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.
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.
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.
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.
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?
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.
Hüseyin bey bu hatayı nasıl çözdünüz acaba.. Aynı sistem hatasıyla bende karşılaştım.
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?
Teşekür etmeyi unuttum çok sağolun
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…
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.
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.
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. 🙂
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 🙂
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