示例#1
0
        protected void PayButton_Click(object sender, ImageClickEventArgs e)
        {
            //if(!AgreeToPay.Checked)
            //{
            //    PaymentVerifierOnStart.InnerHtml = "<div class='alert alert-danger text-center'> Please agree to the T&C to Proceed </div>";
            //    return;
            //}

            //PaymentVerifierOnStart.InnerHtml = "";
            string TIRCNumber_txt = TIRCNumber.Value;

            VerifyReceiptDetailsforGCSSite VD = null;
            ReceiptDetails rd = null;

            try
            {
                VD = log.VerifyReceiptDetailsforGCSSite(TIRCNumber_txt, Mobile.Value, Email.Value, SecurityCode.Value);
                //System.Data.DataSet dsz = new System.Data.DataSet();
                //Commented below as it will create new Token again within SP and insert in table
                //dsz = log.GetPaymentDetailsforGCSSite(TIRCNumber_txt, Mobile.Value, Email.Value, true);
                ////Adding 0.210 fills as per discussion with Shan as an E-payment fee
                ////to retain decimal value as string (18, 3)..Normal decimal property round off it and removes unneccesary trailing zeroes
                //dsz.Tables[0].Rows[0]["Amount"] = (Convert.ToDecimal(dsz.Tables[0].Rows[0]["Amount"]) + Convert.ToDecimal(0.210));
                //rd = BindData<ReceiptDetails>(dsz.Tables[0]);
            }
            catch (Exception ex)
            {
                Activity <ExternalPay> activity = new Activity <ExternalPay>()
                {
                    ActivityType    = ActivityType.ExtPay,
                    LogDestination  = LogDestination.Database,
                    NotifyingMethod = LogNotifyingMode.None
                };
                ExternalPay ep = new ExternalPay()
                {
                    TempReceiptNumber = TIRCNumber_txt, Mobile = Mobile.Value, Email = Email.Value, SecurityCode = SecurityCode.Value
                };
                AH.LoggerCall <ExternalPay>(activity, LogLevel.Error, ex, "0", " Receipt Lookup before Payment ", ErrorAt.ReceiptLookup, ep);
                PaymentVerifierOnStartScriptCall(" Some momentary issue in Receipt Lookup before Payment  ! . Please contact IT Team or Try again Later ");// + ex.Message);
                return;
            }
            //if (rd==null & VD==null)
            //{
            //    return;
            //}

            GCSPayReq gpq = new GCSPayReq()
            {
                ReceiptNumber = TIRCNumber_txt,// rd.ReceiptNumber,
                //ReceiptId = rd.ReceiptId.ToString(),
                //ReferenceId = rd.ReferenceId.ToString(),
                //ReferenceNumber = rd.ReferenceNumber.ToString(),
                //Amount = rd.Amount.ToString(),
                //BrPaymentTransactionId = rd.BrPaymentTransactionId.ToString(),
                //KNETAccType = rd.KNETAccType,
                //lang = rd.lang,
                //LogInPortId = rd.LogInPortId.ToString(),
                //OLPaymentId = rd.OLPaymentId.ToString(),
                //OLTransId = rd.OLTransId.ToString(),
                //OrganizationId = rd.OrganizationId.ToString(),
                //PaidByName = rd.PaidByName,
                //PaidByType = rd.PaidByType,
                //PayeeMailId = rd.PayeeMailId,
                //PayeeOrgMailId = rd.PayeeOrgMailId,
                //PaymentFor = rd.PaymentFor,
                //PortalLoginId = rd.PortalLoginId,
                //PostDate = rd.PostDate.ToString(),
                //ReferenceType = rd.ReferenceType,
                //TrackId = rd.TrackId.ToString(),
                //TranStopDateTime = rd.TranStopDateTime.ToString(),
                //UserId = rd.UserId
            };

            Pq.GCSPayReq = gpq;


            string EToeknId = SEAT.Value.Remove(3, 4);//Remove injected string from token
            string TokenId  = log.ExplicitDecryptTokenCall(EToeknId);

            Boolean IsInteger   = false;
            short   transVal    = new short();
            String  ErrorMsg    = String.Empty;
            String  response    = String.Empty;
            String  PaymentId   = String.Empty;
            String  paymentPage = String.Empty;

            String sParamSent         = "";
            String FormattedRefNumber = "";

            if (VD.Proceed)
            {
                DataSet ds = new DataSet();
                //ds = log.GetPaymentDetailsforGCSSite(TIRCNumber_txt, true);
                try
                {
                    ds = log.getPaymentDetails(EToeknId);
                }
                catch (Exception ex)
                {
                    AH.LoggerCall <PayReq>(activity, LogLevel.Error, ex, TokenId, "Issue during fetching details using Token ", ErrorAt.PaymentReq, Pq);
                    PaymentVerifierOnStartScriptCall("Some momentary issue in Payment Token validation , Please try again .");
                    return;
                }
                if (ds.Tables.Count > 0)
                {
                    try
                    {
                        String siteUrl  = ConfigurationManager.AppSettings["siteUrl"].ToString();
                        String ErrorUrl = ConfigurationManager.AppSettings["errorUrl"].ToString();

                        String ResponseUrlLive  = ConfigurationManager.AppSettings["responseUrl"].ToString();
                        String ResponseUrlTEST  = ConfigurationManager.AppSettings["responseUrlTEST"].ToString();
                        bool   ConnectivityTEST = Convert.ToBoolean(ConfigurationManager.AppSettings["ConnectivityTEST"].ToString());
                        string ResponseUrl      = ConnectivityTEST ? ResponseUrlTEST : ResponseUrlLive;


                        String transactionStatus = String.Empty;

                        //Adding 0.210 fills as per discussion with Shan as an E-payment fee
                        string Amount = (Convert.ToDecimal(ds.Tables[0].Rows[0]["Amount"]) + Convert.ToDecimal(0.210)).ToString();

                        String clientIPAddress        = this.Context.Request.ServerVariables["remote_addr"];
                        String paymentFor             = EmptyNull(ds.Tables[0].Rows[0]["PaymentFor"]);
                        String paidByType             = EmptyNull(ds.Tables[0].Rows[0]["PaidByType"]);
                        string ReferenceNumber        = EmptyNull(ds.Tables[0].Rows[0]["ReferenceNumber"]);
                        string ReferenceType          = EmptyNull(ds.Tables[0].Rows[0]["ReferenceType"]);
                        String userLogId              = EmptyNull(ds.Tables[0].Rows[0]["PortalLoginId"]);
                        String portId                 = EmptyNull(ds.Tables[0].Rows[0]["LogInPortId"]);
                        String declarationId          = EmptyNull(ds.Tables[0].Rows[0]["ReferenceId"]);
                        String organizationId         = EmptyNull(ds.Tables[0].Rows[0]["OrganizationId"]);
                        String ReceiptId              = EmptyNull(ds.Tables[0].Rows[0]["ReceiptId"]);
                        String BrPaymentTransactionId = EmptyNull(ds.Tables[0].Rows[0]["BrPaymentTransactionId"]);
                        String ReferenceId            = EmptyNull(ds.Tables[0].Rows[0]["ReferenceId"]);
                        String PaymentFor             = EmptyNull(ds.Tables[0].Rows[0]["PaymentFor"]);
                        String userLoginId            = EmptyNull(ds.Tables[0].Rows[0]["UserId"]);

                        String DeclarationId = ReferenceId;


                        //*************MISMATCHED TRACKID*****************************
                        String trackId       = EmptyNull(ds.Tables[0].Rows[0]["OLTransId"]);
                        String ReceiptNumber = EmptyNull(ds.Tables[0].Rows[0]["ReceiptNumber"]);

                        String clientIpAddress = this.Context.Request.ServerVariables["remote_addr"];
                        String sessionId       = Session.SessionID;
                        string alias           = ConfigurationManager.AppSettings["GCSReceiptsAlias"].ToString();
                        string resourcePath    = ConfigurationManager.AppSettings["GCSReceiptsResourcePath"].ToString();


                        e24PaymentPipeLib.e24PaymentPipeCtlClass paymentGatway;

                        paymentGatway          = new e24PaymentPipeLib.e24PaymentPipeCtlClass();
                        paymentGatway.Action   = "1";
                        paymentGatway.Currency = "414";
                        paymentGatway.Language = "USA";// Resources.Resource.KnetInterfaceLanguage;//"USA";  or  //ARA

                        sParamSent += " Axn=1, Curr=" + paymentGatway.Currency + ", Lang=" + paymentGatway.Language;

                        paymentGatway.Amt = Amount;

                        paymentGatway.ResponseUrl = ResponseUrl;
                        paymentGatway.ErrorUrl    = ErrorUrl;

                        sParamSent += ", Amt=" + paymentGatway.Amt + ", RspUrl=" + paymentGatway.ResponseUrl;

                        paymentGatway.ResourcePath = @resourcePath;
                        paymentGatway.Alias        = alias;

                        sParamSent += ", ErrUrl=" + paymentGatway.ErrorUrl + ", Alias=" + alias;
                        sParamSent += ", RsrcPath=" + @resourcePath;

                        //FormattedRefNumber = ReferenceNumber.Replace(@"/", ".");
                        FormattedRefNumber = ReceiptNumber.Replace(@"/", ".");

                        //String FormattedtokenId = tokenId.Replace("+", "_").Replace("/", ".");
                        //String FormattedtokenId = tokenId.Replace("+", "____").Replace("/", "....");
                        String FormattedtokenId = TokenId;// EToeknId;

                        paymentGatway.Udf1 = Amount;
                        paymentGatway.Udf2 = FormattedRefNumber;
                        paymentGatway.Udf3 = FormattedtokenId;                   //DeclarationId;
                        paymentGatway.Udf4 = PaymentFor;
                        paymentGatway.Udf5 = ReferenceNumber.Replace(@"/", "."); // Actual Reference No like SMRNo, MRNo, Bayan No.

                        sParamSent += ", Udf1=" + paymentGatway.Udf1 + ", Udf2=" + paymentGatway.Udf2;
                        sParamSent += ", Udf3=" + paymentGatway.Udf3 + ", Udf4=" + paymentGatway.Udf4 + ", UDf5=" + paymentGatway.Udf5;

                        trackId = trackId == "0" ? Math.Abs(new Random().Next(1000000, 9999999)).ToString() : trackId;

                        paymentGatway.TrackId = trackId;
                        //paymentGatway.TransId = ; // Merchant track id possibly.

                        sParamSent += ", TrackId=" + paymentGatway.TrackId; // + ", Udf4=" + paymentGatway.Udf4;

                        transVal = paymentGatway.PerformInitTransaction();

                        PaymentId   = paymentGatway.PaymentId;
                        paymentPage = paymentGatway.PaymentPage;

                        ErrorMsg = paymentGatway.ErrorMsg;
                        response = paymentGatway.RawResponse;

                        //log.SaveLog("Call Payment Gate Way GCS", "Parameter ValueSet = " + sParamSent, System.Diagnostics.EventLogEntryType.Information);

                        KNETPayReq KNETPayReq = new KNETPayReq();

                        KNETPayReq.Alias        = alias;
                        KNETPayReq.Amt          = Amount;
                        KNETPayReq.Auth         = "";
                        KNETPayReq.Avr          = "";
                        KNETPayReq.Currency     = "414";
                        KNETPayReq.Date         = "";
                        KNETPayReq.ErrorMsg     = paymentGatway.ErrorMsg;// "0";// paymentGatway.ErrorMsg;// "0";//
                        KNETPayReq.ErrorUrl     = ErrorUrl;
                        KNETPayReq.KAction      = "1";
                        KNETPayReq.Language     = Resources.Resource.KnetInterfaceLanguage;
                        KNETPayReq.PaymentId    = paymentGatway.PaymentId;   //"0";// paymentGatway.PaymentId;//"0";//
                        KNETPayReq.PaymentPage  = paymentGatway.PaymentPage; // "0";// paymentGatway.PaymentPage;// "0";//
                        KNETPayReq.RawResponse  = paymentGatway.RawResponse; //"0";// paymentGatway.RawResponse;//"0";//
                        KNETPayReq.Ref          = "";
                        KNETPayReq.ResourcePath = @resourcePath;
                        KNETPayReq.ResponseUrl  = ResponseUrl;
                        KNETPayReq.Result       = "";
                        KNETPayReq.Timeout      = "";
                        KNETPayReq.TrackId      = trackId;
                        KNETPayReq.TransId      = "";
                        KNETPayReq.Udf1         = Amount;
                        KNETPayReq.Udf2         = FormattedRefNumber;
                        KNETPayReq.Udf3         = FormattedtokenId;
                        KNETPayReq.Udf4         = PaymentFor;
                        KNETPayReq.Udf5         = "";

                        Pq.KNETPayReq = KNETPayReq;
                        //AH.LoggerCall<PayReq>(activity, LogLevel.Error, null, TokenId, "BEFORE LOG ", ErrorAt.PaymentReq, Pq);

                        //if (paidByType == "B")
                        //{
                        log.InitializePaymentDetails(DeclarationId, "Started", DateTime.Now, clientIpAddress,
                                                     sessionId, userLoginId, portId, Amount, organizationId,
                                                     PaymentFor, ReferenceNumber, ReferenceType, BrPaymentTransactionId, Convert.ToChar(paidByType),
                                                     ErrorMsg, response, ReceiptId, PaymentId, trackId, TokenId, Mobile.Value, Email.Value);
                        // }\


                        Int64 PaymentIdCheck = 0;

                        IsInteger = Int64.TryParse(PaymentId, out PaymentIdCheck);
                    }

                    catch (Exception ex)
                    {
                        //log.SaveLog("RedirectToKnetGCS", "Error => " + ex.ToString() + "\nKnet Response => " + response + " Error=> " + ErrorMsg + "  PaymentId =>" + PaymentId, System.Diagnostics.EventLogEntryType.Error);


                        AH.LoggerCall <PayReq>(activity, LogLevel.Error, ex, TokenId, "Issue during Payment Component processing or while making First payment entry in DB ", ErrorAt.PaymentReq, Pq);
                        ////****************HOW TO PROCEED IF ITS COMPONENT ISSUE ***********************

                        //Response.Redirect("../genericError.html", true);
                        //PaymentVerifierOnStart.InnerHtml = "<div class='alert alert-danger text-center'> Currently there are some issues ! . Please contact IT Team " + ex.Message + "</div>";
                        PaymentVerifierOnStartScriptCall(" Some momentary issue in accepting Payment  ! . Please contact IT Team or Try again Later ");// + ex.Message);
                        return;
                    }

                    if (transVal != 0 || !IsInteger)
                    {
                        // log ErrorMsg and response
                        //log.SaveLog("RedirectToKnetGCS", "Knet Response => " + response + " Error=> " + ErrorMsg + "  PaymentId =>" + PaymentId, System.Diagnostics.EventLogEntryType.Error);
                        //Response.Redirect("Error.aspx");
                        AH.LoggerCall <PayReq>(activity, LogLevel.Info, null, TokenId, "(transVal(" + transVal + ") != 0 || PaymentId(" + PaymentId + ")= not an integer) so Payment process discontinued ", ErrorAt.None, Pq);

                        //Response.Redirect("../genericError.html", true);

                        //PaymentVerifierOnStart.InnerHtml = "<div class='alert alert-danger text-center'> Currently there are some issues at KNET side ! . Please contact IT Team transval</div>";
                        PaymentVerifierOnStartScriptCall(" Some momentary issue during Payment Initialization ! . Please contact IT Team  or Try again Later");
                        return;
                    }
                    else
                    {
                        //string redirurl =  paymentPage + "?tokenId=" + tokenId + "&amount=" + Amount + "&paymentId=" + PaymentId; // +"&ReceiptNumber=" + FormattedRefNumber;
                        string redirurl = paymentPage + "?PaymentID=" + PaymentId;

                        try
                        {
                            //String ntokenId = tokenId.Replace("+", "____").Replace("/", "....");
                            //log.SaveLog("RedirectToKnetGCS", "with PaymentId=" + PaymentId + ", Token Id=" + ntokenId, System.Diagnostics.EventLogEntryType.Information);
                            //ReceiptNumber added by azhar on discuss with mohan and shan

                            AH.LoggerCall <PayReq>(activity, LogLevel.Info, null, TokenId, "Redirecting to KNET => " + redirurl, ErrorAt.None, Pq);

                            //Response.Redirect(paymentPage + "?PaymentID=" + PaymentId);


                            Response.Redirect(redirurl, false);//paymentPage + "?tokenId=" + tokenId + "&amount=" + Amount + "&paymentId=" + PaymentId); //+ "&PayID=" + PayID); // Redirects user to KNET Payment Page with parameter PaymentID
                        }
                        catch (Exception ex)
                        {
                            //    log.SaveLog("RedirectToKnetGCS", "Error calling, " + ecall.Source + "\n" + ecall.Message + "\n" + ecall.StackTrace + "\n " + redirurl, System.Diagnostics.EventLogEntryType.Error);
                            AH.LoggerCall <PayReq>(activity, LogLevel.Error, ex, TokenId, "Issue during Redirecting to KNET => " + redirurl, ErrorAt.PaymentReq, Pq);


                            ////****************HOW TO PROCEED IF ITS COMPONENT ISSUE ***********************
                            //Response.Redirect("../genericError.html", true);

                            //PaymentVerifierOnStart.InnerHtml = "<div class='alert alert-danger text-center'> Currently there are some issues in reaching KNET  ! . Please contact IT Team  " + ex.Message + "</div>";
                            PaymentVerifierOnStartScriptCall(" Some momentary issue in reaching KNET site  ! . Please contact IT Team or Try again Later ");// + ex.Message);
                            return;
                        }
                    }
                }
                else
                {
                    PaymentVerifierOnStartScriptCall("Payment Token expired or is an Invalid Token, Please try again .");
                    return;
                }
            }
            //else if(rd.TokenExpTime<DateTime.Now)
            //{
            //    PaymentVerifierOnStartScriptCall(VD.Message);
            //}
            else
            {
                //PaymentVerifierOnStartScriptCall("FROM CODE BEHIND");
                //PaymentVerifierOnStart.InnerHtml = "<div class='alert alert-danger text-center'> " + VD.Message + " ! </div>";
                PaymentVerifierOnStartScriptCall(VD.Message);
            }
        }
        private void initializePayment(String Alias, String ResourcePath)
        {
            if (paymentDataSet.Tables.Count > 0 && paymentDataSet.Tables[0].Rows.Count > 0)
            {
                String siteUrl  = ConfigurationManager.AppSettings["siteUrl"].ToString();
                String ErrorUrl = ConfigurationManager.AppSettings["errorUrl"].ToString();

                String ResponseUrlLive  = ConfigurationManager.AppSettings["responseUrl"].ToString();
                String ResponseUrlTEST  = ConfigurationManager.AppSettings["responseUrlTEST"].ToString();
                bool   ConnectivityTEST = Convert.ToBoolean(ConfigurationManager.AppSettings["ConnectivityTEST"].ToString());
                string ResponseUrl      = ConnectivityTEST ? ResponseUrlTEST : ResponseUrlLive;

                String transactionStatus        = String.Empty;
                String sessionId                = Session.SessionID;
                String transactionStartDateTime = DateTime.Now.ToString();
                amount = EmptyNull(paymentDataSet.Tables[0].Rows[0]["Amount"]);
                String clientIPAddress = this.Context.Request.ServerVariables["remote_addr"];
                String paymentFor      = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PaymentFor"]);
                String paidByType      = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PaidByType"]);
                ReferenceNumber = EmptyNull(paymentDataSet.Tables[0].Rows[0]["ReferenceNumber"]);
                ReferenceType   = EmptyNull(paymentDataSet.Tables[0].Rows[0]["ReferenceType"]);
                String userLogId              = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PortalLoginId"]);
                String portId                 = EmptyNull(paymentDataSet.Tables[0].Rows[0]["LogInPortId"]);
                String declarationId          = EmptyNull(paymentDataSet.Tables[0].Rows[0]["ReferenceId"]);
                String organizationId         = EmptyNull(paymentDataSet.Tables[0].Rows[0]["OrganizationId"]);
                String ReceiptId              = EmptyNull(paymentDataSet.Tables[0].Rows[0]["ReceiptId"]);
                String BrPaymentTransactionId = EmptyNull(paymentDataSet.Tables[0].Rows[0]["BrPaymentTransactionId"]);


                //*************MISMATCHED TRACKID*****************************
                String trackId       = EmptyNull(paymentDataSet.Tables[0].Rows[0]["OLTransId"]);
                String ReceiptNumber = EmptyNull(paymentDataSet.Tables[0].Rows[0]["ReceiptNumber"]);

                //if (trackId == "0" || trackId == null )  // checking if it not generated, generate and send
                {
                    trackId = Math.Abs(new Random().Next(1000000, 9999999)).ToString();
                }

                GCSPayReq GCSPayReq = new GCSPayReq();
                GCSPayReq.Amount = amount;
                GCSPayReq.BrPaymentTransactionId = BrPaymentTransactionId;
                GCSPayReq.KNETAccType            = EmptyNull(paymentDataSet.Tables[0].Rows[0]["KNETAccType"]);
                GCSPayReq.lang             = EmptyNull(paymentDataSet.Tables[0].Rows[0]["lang"]);
                GCSPayReq.LogInPortId      = portId;
                GCSPayReq.OLPaymentId      = EmptyNull(paymentDataSet.Tables[0].Rows[0]["OLPaymentId"]);
                GCSPayReq.OrganizationId   = organizationId;
                GCSPayReq.PaidByName       = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PaidByName"]);
                GCSPayReq.PaidByType       = paidByType;
                GCSPayReq.PayeeMailId      = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PayeeMailId"]);
                GCSPayReq.PaymentFor       = paymentFor;
                GCSPayReq.PortalLoginId    = userLogId;
                GCSPayReq.PostDate         = EmptyNull(paymentDataSet.Tables[0].Rows[0]["PostDate"]);
                GCSPayReq.ReceiptId        = ReceiptId;
                GCSPayReq.ReceiptNumber    = ReceiptNumber;
                GCSPayReq.ReferenceType    = ReferenceType;
                GCSPayReq.TrackId          = trackId;
                GCSPayReq.TranStopDateTime = EmptyNull(paymentDataSet.Tables[0].Rows[0]["TranStopDateTime"]);
                GCSPayReq.OLTransId        = EmptyNull(paymentDataSet.Tables[0].Rows[0]["OLTransId"]);
                GCSPayReq.UserId           = EmptyNull(paymentDataSet.Tables[0].Rows[0]["UserId"]);

                Pq.GCSPayReq = GCSPayReq;

                RedirectToKnet(ResourcePath, Alias, ReferenceNumber, ReferenceType, amount,
                               declarationId, paymentFor, BrPaymentTransactionId, ResponseUrl,
                               ErrorUrl, clientIPAddress, sessionId, organizationId,
                               userLogId, portId, paidByType, trackId, ReceiptId, ReceiptNumber);
            }
            else
            {
                log.SaveLog("CallFromMicroClear-paymentGatwayGCS", "No Data Returned from Database ", System.Diagnostics.EventLogEntryType.Error);
                AH.LoggerCall <PayReq>(activity, LogLevel.Warn, null, EToeknId, "No data found at the time of Payment initialization", ErrorAt.None, null);
            }
        }