- Payment Request Page
 protected void Page_Load(object sender, EventArgs e)
 {
 #region UMI Method Implementation
 string TranTrackid = string.Empty;
 string TranAmount = string.Empty;
 TranTrackid = YOUR TRANSACTION ID;
 TranAmount = PAYMENT AMOUNT;
 string ReqTranportalId = string.Empty;
 string ReqTranportalPassword = string.Empty;
 ReqTranportalId = "id=" + TRANSPORTAL ID PROVIDED BY BANK + "&";
 ReqTranportalPassword = "password=" + TRANSPORTAL PASSWORD PROVIDED BY BANK + "&";
 string ReqAction = "action=" + "1" + "&";
 string ReqLangid = "langid=" + "USA" + "&";
 string ReqCurrency = "currencycode=" + "356" + "&";
 //356 FOR INR
 string ReqAmount = "amt=" + TranAmount + "&";
 int pos = Request.Url.AbsoluteUri.LastIndexOf('/');
 string strURL = Request.Url.AbsoluteUri.Substring(0, pos + 1) + "PaymentResponseHDFC.aspx";
 //RESPONSE PAGE URL
 string strErrorURL = Request.Url.AbsoluteUri.Substring(0, pos + 1) + "PaymentError.aspx";
 //ERROR PAGE URL
 string ReqResponseUrl = "responseURL=" + strURL + "&";
 string ReqErrorUrl = "errorURL=" + strErrorURL + "&";
 string ReqTrackId = "trackid=" + TranTrackid + "&";
 string HDFCPayURL = string.Empty;
 HDFCPayURL = SECUREPG; //SECUREPGTEST for UAT and SECUREPG for PRODUCTION
 string ReqUdf1 = string.Empty;
 string ReqUdf2 = string.Empty;
 string ReqUdf3 = string.Empty;
 string ReqUdf4 = string.Empty;
 string ReqUdf5 = string.Empty;
 ReqUdf1 = "udf1=" + FirstName + "&"; // UDF1 values
 ReqUdf2 = "udf2=" + PersonalEmailID + "&"; // UDF2 values
 ReqUdf3 = "udf3=" + MobileNumber + "&"; // UDF3 values
 ReqUdf4 = "udf4=" + City +"&"; // UDF4 values
 ReqUdf5 = "udf5=" + UserIdentifier + "&"; // UDF5 values
 try
 {
 string TranResponse = "";//Declaration of variable
 string TranRequest = ReqTranportalId + ReqTranportalPassword + ReqAction + ReqLangid + ReqCurrency + ReqAmount + ReqResponseUrl + ReqErrorUrl + ReqTrackId + ReqUdf1 + ReqUdf2 + ReqUdf3 + ReqUdf4 + ReqUdf5;
 string TranUrl = "https://" + HDFCPayURL + ".fssnet.co.in/pgway/servlet/PaymentInitHTTPServlet";
 System.IO.StreamWriter myWriter = null;
 // it will open a http connection with provided url
 System.Net.HttpWebRequest objRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(TranUrl);//send data using objxmlhttp object
 objRequest.Method = "POST";
 objRequest.ContentLength = TranRequest.Length;
 objRequest.ContentType = "application/x-www-form-urlencoded";//to set content type
 myWriter = new System.IO.StreamWriter(objRequest.GetRequestStream());
 myWriter.Write(TranRequest);//send data
 myWriter.Close();//closed the myWriter object
 System.Net.HttpWebResponse objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse();
 //receive the responce from objxmlhttp object
 using (System.IO.StreamReader sr = new System.IO.StreamReader(objResponse.GetResponseStream()))
 {
 TranResponse = sr.ReadToEnd();
 string[] ErrorCheck = GetStringInBetween(TranResponse, "!", "!-", false, false);//This line will find Error Keyword in TranResponse
 if (ErrorCheck[0] != "ERROR")//This block will check for Error in TranResponce
 {
 // Merchant MUST map (update) the Payment ID received with the merchant Track Id in his database at this place.
 string payid = TranResponse.Substring(0, TranResponse.IndexOf(":http"));
 string payURL = TranResponse.Substring(TranResponse.IndexOf("http"));
 // here redirecting the customer browser from ME site to Payment Gateway Page with the Payment ID
 //UPDATE THE payid(PAYMENT ID) IN DB
 //
 //CODE FOR UPDATE PAYMENT ID
 //
 //REDIRECT ON payURL(PAYMENT GATEWAY URL)
 string TranRedirect = payURL + "?PaymentID=" + payid;
 Response.Redirect(TranRedirect);
 }
 else
 {
 string TranErrorUrl = strErrorURL + "?Message=Transaction Failed&ResTrackId=" + TranTrackid + "&ResAmount=" + TranAmount + "&ResError=" + TranResponse;
 
 //REDIRECT TO ERROR PAGE
 Response.Redirect(TranErrorUrl);
 }
 }
 }
 catch (Exception ex)// any excpetion occurred for above code exception throws here
 {
 //REDIRECT ON ERROR PAGE IN CASE OF ERROR
 }
 }
 #endregion
 }
 public static string[] GetStringInBetween(string strSource, string strBegin, string strEnd, bool includeBegin, bool includeEnd)
 {
 string[] result = { "", "" };
 int iIndexOfBegin = strSource.IndexOf(strBegin);
 if (iIndexOfBegin != -1)
 {
 // include the Begin string if desired
 if (includeBegin)
 {
 iIndexOfBegin -= strBegin.Length;
 }
 strSource = strSource.Substring(iIndexOfBegin + strBegin.Length);
 int iEnd = strSource.IndexOf(strEnd);
 if (iEnd != -1)
 { // include the End string if desired
 if (includeEnd)
 { iEnd += strEnd.Length; }
 result[0] = strSource.Substring(0, iEnd);
 // advance beyond this segment
 if (iEnd + strEnd.Length < strSource.Length)
 { result[1] = strSource.Substring(iEnd + strEnd.Length); }
 }
 }
 else
 // stay where we are
 { result[1] = strSource; }
 return result;
 }//String function end
