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   
        }
    }

5 comments:

  1. Showing Invalid signature

    ReplyDelete
  2. This code is not working in my ASP.net. please help

    ReplyDelete
  3. You should see how my pal Wesley Virgin's biography starts with this SHOCKING and controversial VIDEO.

    You see, Wesley was in the army-and soon after leaving-he discovered hidden, "self mind control" secrets that the CIA and others used to get everything they want.

    These are the exact same tactics many celebrities (notably those who "come out of nothing") and top business people used to become rich and famous.

    You've heard that you utilize only 10% of your brain.

    That's really because most of your brainpower is UNCONSCIOUS.

    Perhaps that expression has even taken place INSIDE OF YOUR very own head... as it did in my good friend Wesley Virgin's head seven years back, while riding a non-registered, beat-up garbage bucket of a car without a license and $3 on his banking card.

    "I'm so fed up with living check to check! Why can't I become successful?"

    You've been a part of those those types of thoughts, ain't it right?

    Your success story is waiting to start. All you have to do is in YOURSELF.

    CLICK HERE TO LEARN WESLEY'S SECRETS

    ReplyDelete