Bazı arkadaşlarımın isteği üzerine Web sitenize sanal pos kurulumunu anlatmaya çalışacağım. Bu makalemizde aşağıdaki konu başlıklarını değerlendireceğiz ve örnek uygulama yapacağız.
Sanal Pos Nedir ? Ne İşe Yarar ?
Bir Web Sitesinde Sanal Pos Kullanabilmek İçin Gerekli Materyaller Nelerdir ?
Kredi Kartı Güvenliği
Örnek Uygulama
Sanal Pos Nedir ? Ne İşe Yarar ?
Sanal pos ; E-Ticaret’in yapıtaşıdır aslında. Web siteleri üzerinden online ödeme ile alışveriş imkanı sunulmasını sağlayan bir teknolojidir. Sanal pos web sitelerinin değil bankanın vermiş olduğu bir hizmettir. Web siteleri bankaların bu teknolojisini kullanarak kullanıcının hizmetine sunar.
Bir Web Sitesinde Sanal Pos Kullanabilmek İçin Gerekli Materyaller Nelerdir ?
Bankalar bu hizmetlerini web siteleri aracılığı ile müşterilerine sunar fakat bu sistemi kullanmak için web sitelerinde bulunmasını istedikleri bir takım zorunluluklar vardır. Bunları 3 Madde olarak sıralayabiliriz. Web sitesinin içeriği ve amacına göre değişiklik gösterebilir bu rakam
Satış Sözleşmesi
Sanal pos hizmeti verecek olan web sitesinin tıpkı reel yaşantımızda olduğu gibi sanal alışverişte de ürünü satan kurum ile arasında bir sözleşme olması gerekir. Reelde bu sözleşme tükenmez kalem kullanılarak imzalanırken sanalda ise bu imza alışveriş formunun Satış sözleşmesini Okudum onaylıyorum diye bir kısım vardır bir çok sitede üyelik formlarında bile görmüşsünüzdür. Üyelik sözleşmesini onaylıyorum diye. Aşağıdaki şekil size daha açıklayıcı olacaktır.

Bu kısmın onaylanması ile imza atılmış olur. Programcı bu kısmı işaretlemeden formun gönderilmesine, dolayısı ile alışverişin tamamlanmasına izin vermez.
Visa / MasterCard Logoları
Web sitesinde alışverişte kullanılacak olan kredi kartlarının logoları web sitesinin bir köşesinde bulunmak zorundadır. Bu logoları google’dan temin edebilirsiniz.
İade Şartları ve Teslimat Süresi
Ürün satışından sonra herhangi bir sebebten ötürü iade edilmek istendiğinde her firmanın iadeyi alabilmek için müşteriye sunduğu şartlar vardır. İşte bu şartların web sitesinde bulunması ve müşteriye sunulması gerekmektedir. Aynı zamanda ürünü teslim etme süresi. Bu kısım ile ilgili bilgilerinde web sitesinde müşteriye sunuluyor olması lazımdır.
Sanal pos kullanıma açılmadan önce Bankanın sanal pos destek servisi teknik personelince sanal pos kullanılacak olan web sitesi incelenir. Eğer yukarıda saydığım materyaller yok ise temin etmelerini ister ve bu materyaller temin edildikten sonra sanal pos’u kullanıma açar.
Kredi Kartı Güvenliği
Bu konuda hem yazılımcının hemde bankanın dikkatli olması gerekmektedir. Banka Şu Şekilde dikkat eder ; Web sitesini güvenlik açısından inceler ve eksik gördüğü yerlerde yazılımcıyı uyarır. Ayrıca gelişen teknoloji ile birlikte artık sanal pos kullanımında 3D secure dönemi başlamıştır.
3D Secure Nedir ? Ne İşe Yarar ?
Web sitesi üzerinden Kredi kartı ile alışveriş yaparken dikkat edilmesi gereken bir hususta web sitesinin alışveriş ortamının güvenli olmasıdır. Web siteleri ne kadar güvenli olursa olsun sanaldan yapılan her türlü işlem tehlikelidir. 3D Secure bu tehlikeyi en aza indirgemek için geliştirilmiş bir sistemdir. Kullanıcı internetten alışveriş yapmak için bankasından 3D Secure şifresini isteyebilir ve bu şifre ile alışveriş yapabilir. Normalde yazılımcı tarafından direk XML kullanılarak Api servera post edilen alışveriş formu kredi kartı şifresi istemeksizin gerekli olan 16 haneli kredi kart no, son kullanma tarihi ve Cv2 ( güvenlik ) numarası alınarak alışverişi tamamlar. Bu demek olur ki Kredi kartınız çalışndığında siz kredi kartınızı kapattırana kadar bankanıza bahse konu hırsız kartınızı limon gibi sömürür. 3D Secure ile alışveriş şu şekilde olur. haneli kredi kart no, son kullanma tarihi ve Cv2 ( güvenlik ) numarası girdirilerek form Bankanın vermiş olduğu 3D Secure linkine post edilir. Burada kullanıcının 3D Secure şifresi alınır ve girdiği kart bilgileri doğrulanır. Buradanda otomatik olarak sistem sayfayı XML kodlarınızın bulunduğu sayfaya yönlendirir. Burada da ödeme alınır ve alışveriş tamamlanır. Bu sistem her bankada vardır. Fakat bu sistemi zorunlu tutan tek banka Denizbanktır. Diğer bankalar zorunlu tutmamıştır. Fakat yazılımcı arkadaşlara tavsiyem sanal pos kurarken bu sistemi kullanmalarını şiddetle tavsiye ederim. Hem kendi başları ağrımaz hem alışveriş yapan kişi hemde firma yetkililerinin içi ferah olur. Sonuçta tertemiz bir iş çıkar ortaya.
Örnek Uygulama
Direk XML aracılığı ile Api server’a gönderme… ( Sonraki makalemde 3D ile… )

