Showing posts with label CITRUS Payment Gateway. Show all posts
Showing posts with label CITRUS Payment Gateway. Show all posts

Wednesday, April 9, 2014

C# CITRUS Payment Gateway Implementation

  1. Payment Request Page (ASPX)

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">

        <script src="../../RESOURCES/js/accordion/jquery.min.js" type="text/javascript"></script>
        <title>Redirecting...</title>
         <script type="text/javascript">

             $(document).ready(function () {
                 $('#FName').val($('#hdnFname').val());
                 $('#LName').val($('#hdnLname').val());
                 $('#Email').val($('#hdnEmail').val());
                 $('#Address').val($('#hdnAddress').val());
                 $('#City').val($('#hdnCity').val());
                 $('#AddressZip').val($('#hdnZip').val());
                 $('#State').val($('#hdnState').val());
                 $('#Mobile').val($('#hdnMobile').val());
                 $('#returnUrl').val($('#hdnReturnUrl').val());
                 //alert($('#FName').val());
                 merchantURLPart = $('#hdnPaymentURL').val();
                 $('#btnSubmit').click();
             });

             var merchantURLPart = '';
         //"https://sandbox.citruspay.com/CLIENTID"; -- CLIENTID WILL BE PROVIDED BY CITRUS
            
         var vanityURLPart = "";
             var reqObj = null;
             function generateHMAC() {
                 if (window.XMLHttpRequest) {
                     reqObj = new XMLHttpRequest();
                 } else {
                     reqObj = new ActiveXObject("Microsoft.XMLHTTP");
                 }
                 if (merchantURLPart.lastIndexOf("/") != -1) {
                     vanityURLPart = merchantURLPart.substring(merchantURLPart.lastIndexOf("/") + 1)
                 }
                 var orderAmount = document.getElementById("orderAmount").value;
                 var merchantTxnId = document.getElementById("merchantTxnId").value;
                 var currency = document.getElementById("currency").value;
                 var param = "merchantId=" + vanityURLPart + "&orderAmount=" + orderAmount
                    + "&merchantTxnId=" + merchantTxnId + "&currency=" + currency;
                 reqObj.onreadystatechange = process;
                 reqObj.open("POST", "hmac_signature.aspx?" + param, false);
                 reqObj.send(null);
             }
             function process() {
                 if (reqObj.readyState == 4) {
                     document.getElementById("secSignature").value = reqObj.responseText;
                     submitForm();
                 }
             }

             function submitForm() {
                 document.paymentForm.action = merchantURLPart;
                 document.paymentForm.method = 'POST';
                 document.paymentForm.submit();
             }
           
        </script>
    </head>
    <body>
    <form name="paymentForm" runat="server" id="paymentForm">
    <div>
    <div>
    <div style="text-align:center;">
    <br />
    <center>
    <b>Please wait... Redirecting...</b>
    </center>                   
    </div>

    <ul style="display:none;">
        <li class="clearfix">
        <label width="125px;">
            Transaction Number:</label>
        <input type="text" id="merchantTxnId" runat="server" name="merchantTxnId" value="" />
        </li>
        <li class="clearfix">
        <label width="125px;">
            Order Amount:</label>
        <input type="text" id="orderAmount"  runat="server" name="orderAmount" value="" />
        </li>
        <li class="clearfix">
        <label width="125px;">
            Currency:</label>
        <input type="text" id="currency"  name="currency" value="INR" />
        </li>
        <li class="clearfix">
        <label width="125px;">
            First Name :</label>
        <input type="text" id="FName" name="firstName" value="" />
        </li>
        <li class="clearfix">
        <label width="125px;">
            Last Name :</label>
        <input type="text" id="LName" name="lastName" value="" />
        </li>
        <li class="clearfix">
        <label width="125px;">
            Email :</label>
        <input type="text" id="Email" name="email" value="" />
        </li>
        <p>
        Address Details</p>
        <li class="clearfix">
        <label width="125px;">
            Address :</label>
        <input type="text" id="Address" name="addressStreet1" value="" />
        </p>                               
        <li class="clearfix">
            <label width="125px;">
            City :</label>
            <input type="text" id="City" name="addressCity" value="" />
        </li>
        <li class="clearfix">
            <label width="125px;">
            Zip Code :</label>
            <input type="text" id="AddressZip" name="addressZip" value="" />
        </li>
        <li class="clearfix">
            <label width="125px;">
            State :</label>
            <input type="text" id="State"  name="addressState" value="" />
        </li>
                       
        <!-- <input type="hidden" class="text" name="addressCountry" value="INDIA" /> -->
                       
        <li class="clearfix">
            <label width="125px;">
            Mobile No:</label>
            <input type="text" id="Mobile"  name="phoneNumber" value="" />
        </li>
       
        <input type="hidden" name="paymentMode" value="NET_BANKING" />
        <input type="hidden" name="issuerCode" value="ISS008" />                               
          
        <%--<input type="hidden" id="ReturnUrl" name="returnUrl" runat="server" value="http://localhost:1463/sample-site/TestMotoResponse.aspx" />--%>
       
        <input type="text" id="returnUrl" name="returnUrl" value="" />
       
        <input type="hidden" id="secSignature" name="secSignature" value="" />
        <input type="hidden" name="reqtime" id="reqtime" value="<%=System.DateTime.Now.Ticks / 10000 %>" />
        <input id="btnSubmit" type="button" value="Make Payment" onclick="JavaScript:generateHMAC();"></input>
       
       
        <input type="hidden" id="hdnFname" runat="server"/>                               
        <input type="hidden" id="hdnLname" runat="server"/>                               
        <input type="hidden" id="hdnEmail" runat="server"/>                               
        <input type="hidden" id="hdnAddress" runat="server"/>                               
        <input type="hidden" id="hdnCity" runat="server"/>                               
        <input type="hidden" id="hdnZip" runat="server"/>                               
        <input type="hidden" id="hdnState" runat="server"/>                               
        <input type="hidden" id="hdnMobile" runat="server"/>    
        <input type="hidden" id="hdnReturnUrl" runat="server"/>                     
        <input type="hidden" id="hdnPaymentURL" value="123" runat="server"/>                     
       
        </ul>
        </div>
    </div>   
    </form>
    </body>
    </html>
  2. Payment Resquest Page (ASPX.CS)

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {  
            int pos = Request.Url.AbsoluteUri.LastIndexOf('/');
            string strURL = Request.Url.AbsoluteUri.Substring(0, pos + 1) + "PaymentResponseCITRUS.aspx";

            merchantTxnId.Value = YOUR TRANSACTION ID;
            orderAmount.Value = PAYMENT AMOUNT;
            hdnFname.Value = FIRST NAME OF CLIENT;
            hdnLname.Value = LAST NAME OF CLIENT;
            hdnEmail.Value = EMAIL OF CLIENT;
            hdnAddress.Value = ADDRESS OF CLIENT;
            hdnCity.Value = CITY OF CLIENT;
            hdnZip.Value = ZIPCODE OF CLIENT;
            hdnState.Value = STATE OF CLIENT;
            hdnMobile.Value = MOBILE OF CLIENT;
            hdnReturnUrl.Value = strURL; // RESPONSE URL

            //Payment URL
            hdnPaymentURL.Value = https://sandbox.citruspay.com/CLIENTID;
           
        }
        catch (Exception ex)
        {
           // LOG THE ERROR    
        }
    }
  3. hmac_signature.aspx

    <%@ Page Language="C#" AutoEventWireup="true" %>

    <%
    string key = CITRUS SECRET KEY (PROVIDED BY CITRUS)
    string merchantId = Request["merchantId"];
    string orderAmount = Request["orderAmount"];
    string merchantTxnId = Request["merchantTxnId"];
    string currency = Request["currency"];

    string data = merchantId + orderAmount + merchantTxnId + currency;
    try {
    %>
    <%= CitrusPay.MerchantKit.Infrastructure.CitrusPaySignatureRequestor.GenerateHMAC(data, key)%>
    <%
    }catch(Exception e){
           
    }
    %>
  4. Payment Response Page

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            String key = CITRUS SECRET KEY (PROVIDED BY CITRUS)
            String data = "";
            String txnId = Request["TxId"];
            String txnStatus = Request["TxStatus"];
            String amount = Request["amount"];
            String pgTxnId = Request["pgTxnNo"];
            String issuerRefNo = Request["issuerRefNo"];
            String authIdCode = Request["authIdCode"];
            String firstName = Request["firstName"];
            String lastName = Request["lastName"];
            String pgRespCode = Request["pgRespCode"];
            String zipCode = Request["addressZip"];
            String reqSignature = Request["signature"];

            String signature = "";
            bool flag = true;
            if (txnId != null)
            {
            data += txnId;
            }
            if (txnStatus != null)
            {
            data += txnStatus;
            }
            if (amount != null)
            {
            data += amount;
            }
            if (pgTxnId != null)
            {
            data += pgTxnId;
            }
            if (issuerRefNo != null)
            {
            data += issuerRefNo;
            }
            if (authIdCode != null)
            {
            data += authIdCode;
            }
            if (firstName != null)
            {
            data += firstName;
            }
            if (lastName != null)
            {
            data += lastName;
            }
            if (pgRespCode != null)
            {
            data += pgRespCode;
            }
            if (zipCode != null)
            {
            data += zipCode;
            }
            signature = CitrusPay.MerchantKit.Infrastructure.CitrusPaySignatureRequestor.GenerateHMAC(data, key);   

            if (reqSignature != null && !signature.Equals(reqSignature))
            {
            flag = false;
            }
            if (flag)
            {
            try
            {
                //Check the Status
                if (txnStatus.Trim().ToUpper() == "SUCCESS")
                {
                // UPDATE THE TRANSACTION STATUS IN DB
                //
                // CODE FOR UPDATE STATUS
                //

                // REDIRECT TO SUCCESS PAGE OR SHOW THE PAYMENT RESPONSE ON SAME PAGE
                }
                else
                {
                // PAYMENT IS NOT SUCCESSFUL
                // REDIRECT TO ERROR PAGE
                }
            }
            catch (Exception ex)
            {
                // ERROR OCCURED WHILE PAYMENT
                // REDIRECT TO ERROR PAGE
            }
            }
            else
            {
            // SIGNATURE VALIDATION IS WRONG
            // REDIRECT TO ERROR PAGE    
            }

        }
        catch (Exception ex)
        {
            // ERROR OCCURED WHILE PAYMENT
            // REDIRECT TO ERROR PAGE   
        }
    }