- Payment Response Page
 protected void Page_Load(object sender, EventArgs e)
 {
 #region UMI Method Implementation
 string strResponceIP, TranInqResponse, ResPaymentId, ResResult, ResErrorText, ResPosdate, ResTranId, ResAuth, ResAVR, ResAmount, ResErrorNo, ResTrackID, ResRef, Resudf1, Resudf2, Resudf3, Resudf4, Resudf5, EMI;
 strResponceIP = HttpContext.Current.Request.UserHostAddress;
 int pos = Request.Url.AbsoluteUri.LastIndexOf('/');
 VALIDATE THE IP ADDRESS
 if ( ( (HOSTED ON PRODUCTION) && strResponceIP != "221.134.101.187" && strResponceIP != "221.134.101.175" && strResponceIP != "221.134.101.166" && strResponceIP.Trim() != "10.1.40.2")
 || ( (HOSTED ON UAT) && strResponceIP != "221.134.101.174" && strResponceIP != "221.134.101.169" && strResponceIP.Trim() != "10.1.40.2"))
 {
 //REDIRECT TO ERROR PAGE IF IP DOES NOT MATCH
 }
 else
 {
 // IP MATCHED
 
 ResErrorText = Request["ErrorText"]; //Error Text/message
 ResPaymentId = Request["paymentid"]; //Payment Id
 ResTrackID = Request["trackid"]; //Merchant Track ID
 ResErrorNo = Request["Error"]; //Error Number
 //To collect transaction result
 ResResult = Request["result"]; //Transaction Result
 ResPosdate = Request["postdate"]; //Postdate
 //To collect Payment Gateway Transaction ID, this value will be used in dual verification request
 ResTranId = Request["tranid"]; //Transaction ID
 ResAuth = Request["auth"]; //Auth Code
 ResAVR = Request["avr"]; //TRANSACTION avr
 ResRef = Request["ref"]; //Reference Number also called Seq Number
 //To collect amount from response
 ResAmount = Request["amt"]; //Transaction Amount
 Resudf1 = Request["udf1"]; //UDF1
 Resudf2 = Request["udf2"]; //UDF2
 Resudf3 = Request["udf3"]; //UDF3
 Resudf4 = Request["udf4"]; //UDF4
 Resudf5 = Request["udf5"]; //UDF5
 try
 {
 // LOG THE RESPONSE FIRST
 string strRemarks = "Paymentid: " + ResPaymentId + " Result: " + ResResult + " ResErrorText:" + ResErrorText + " ResErrorNo:" + ResErrorNo + " ResAVR:" + ResAVR + " ResAmount:" + ResAmount + " ResRef:" + ResRef + " Postdate: " + ResPosdate + " PGTransactionID: " + ResTranId + " TransactionID: " + ResTrackID + " auth: " + ResAuth + " Resudf1: " + Resudf1 + " Resudf1: " + Resudf2 + " Resudf3: " + Resudf3 + " Resudf4: " + Resudf4 + " Resudf5: " + Resudf5;
 GlbFunctions.LogEvent(Page, "3.Response Page Param values: " + strRemarks + " Response Time: " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), "S");
 }
 catch (Exception ex)
 {
 GlbFunctions.LogError("Payment Verify - Logging result", "Message: " + ex.Message + " StackTrace: " + ex.StackTrace, "WEBAPPLN_UI_TRANSACTIONS_PaymentResponseHDFC", "Page_Load", "UI", "-1");
 }
 if (ResErrorNo == null)
 {
 //check result is captured or approved i.e. successful
 if (ResResult == "CAPTURED" || ResResult == "APPROVED")//If resulr is CAPTURED or APPROVED then below Code is execute for dual inquiry
 {
 //Validate parameters
 if (ResPaymentId == null || ResTrackID == null || ResTranId == null || ResAuth == null || ResRef == null || ResAmount == null)
 {
 // REDIRECT TO ERROR PAGE IF REQUIRED PARAMETERS ARE NULL
 Response.Clear();
 Response.Write("REDIRECT=" + Request.Url.AbsoluteUri.Substring(0, pos + 1) + "PaymentError.aspx?Message=PARMETER VALIDATION FAILED");
 Response.End();
 }
 else
 {
 string ReqTranportalId = string.Empty;
 string ReqTranportalPassword = string.Empty;
 
 //DUAL VERIFIACTION URL, this is test environment URL, contact bank for production DUAL Verification URL
 string INQUrl = "https://" + PAYMENT GATE WAY URL(SECUREPG / SECUREPGTEST) + ".fssnet.co.in/pgway/servlet/TranPortalXMLServlet";
 ReqTranportalId = "<id>" + TRANSPORTAL ID PROVIDED BY BANK + "</id>";
 ReqTranportalPassword = "<password>" + TRANSPORTAL PASSWORD PROVIDED BY BANK + "</password>";
 
 // Pass DUAL VERIFICATION action code, always pass "8" for DUAL VERIFICATION
 string INQAction = "<action>8</action>";
 //Pass PG Transaction ID for Dual Verification
 string INQTransId = "<transid>" + ResTranId + "</transid>";
 //create string for request of input parameters
 string INQRequest = ReqTranportalId + ReqTranportalPassword + INQAction + INQTransId;
 try
 {
 //create a SSL connection xmlhttp formated object server-to-server
 System.IO.StreamWriter myWriter = null;
 // it will open a http connection with provided url
 System.Net.HttpWebRequest objRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(INQUrl);//send data using objxmlhttp object
 objRequest.Method = "POST";
 objRequest.ContentLength = INQRequest.Length;
 objRequest.ContentType = "application/x-www-form-urlencoded";//to set content type
 myWriter = new System.IO.StreamWriter(objRequest.GetRequestStream());
 myWriter.Write(INQRequest);//send data
 myWriter.Close();//closed the myWriter object
 System.Net.HttpWebResponse objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse();
 //receive the responce from objxmlhttp object
 using (System.IO.StreamReader sr = new System.IO.StreamReader(objResponse.GetResponseStream()))
 {
 TranInqResponse = sr.ReadToEnd();
 string[] INQCheck = GetStringInBetween(TranInqResponse, "<result>", "</result>", false, false);//This line will check if any error in TranInqResponse
 if (INQCheck[0] == "CAPTURED" || INQCheck[0] == "APPROVED" || INQCheck[0] == "SUCCESS")
 {
 string[] INQResResult = GetStringInBetween(TranInqResponse, "<result>", "</result>", false, false);//It will give DualInquiry Result
 string[] INQResAmount = GetStringInBetween(TranInqResponse, "<amt>", "</amt>", false, false);//It will give Amount
 string[] INQResTrackId = GetStringInBetween(TranInqResponse, "<trackid>", "</trackid>", false, false);//It will give TrackID ENROLLED
 string[] INQResPayid = GetStringInBetween(TranInqResponse, "<payid>", "</payid>", false, false);//It will give payid
 string[] INQResRef = GetStringInBetween(TranInqResponse, "<ref>", "</ref>", false, false);//It will give Ref.NO.
 string[] INQResTranid = GetStringInBetween(TranInqResponse, "<tranid>", "</tranid>", false, false);//It will give tranid
 //UPDATE THE PAYMENT RESPONSE IN DB BASED ON PAYMENT STATUS
 //switch (INQCheck[0].Trim())
 //{
 // case "CAPTURED":
 // break;
 // case "APPROVED":
 // break;
 // case "SUCCESS":
 // break;
 // default:
 // break;
 //}
 Response.Clear();
 
 //REDIRECT TO OTHER PAGE OR SHOW THE PAYMENT STATUS ON THE SAME PAGE
 Response.Write("REDIRECT=" + strURL);
 Response.End();
 
 }
 else
 {
 // PAYMENT NOT SUCCESSFUL
 // REDIRECT TO ERROR PAGE
 }
 }
 }
 catch (Exception ex)
 {
 // REDIRECT TO ERROR PAGE IN CASE OF ANY ERROR
 }
 }
 }
 else
 {
 // REDIRECT TO ERROR PAGE IF PAYMENT IS NOT SUCCEEDED
 }
 }
 else
 {
 // REDIRECT TO ERROR PAGE IF THE ERROR MESSAGE IS NOT NULL
 }
 }
 #endregion
 }
 public static string[] GetStringInBetween(string strSource, string strBegin, string strEnd, bool includeBegin, bool includeEnd)
 {
 string[] result = { "", "" };
 int iIndexOfBegin = strSource.IndexOf(strBegin);
 if (iIndexOfBegin != -1)
 {
 // include the Begin string if desired
 if (includeBegin)
 {
 iIndexOfBegin -= strBegin.Length;
 }
 strSource = strSource.Substring(iIndexOfBegin + strBegin.Length);
 int iEnd = strSource.IndexOf(strEnd);
 if (iEnd != -1)
 { // include the End string if desired
 if (includeEnd)
 { iEnd += strEnd.Length; }
 result[0] = strSource.Substring(0, iEnd);
 // advance beyond this segment
 if (iEnd + strEnd.Length < strSource.Length)
 { result[1] = strSource.Substring(iEnd + strEnd.Length); }
 }
 }
 else
 // stay where we are
 { result[1] = strSource; }
 return result;
 }//String function end
Tuesday, April 8, 2014
C# HDFC Payment Gateway ( UMI Method ) Implementation
Subscribe to:
Post Comments (Atom)
 
Very helpful
ReplyDeleteThanks Brahmadev
Delete