Yukarıdaki gibi bir form işinizi görecektir. Gerekli bilgiler alınır ve Direk linki XML şablonunun bulunduğu sayfa olacaktır. Buradan yukarıdaki formda gördüğünüz haricinde hidden parametre olarak post edilen bilgiler şunlardır.
<%
dim rnd
okUrl = onaylandi.asp ‘ sayfa adı örnektir. İşlem onaylanmışsa yönlenecek sayfayı buraya yazınız.
failUrl = onaylanmadi.asp ‘ sayfa adı örnektir. İşlem onaylanmamışsa yönlenecek sayfayı buraya yazınız.
clientid = bankadan firmaya verilen kullanıcı id
amount = satılan ürünün fiyatı buraya
storeType = gönderim tipi 3d ise değer “3d” değilse “” olacak.
storeKey = banka tarafından verilen üye işyeri anahtarı buraya yazılır
oid = "" ‘ sipariş numarası varsa buraya yazılır
rnd = now() ‘ kriptolanmış bir url yaratacağız. Sürekli değişen değer olarak tarih atayabiliriz.
hashstr = clientId & oid & amount & okUrl & failUrl & rnd & storekey ‘ kriptolu url hazır.
hash = b64_sha1(hashstr)
‘ bu url’i kriptolayan sayfa da banka tarafından verilir. Siz bunu formun bulunduğu sayfaya include etmelisiniz.
%>
<input type="hidden" name="clientid" id="clientid" value="<%=clientid%>" />
<input type="hidden" name="amount" id="amount" value="<%=amount%>" />
<input type="hidden" name="okUrl" id="okUrl" value="<%=okUrl%>" />
<input type="hidden" name="failUrl" id="failUrl" value="<%=failUrl%>" />
<input type="hidden" name="storetype" id="storetype" value="<%=storeType%>" />
<input type="hidden" name="rnd" id="rnd" value="<%=rnd%>" />
<input type="hidden" name="hash" id="hash" value="<%=hash%>" />
<input type="hidden" name="lang" value="tr">
Yukarıda parametreler gönderiliyor.
İşte XML şablonu aşağıdadır.
Set SrvHTTPS = Server.CreateObject("MSXML2.ServerXMLHTTP")
Set XMLSend = Server.CreateObject("MSXML2.DOMDocument")
Set XMLReceive = Server.CreateObject("MSXML2.DOMDocument")
Set sendroot = XMLSend.createElement("CC5Request")
Set e1 = XMLSend.createElement("Name")
e1.text= kullanıcı id ‘ bankadan verilir
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Password")
e1.text= kullanıcı şifre’ bankadan verilir
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("ClientId")
e1.text = mağaza no ‘ bankadan verilir
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Mode")
e1.text= "P" ‘ T ise test P ise PreAuth yani satıştır.
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("OrderId")
e1.text= ""
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Type")
e1.text= "PreAuth"
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Number")
e1.text= kredi kart no
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Expires")
e1.text= son kullanım tarihi
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Cvv2Val")
e1.text= cv2 numarası
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Total")
e1.text= Tutarı
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Currency")
e1.text= Para birimi TL ise “949” olacaktır.
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("UserId")
e1.text= "" //Kullanici id
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("email")
e1.text= EMail adresi
sendroot.appendChild(e1)
Set sendbillto = XMLSend.createElement("BillTo")
Set b1 = XMLSend.createElement("Name")
b1.text= Kartın sahibinin ad soyad bilgileri
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("Street1")
b1.text= adres bilgisi
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("Street2")
b1.text= ""
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("Street3")
b1.text= ""
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("City")
b1.text= ""
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("PostalCode")
b1.text= ""
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("TelVoice")
b1.text= telefon bilgisi
sendbillto.appendChild(b1)
sendroot.appendChild(sendbillto)
XMLSend.documentElement=sendroot
XMLSend.async = false
XMLSend.resolveExternals = false
SrvHTTPS.open "POST"," https://cc5test.est.com.tr/servlet/cc5ApiServer ",false ‘ test linkidir. Gerçeğini banka verir.
SrvHTTPS.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
SrvHTTPS.send "DATA="+XMLSend.xml
Set XMLReceive = SrvHTTPS.responseXML
’Bu bolumde response degerine bakilacak
res = XMLReceive.selectSingleNode("/CC5Response/Response").text
if res ="Approved" then
Response.Write ("Satış İşlemi Onaylanmıştır"+"<BR>")
elseif res ="Declined" then
Response.Write ("Satış İşleminiz Onaylanmamıştır"+"<BR>")
Response.Write ("Errmsg: "+XMLReceive.selectSingleNode("/CC5Response/ErrMsg").text+"<BR>")
elseif res ="Error" then
Response.Write ("Satış İşleminizde Hata Oluştu !"+"<BR>")
Response.Write ("Errmsg: "+XMLReceive.selectSingleNode("/CC5Response/ErrMsg").text+"<BR>")
end if
İşte alışveriş işlemi bundan ibaret. Anlamdığınız kısımları konu altından sorabilirsiniz. Elimden geldiğince cevaplamaya çalışacağım.
Selametle…
| Ad Soyad | : | Ahmet Özkan |
| Yorum | : | Merhaba Makalelerinizi ilgi ile takip ediyorum ve çok beğeniyorum. Bu konuda çok önemli bir konu ama makale biraz daha geliştirilmiş olabilir mi? yani biraz daha görsel desek. çok güzel olur aslında :) iyi günler |
| Ad Soyad | : | Erkan Keskin |
| Yorum | : | Kodlar zaten farklı tıpa tıp aynısı değil sadece amaç aynı. |
| Ad Soyad | : | Mert Ağcaoğlu |
| Yorum | : | Süper olmuş. Tşk. Fakat niye bir programcı herbankaya uyumlu bir kod yazmıyor?yada yazamıyor. tşk |
| Ad Soyad | : | Mustafa BAŞAR |
| Yorum | : | Teşekkürler Erkan abi. Benimde az çok merak ettğim bir konuydu. Sağolasın :) |