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>

1) 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    
    }
}
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){
       
}
%>
2) 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   
    }
}


No comments:

Post a Comment