
ASP ile E-Ticaret sistemi yazan bir çok kişinin en büyük sıkıntısı Sanal Pos entegrasyonudur. Bir de Sanal Pos alabilmek için izlenmesi gereken adımlar. Bugün ilk olarak Sanal Pos uygulaması ve örnek kod uygulamasını vereceğim.
Bir çok defa kişiye özel E-Ticaret sistemi hazırladığım için artık sanal pos entegrasyonu işini kolaylaştırmam gerektiğini düşünmüştüm ve buna istinaden bir gün oturup sadece bilgileri post ederek işleyebileceğim bir asp uygulaması hazırladım.
İlk Adım, HTTPS
Herşeyden önce banka sizden bu sayfaya erişimin HTTPS üzerinden, yani SSL sertifikalı iletişim kuralı üzerinden olmasını isteyecektir. Eğer ziyaretçiniz hasbel kader de olsa HTTPS üzerinde bulunmuyorsa, hem banka tarafında sorun çıkartabilir, hem müşterinizde ki itibarınızı zedeleyebilir hemde en önemlisi büyük bir güvenlik sorunuyla başbaşa kalabilirsiniz.
Bu yüzden aşağıda ki örnek kodu HTTPS içerisinde olmasını istediğiniz sayfanızın üst kısmına include edin veya ekleyin.
inc.ssl.asp
<%
If request.servervariables("SERVER_PORT") = 80 then
response.redirect "https://" & request.servervariables("SERVER_NAME") & request.servervariables("URL")
End If
%>
POS Application Gücü Adına !
İkinci olarak kredi kartı bilgileri, Fatura bilgileri, Tutar ve diğer belirttiğim bilgileri post edeceğiniz işlem sayfamıza gelelim. Bu alanda bir SUB oluşturdum. Yine bu SUB içinde kullanmamız gerekebilecek ufak bir fonksiyon var. Bu fonksiyon ile banka iletişiminiz arasında sorun olursa, banka tarafından döndürülen hata kodlarının açıklamaları yer almaktadır.
Aşağıda ki kodlamayı POST ettiğiniz sayfa içerisine ekleyebilir, kütüphanenize include edebilirsiniz. Daha sonra tek yapmanız gereken CALL methodunu kullanarak değişkenleri Application´a göndermek.
inc.pos.asp
<%
´ ########################################################
´ Anthony Burak DURSUN
´ MAIL: badursun@gmail.com
´ WEB : www.burakdursun.com
´ ########################################################
´ ################################
´ SANALPOS BILGILERI
´ ################################
str_name = "" ´ Kullanıcı Adı
str_password = "" ´ Kullanıcı Şifresi
str_uyeisyeri = "" ´ Üye iş Yeri Numarası
str_mode = "P" ´ Sabit Kalacak
str_type = "Auth" ´ İşlem Tipi
´ ################################
´ HATA RAPORLAMA SQL (Gerek Duyulursa Kullanılabilir)
´ ################################
Function HataKontrol(HATA,IP,TARIH)
Conn.Execute("INSERT INTO tbl_hata_ayiklama(HATA,IP,TARIH) VALUES(´"& HATA &"´,´"& IP &"´,´"& TARIH &"´)")
End Function
´ ################################
´ BANKA XML HATA DONEN KODLAR
´ ################################
Function HataBul(Banka,Kod)
If Banka = "HalkBank" Then
If Kod = "0" Then
HataBul = "Onaylandı"
ElseIf Kod = "2" Then
HataBul = "Bankanızı Arayın."
ElseIf Kod = "4" Then
HataBul = "Geçersiz İşlem"
ElseIf Kod = "5" Then
HataBul = "İşlem Yapılamıyor"
ElseIf Kod = "8" Then
HataBul = "Banka Yanıt Vermedi"
ElseIf Kod = "41" Then
HataBul = "Kayıp Kart"
ElseIf Kod = "51" Then
HataBul = "Limitiniz Yetersiz"
ElseIf Kod = "96" Then
HataBul = "Sistem Hatası"
Else
HataBul = "Bilinmeyen Hata"
End If
End If
End Function
´ ################################
´ SANAL POS APPLICATON
´ ################################
Sub SanalPosHalkBank(str_faturaadi,str_faturaadresi,str_sehir,str_postakodu,str_telefon,tutar,str_ordernumbers)
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= str_name
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Password")
e1.text= str_password
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("ClientId")
e1.text= str_uyeisyeri
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Mode")
e1.text= str_mode
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("OrderId")
e1.text= str_orderid
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Type")
e1.text= str_type
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Number")
e1.text= str_ccno
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Expires")
e1.text= str_ayyil
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Cvv2Val")
e1.text= str_cv2
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Total")
e1.text= str_odeme
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("Currency")
e1.text= str_ytl
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("UserId")
e1.text= str_userId
sendroot.appendChild(e1)
Set e1 = XMLSend.createElement("email")
e1.text= str_email
sendroot.appendChild(e1)
Set sendbillto = XMLSend.createElement("BillTo")
Set b1 = XMLSend.createElement("Name")
b1.text= ""& str_faturaadi &" "
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("Street1")
b1.text= ""& str_faturaadresi &" "
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= ""& str_sehir &" "
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("PostalCode")
b1.text= ""& str_postakodu &" "
sendbillto.appendChild(b1)
Set b1 = XMLSend.createElement("TelVoice")
b1.text= ""& str_telefon &" "
sendbillto.appendChild(b1)
sendroot.appendChild(sendbillto)
Set sendshipto = XMLSend.createElement("ShipTo")
Set s1 = XMLSend.createElement("Name")
s1.text= ""& str_faturaadi &" "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("Street1")
s1.text= ""& str_faturaadresi &" "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("Street2")
s1.text= " "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("Street3")
s1.text= " "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("City")
s1.text= ""& str_sehir &" "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("PostalCode")
s1.text= ""& str_postakodu &" "
sendshipto.appendChild(s1)
Set s1 = XMLSend.createElement("TelVoice")
s1.text= ""& str_telefon &" "
sendshipto.appendChild(s1)
sendroot.appendChild(sendshipto)
XMLSend.documentElement=sendroot
XMLSend.async = false
XMLSend.resolveExternals = false
SrvHTTPS.open "POST","https://vpos.est.com.tr/servlet/cc5ApiServer",false
´SrvHTTPS.open "POST","https://sanalpos.halkbank.com.tr/servlet/cc5ApiServer",false
SrvHTTPS.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
SrvHTTPS.send "DATA=<?xml version=´1.0´ encoding=´ISO-8859-9´?>"+XMLSend.xml
´Response.Write "DATA=<?xml version=´1.0´ encoding=´ISO-8859-9´?>"+XMLSend.xml
´Response.End()
Set XMLReceive = SrvHTTPS.responseXML
´Bu bolumde response degerine bakilacak
res = XMLReceive.selectSingleNode("/CC5Response/Response").text
str_sonuc = ""
If res ="Approved" then
str_sonuc = str_sonuc & "İşlem Onaylandı"+"<BR>"
str_sonuc = str_sonuc & "OrderId: "+XMLReceive.selectSingleNode("/CC5Response/OrderId").text+"<BR>"
str_sonuc = str_sonuc & "GroupId: "+XMLReceive.selectSingleNode("/CC5Response/GroupId").text+"<BR>"
str_sonuc = str_sonuc & "AuthCode: "+XMLReceive.selectSingleNode("/CC5Response/AuthCode").text+"<BR>"
str_sonuc = str_sonuc & "HostRefNum: "+XMLReceive.selectSingleNode("/CC5Response/HostRefNum").text+"<BR>"
str_sonuc = str_sonuc & "ProcReturnCode: "+XMLReceive.selectSingleNode("/CC5Response/ProcReturnCode").text+"<BR>"
str_sonuc = str_sonuc & "TransId: "+XMLReceive.selectSingleNode("/CC5Response/TransId").text+"<BR>"
Session("POSONAY") = True
Response.Write "Kredi Kartınızdan <strong>"& tutar &" TL</strong> Çekilmiştir.<br /><small><strong>İşlem Numarası:</strong> "& str_ordernumbers &"<br /><strong>Ödeme Yapan: </strong>"& kart_sahibi &"<br /><br /></small>"
Elseif res ="Declined" then
str_sonuc = str_sonuc & "İşlem Onaylanmadı"+"<BR>"
str_sonuc = str_sonuc & "Errmsg: "+XMLReceive.selectSingleNode("/CC5Response/ErrMsg").text+"<BR>"
str_sonuc = str_sonuc & "OrderId: "+XMLReceive.selectSingleNode("/CC5Response/OrderId").text+"<BR>"
str_sonuc = str_sonuc & "GroupId: "+XMLReceive.selectSingleNode("/CC5Response/GroupId").text+"<BR>"
str_sonuc = str_sonuc & "AuthCode: "+XMLReceive.selectSingleNode("/CC5Response/AuthCode").text+"<BR>"
str_sonuc = str_sonuc & "HostRefNum: "+XMLReceive.selectSingleNode("/CC5Response/HostRefNum").text+"<BR>"
str_sonuc = str_sonuc & "ProcReturnCode: "+XMLReceive.selectSingleNode("/CC5Response/ProcReturnCode").text+"<BR>"
str_sonuc = str_sonuc & "TransId: "+XMLReceive.selectSingleNode("/CC5Response/TransId").text+"<BR>"
Session("POSONAY") = False
Response.Write "Ödemeniz Reddedildi !<br><small><strong>Banka Cevabı:</strong> "& HataBul("HalkBank",XMLReceive.selectSingleNode("/CC5Response/ProcReturnCode").text) &"</small>"
Elseif res ="Error" then
str_sonuc = str_sonuc & "İşlemde hata olulştu işlem başarızız"+"<BR>"
str_sonuc = str_sonuc & "Errmsg: "+XMLReceive.selectSingleNode("/CC5Response/ErrMsg").text+"<BR>"
str_sonuc = str_sonuc & "OrderId: "+XMLReceive.selectSingleNode("/CC5Response/OrderId").text+"<BR>"
str_sonuc = str_sonuc & "GroupId: "+XMLReceive.selectSingleNode("/CC5Response/GroupId").text+"<BR>"
str_sonuc = str_sonuc & "AuthCode: "+XMLReceive.selectSingleNode("/CC5Response/AuthCode").text+"<BR>"
str_sonuc = str_sonuc & "HostRefNum: "+XMLReceive.selectSingleNode("/CC5Response/HostRefNum").text+"<BR>"
str_sonuc = str_sonuc & "ProcReturnCode: "+XMLReceive.selectSingleNode("/CC5Response/ProcReturnCode").text+"<BR>"
str_sonuc = str_sonuc & "TransId: "+XMLReceive.selectSingleNode("/CC5Response/TransId").text+"<BR>"
Session("POSONAY") = False
Response.Write "İşlem yapılırıken bir hata oluştu. Lütfen tekrar deneyin!<br><small><strong>Banka Cevabı:</strong> "& HataBul("HalkBank",XMLReceive.selectSingleNode("/CC5Response/ProcReturnCode").text) &"</small>"
End if
End Sub
%>
Şimdi biraz para kazanalım
Ödemeyi post ettiğiniz sayfa dışında bir alana include ettiğinizi var sayarak odemesonuc.asp sayfasını aşağıda ki gibi hazırlıyorum. Call argümanı içinde ki değişkenleri Request.Form("") methodu ile almayı unutmayın.
<!--#include file="inc.pos.asp"-->
<%
´ ################################
´ HATA RAPORLAMA SQL
´ ################################
Call SanalPosHalkBank(str_faturaadi,str_faturaadresi,str_sehir,str_postakodu,str_telefon,tutar,str_ordernumbers)
´ Bu işlem sonucunda Session("POSONAY") - True olarak gelirse onay verilmiştir...
%>
Umarım bu küçük uygulama, Sanal Pos işlemleriniz için yeterli bilgiyi içeriyordur. Aşağıda bu uygulamayı download edebileceğiniz bir link yer almaktadır.
Kolay Gelsin.

