ASP ve Sanal Pos Uygulaması » Anthony Burak Dursun

ASP ve Sanal Pos Uygulaması

Bu yazı Tasarım ve Kodlama kategorisine 26.11.2010 Tarihinde Eklendi, 1193 Kez Okundu.

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.

 

Çılgın Dükkan | İlginç Hediyelik Ürünler

Etiketler:asp, sanal pos, sanalpos, asp ile sanal pos, sanal pos uygulamasi, sanal pos ornek kodlar, sanal pos kodlari, eticaret, eticaret sanal pos, sanal pos api, api, asp ile eticaret, sanal pos uygulama kodlari, sanal pos entegrasyonu,