Example #1
0
        public string FinpayNWSC(string CustRefence, string Area, string EXREF, string DRACCBRANCH,
                                 string DRACCOUNTNUMBER, string DRAMOUNT, string DRACCURR, string TXNDATE,
                                 string TXNTIME, string PhoneNumber, string CustRemarks, string Location)
        {
            string ReferenceNumberx = "";
            string Areax            = "";
            string OutstandingBalx  = "";
            string CustNamex        = "";
            string PropertyRefx     = "";
            string CustomerErrorx   = "";

            string OriginalReference = "";

            OriginalReference = CustRefence;

            string[] FCDBSetting = null;
            string   FCDBSetings = "";

            string FCDBINTERNALGL      = "";
            string FCDBTELLERCODE      = "";
            string FCDBDESC            = "";
            string FCDBTILLID          = "";
            string FCDBLIMIT           = "";
            string FCDBMAKERy          = "";
            string FCDBCHECKERy        = "";
            string Subhosty            = "";
            string Msgtypey            = "";
            string Procodey            = "";
            string Commissiony         = "";
            string Trantypey           = "";
            string Terminaly           = "";
            string Batchy              = "";
            string MessageFlagy        = "";
            string Workstationy        = "";
            string PosConfirmedy       = "";
            string PosReversedy        = "";
            string EftSourcey          = "";
            string IbTxny              = "";
            string Flexuseridy         = "";
            string UtilityAccountY     = "";
            string UtilityAccBranchY   = "";
            string UtilityAccCurrencyY = "";
            string MerchantTypeY       = "";

            string sp_reference = "";

            bool isrepeat     = false;
            bool istransacted = false;
            bool issuccess    = false;

            string valuefield = "";

            var FailureDetailsinfo = new NWSCFCDBResponse();
            var WaterDetailsinfo   = new NWSCFCDBResponse();

            Datamanagement.PushWaterCustReferenceDetails(CustRefence, Location);

            Thread.Sleep(5000);

            string CustReferenceDetials = Datamanagement.getWaterCustRefDetails(CustRefence);

            string[] Custrefdets = null;
            Custrefdets      = CustReferenceDetials.Split('|');
            ReferenceNumberx = Custrefdets[0];
            Areax            = Custrefdets[1];
            OutstandingBalx  = Custrefdets[2];
            CustNamex        = Custrefdets[3];
            PropertyRefx     = Custrefdets[4];
            CustomerErrorx   = Custrefdets[5];

            switch (CustomerErrorx)
            {
            case "NONE":
                //Continue
                break;

            default:
                //Do Zilch

                FailureDetailsinfo.EXRef = EXREF;
                FailureDetailsinfo.NWSCReferenceNumber = CustRefence;
                FailureDetailsinfo.Area           = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <NWSCFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new NWSCFailureDetials()
                {
                    Remark       = CustomerErrorx,
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            sp_reference = ReferenceNumberx + "-" + CustNamex;
            //Get FCDB details here

            FCDBSetings = Datamanagement.getFCDBSettings("NWSC");
            FCDBSetting = FCDBSetings.Split('|');

            FCDBINTERNALGL = FCDBSetting[0];
            FCDBTELLERCODE = FCDBSetting[1];
            FCDBDESC       = FCDBSetting[2];
            FCDBTILLID     = FCDBSetting[3];
            FCDBLIMIT      = FCDBSetting[4];

            FCDBMAKERy          = FCDBSetting[5];
            FCDBCHECKERy        = FCDBSetting[6];
            Subhosty            = FCDBSetting[7];
            Msgtypey            = FCDBSetting[8];
            Procodey            = FCDBSetting[9];
            Commissiony         = FCDBSetting[10];
            Trantypey           = FCDBSetting[11];
            Terminaly           = FCDBSetting[12];
            Batchy              = FCDBSetting[13];
            MessageFlagy        = FCDBSetting[14];
            Workstationy        = FCDBSetting[15];
            PosConfirmedy       = FCDBSetting[16];
            PosReversedy        = FCDBSetting[17];
            EftSourcey          = FCDBSetting[18];
            IbTxny              = FCDBSetting[19];
            Flexuseridy         = FCDBSetting[20];
            UtilityAccountY     = FCDBSetting[21];
            UtilityAccBranchY   = FCDBSetting[22];
            UtilityAccCurrencyY = FCDBSetting[23];
            MerchantTypeY       = FCDBSetting[24];

            istransacted = Datamanagement.isalreadyTransacted(CustRefence);

            switch (istransacted)
            {
            case true:
                FailureDetailsinfo.EXRef = EXREF;
                FailureDetailsinfo.NWSCReferenceNumber = CustRefence;
                FailureDetailsinfo.Area           = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <NWSCFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new NWSCFailureDetials()
                {
                    Remark =
                        "Payment reference has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;

            default:
                break;
            }

            CustRefence = CustRefence + Trantypey;
            string MyRef = (OriginalReference.ToString()).Trim().Replace(" ", "").ToUpper() +
                           System.DateTime.Today.ToString("yyMMdd") + System.DateTime.Now.ToString("hhmmss") + "UTIL";


            valuefield =
                Datamanagement.getFinpayGlobalDetails(
                    "select * from Payments where CustomerRefNumber = '" + OriginalReference +
                    "' AND STATUS= 'Posted' AND AccountNumber= '" + DRACCOUNTNUMBER + "' AND AMOUNTPAID= '" + DRAMOUNT +
                    "' AND VALUEDATE='" + TXNDATE + "' and phonenumber='" + PhoneNumber + "'", "CustomerRefNumber");
            if (valuefield == "")
            {
                valuefield =
                    Datamanagement.getFinpayGlobalDetails(
                        "select * from PaymentsArchive where CustomerRefNumber = '" + OriginalReference +
                        "' AND STATUS= 'Posted' AND AccountNumber= '" + DRACCOUNTNUMBER + "' AND AMOUNTPAID= '" +
                        DRAMOUNT + "' AND VALUEDATE='" + TXNDATE + "' and phonenumber='" + PhoneNumber + "'",
                        "CustomerRefNumber");
            }
            switch (valuefield)
            {
            case "":

                break;

            default:
                FailureDetailsinfo.EXRef = EXREF;
                FailureDetailsinfo.NWSCReferenceNumber = CustRefence;
                FailureDetailsinfo.Area           = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <NWSCFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new NWSCFailureDetials()
                {
                    Remark =
                        "Payment reference has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            //check whether transaction already sent to the bridge
            isrepeat = Datamanagement.isalreadyPosted(MyRef);
            if (isrepeat == false)
            {
                //post to the bridge
                Datamanagement.InsertIntoLog(MyRef, Subhosty,
                                             Msgtypey, Procodey, TXNDATE, TXNTIME, DRACCBRANCH, CustRefence, CustRefence,
                                             DRAMOUNT, Commissiony, DRACCOUNTNUMBER, MerchantTypeY, EXREF, Terminaly,
                                             DRACCBRANCH,
                                             Batchy, Terminaly, sp_reference, DRACCOUNTNUMBER, DRACCURR, "0",
                                             MessageFlagy,
                                             Workstationy,
                                             PosConfirmedy, PosReversedy, "0", UtilityAccountY, UtilityAccBranchY,
                                             MerchantTypeY, EftSourcey, IbTxny, "", Flexuseridy);
            }

            Thread.Sleep(5000);
            issuccess = Datamanagement.isSuccessful(MyRef);
            EXREF     = Datamanagement.Ecternalref(MyRef);
            switch (issuccess)
            {
            case true:
                Datamanagement.IsertintoNWSCPayments(MyRef, "Energy Payment", UtilityAccBranchY,
                                                     UtilityAccountY, CustNamex, OutstandingBalx, DRAMOUNT,
                                                     "DIRECTDEBIT",
                                                     DRACCBRANCH, DRACCOUNTNUMBER, "", OriginalReference,
                                                     PhoneNumber, CustRemarks, FCDBMAKERy, Procodey, TXNDATE,
                                                     DRACCBRANCH,
                                                     "", Areax);
                break;

            case false:
                FailureDetailsinfo.EXRef = EXREF;
                FailureDetailsinfo.NWSCReferenceNumber = OriginalReference;
                FailureDetailsinfo.Area           = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <NWSCFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new NWSCFailureDetials()
                {
                    Remark       = "Failed To Post To Core Banking",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            //Notify Payments...joannah 9/7/2015

            string   VendorCode      = ConfigurationManager.AppSettings["WaterVendorCode"];
            string   VendorPass      = ConfigurationManager.AppSettings["WaterVendorPass"];
            var      service         = new NWSCGateway.NWSCBillingInterface();
            DateTime convertedDate   = Convert.ToDateTime(TXNDATE);
            int      convertedAmount = Int32.Parse(DRAMOUNT);
            var      x = service.postCustomerTransactionsWithArea(OriginalReference, CustNamex, Areax, PhoneNumber, convertedDate, convertedAmount, MyRef, "DIRECTDEBIT", VendorCode, VendorPass);

            if (x.PostError == "NONE")
            {
                var strUpdate = " UPDATE Payments set NWSCStatus = 'Posted' where ReferenceNumber = OriginalReference ";
                try
                {
                    using (

                        var conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Bridge"].ConnectionString))
                    {
                        conn.Open();
                        using (var cmd = new SqlCommand(strUpdate, conn))
                        {
                            var dr = cmd.ExecuteReader();
                        }
                    }
                }

                catch (Exception ex)
                {
                }
            }
            else
            {
                var strUpdate = " UPDATE Payments set NWSCStatus = 'UnPosted' where ReferenceNumber = OriginalReference ";
                try
                {
                    using (

                        var conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Bridge"].ConnectionString))
                    {
                        conn.Open();
                        using (var cmd = new SqlCommand(strUpdate, conn))
                        {
                            var dr = cmd.ExecuteReader();
                        }
                    }
                }

                catch (Exception ex)
                {
                }
            }
            // notiffy that is wadey for you
            //RESPOND HERE
            WaterDetailsinfo.EXRef = EXREF;
            WaterDetailsinfo.NWSCReferenceNumber = OriginalReference;
            WaterDetailsinfo.PaymentAmount       = DRAMOUNT;
            WaterDetailsinfo.WaterDetails        = new List <NWSCDetials>();
            WaterDetailsinfo.WaterDetails.Add(new NWSCDetials()
            {
                CustomerName   = CustNamex,
                PropertyRef    = PropertyRefx,
                OutstandingBal = OutstandingBalx,
                Responcecode   = "00",
                CustomerError  = CustRemarks
            });
            return(WaterDetailsinfo.EXRef.ToString());
        }
        //joannah ..10/7/2015
        public void notifyKCCA(string prn)
        {
            DataTable MyDataTable;

            string KCCAVendorCode     = ConfigurationManager.AppSettings["KCCAVendorCode"];
            string KCCAVendorPassword = ConfigurationManager.AppSettings["KCCAVendorPassword"];
            string KCCASession_key    = ConfigurationManager.AppSettings["KCCASession_Key"];
            string KCCAHash           = ConfigurationManager.AppSettings["KCCAHash"];

            System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
            string HashKey = MD5Hash(KCCASession_key + KCCAVendorCode + KCCAVendorPassword + KCCAHash);

            KCCAGateway.BankPaymentService x = new KCCAGateway.BankPaymentService();
            //WebRequest.DefaultWebProxy = new WebProxy("http://" + ProxyIP + ":" + ProxyPort + "/", true);


            // ----------------------- Get Session Key --------------------------
            var Sessionkey = new object();

            try
            {
                Sessionkey = x.authenticate(KCCASession_key, KCCAVendorCode, KCCAVendorPassword, HashKey, "");
            }
            catch (Exception ex)
            {
            }

            string       KCCATransaction = "";
            string       skey            = "";
            string       BankStatus      = "C";
            DataTable    MyRst           = new DataTable();
            DataSet      ds     = new DataSet();
            DataTable    dt     = new DataTable();
            StringReader strRdr = new StringReader(Sessionkey.ToString());

            try
            {
                ds.ReadXml(strRdr);
            }
            catch (Exception ex)
            {
            }

            dt          = ds.Tables [0];
            skey        = dt.Rows[0][1].ToString();
            MyDataTable = Datamanagement.getKCCA(prn);
            DataRow dr = MyDataTable.Rows[0];


            string   MyRef       = dr["CustomerRefNumber"].ToString();
            string   coin        = dr["COIN"].ToString();
            string   DRAMOUNT    = dr["AmountPaid"].ToString();
            string   DRACCBRANCH = dr["UtilityBranch"].ToString();
            DateTime dt1         = Convert.ToDateTime(dr["ValueDate"]);
            string   TXNDATE     = String.Format("{0:MM/dd/yy}", dt1); //dr["ValueDate"].ToString(); //String.Format("{0:d}", dt);
            string   TnxId       = dr["ReferenceNumber"].ToString();
            int      Id          = Convert.ToInt32(dr["PaymentId"].ToString());


            //Create the Xml string
            var XmlMs     = new MemoryStream();
            var XmlTxtWtr = new XmlTextWriter(XmlMs, System.Text.Encoding.UTF8);

            XmlTxtWtr.Formatting  = Formatting.Indented;
            XmlTxtWtr.Indentation = 4;
            XmlTxtWtr.WriteStartDocument();
            XmlTxtWtr.WriteStartElement("transactionRecord");
            XmlTxtWtr.WriteElementString("PRN", MyRef);
            XmlTxtWtr.WriteElementString("COIN", coin);
            XmlTxtWtr.WriteElementString("amountPaid", DRAMOUNT);
            XmlTxtWtr.WriteElementString("paymentDate", TXNDATE);
            XmlTxtWtr.WriteElementString("valueDate", TXNDATE);
            XmlTxtWtr.WriteElementString("status", BankStatus);
            XmlTxtWtr.WriteElementString("bankBranchCode", DRACCBRANCH);
            XmlTxtWtr.WriteElementString("transactionID", TnxId);
            XmlTxtWtr.WriteEndElement();
            XmlTxtWtr.WriteEndDocument();
            XmlTxtWtr.Flush();

            var strmrdr = new StreamReader(XmlMs);

            XmlMs.Seek(0, SeekOrigin.Begin);



            KCCATransaction = strmrdr.ReadToEnd();
            // KCCATransaction = KCCATransaction.Replace("encoding=""utf-8""", "");   // .Replace("encoding=""utf-8""", "");


            HashKey = MD5Hash(skey + MyRef + KCCAHash);
            var KCCANotification = new KCCAGateway.BankPaymentService();
            var validateresponse = KCCANotification.transact(skey, MyRef, KCCATransaction, HashKey, TnxId);

            //DataTable MyRst1 = new DataTable();
            //MyRst1 = ds.Tables(0)
            //DataSet dts = new DataSet();
            strRdr = new StringReader(validateresponse);
            ds.ReadXml(strRdr);

            if (dt.Rows[0][1].ToString() != "0")
            {
                //var stat = validateresponse.
                var    strUpdate = "UPDATE KCCAPayments SET  KCCAStatus='Posted'  where PaymentId = Id";
                string query1    = "Insert into KCCAPaymentsArchive Select * from KCCAPayments where CustmerRefNumber = " + prn;

                string query2 = "Delete from KCCAPayments where CustmerRefNumber =" + prn;

                try
                {
                    using (
                        var conn =
                            new System.Data.SqlClient.SqlConnection(WebConfigurationManager.ConnectionStrings["Bridge"].ConnectionString))
                    {
                        conn.Open();
                        using (var cmd = new System.Data.SqlClient.SqlCommand(strUpdate, conn))
                        {
                            var df = cmd.ExecuteReader();
                        }
                    }
                }

                catch (Exception ex)
                {
                }

                //dat.DBAction("UPDATE KCCAPayments SET  Authorized=1,Status = 'Posted' ,KCCAStatus='Posted',AuthorizedBy = '" & Session("userName") & "' where PaymentID = " & MyPayID & "", DataManagement.DBActionType.Update)
            }
        }
        public string PayKCCA(string PRN, string data, string UTILITYACCOUNT, string Amount, string debitmobilenumber, string TXNDATE, string TXNTIME, string alertcontact, string EXREF)
        {
            var FailureDetailsinfo = new KCCAADAPAYResponse();
            var KCCADetailsinfo    = new KCCAADAPAYResponse();

            string HashKey = MD5Hash(KCCASession_key + KCCAVendorCode + KCCAVendorPassword + KCCAHash);

            KCCAGateway.BankPaymentService x = new KCCAGateway.BankPaymentService();

            // ----------------------- Get Session Key --------------------------
            var Sessionkey = new object();

            try
            {
                Sessionkey = x.authenticate(KCCASession_key, KCCAVendorCode, KCCAVendorPassword, HashKey, "");
            }
            catch (Exception ex)
            {
                //result = ex.Message;
            }
            string skey = "";
            //DataRow rw = null;
            DataSet      ds     = new DataSet();
            DataTable    dt     = new DataTable();
            StringReader strRdr = new StringReader(Sessionkey.ToString());

            try
            {
                ds.ReadXml(strRdr);
            }
            catch (Exception ex)
            {
                //result = ex.Message;
            }
            dt   = ds.Tables[0];
            skey = dt.Rows[0][1].ToString();


            // ------------------- Validate against prn --------------------------
            string validateresponse = "";

            try
            {
                validateresponse = x.verifyReference(skey, PRN, "", "");
            }
            catch (Exception ex)
            {
                // result = ex.Message;
            }
            dt     = new DataTable();
            ds     = new DataSet();
            strRdr = new StringReader(validateresponse);
            try
            {
                ds.ReadXml(strRdr);
            }
            catch (Exception ex)
            {
                //result = ex.Message;
            }
            dt = ds.Tables[0];
            string COIN, CUSTOMERNAME, PHONENUMBER, PRNDATE, EXPIRYDATE, AMOUNTDUE, PAYMENTCURRENCY, STATUS, StatusDescriptionx, balance, CustomerTypex;

            COIN               = dt.Rows[0][1].ToString();
            CUSTOMERNAME       = dt.Rows[0][2].ToString();
            PHONENUMBER        = dt.Rows[0][3].ToString();
            PRNDATE            = dt.Rows[0][5].ToString();
            EXPIRYDATE         = dt.Rows[0][6].ToString();
            AMOUNTDUE          = dt.Rows[0][7].ToString();
            StatusDescriptionx = "UNSUCCCESSFUL";
            balance            = "";
            CustomerTypex      = "POST PAID";

            PAYMENTCURRENCY = "";
            STATUS          = dt.Rows[0][0].ToString();
            Datamanagement.PushKCCACustReferenceDetails(PRN, COIN, CUSTOMERNAME, PHONENUMBER, PRNDATE, EXPIRYDATE, AMOUNTDUE, PAYMENTCURRENCY, STATUS);
            Thread.Sleep(5000);

            switch (STATUS)
            {
            case "A":
                break;

            default:

                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.CustReference  = PRN;
                FailureDetailsinfo.PaymentAmount  = Amount;
                FailureDetailsinfo.FailureDetails = new List <KCCAFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new KCCAFailureDetials()
                {
                    Remark       = StatusDescriptionx,
                    Responcecode = "05"
                });
                if (STATUS == "T")
                {
                    return("Transaction Already Transacted");
                }
                else if (STATUS == "X")
                {
                    return("Transaction Has Expired ");
                }
                else
                {
                    return("UNSUCCESSFULL");
                }
                break;
            }

            string sp_reference = PRN + "-" + CUSTOMERNAME;
            bool   istransacted = Datamanagement.isalreadyTransactedKCCA(PRN);

            switch (istransacted)
            {
            case true:
                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.CustReference  = PRN;
                FailureDetailsinfo.PaymentAmount  = Amount;
                FailureDetailsinfo.FailureDetails = new List <KCCAFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new KCCAFailureDetials()
                {
                    Remark =
                        "Payment reference has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFULL");

                break;

            default:
                break;
            }

            string Trantypey = "FCDB";

            PRN = PRN + Trantypey;
            string MyRef = (PRN.ToString()).Trim().Replace(" ", "").ToUpper() +
                           System.DateTime.Today.ToString("yyMMdd") + System.DateTime.Now.ToString("hhmmss") + "UTIL";

            Thread.Sleep(5000);

            //DEBIT CUSTOMER MOBILE MONEY ACCOUNT

            bool   issuccess = true;
            string coin      = Datamanagement.coin_(PRN);

            EXREF = "exref";

            switch (issuccess)
            {
            case true:
                Datamanagement.IsertintoKCCAPayments(MyRef, "KCCA Payment",
                                                     UTILITYACCOUNT, CUSTOMERNAME, balance, Amount,
                                                     "mobile money payment",
                                                     debitmobilenumber, PRN,
                                                     CustomerTypex,
                                                     alertcontact, "", TXNDATE,
                                                     STATUS, StatusDescriptionx, "KCCA Payment", "0", "2",
                                                     "", coin);


                break;

            case false:
                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.CustReference  = PRN;
                FailureDetailsinfo.PaymentAmount  = AMOUNTDUE;
                FailureDetailsinfo.FailureDetails = new List <KCCAFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new KCCAFailureDetials()
                {
                    Remark       = "Failed To Post To Core Banking",
                    Responcecode = "05"
                });
                return("UNSUCCESSFULL");

                break;
            }

            //Notify KCCA

            Thread.Sleep(5000);
            notifyKCCA(PRN);


            //RESPOND HERE
            KCCADetailsinfo.EXRef         = EXREF;
            KCCADetailsinfo.CustReference = PRN;
            KCCADetailsinfo.PaymentAmount = AMOUNTDUE;
            KCCADetailsinfo.KCCADetails   = new List <KCCADetails>();
            KCCADetailsinfo.KCCADetails.Add(new KCCADetails()
            {
                AmountPaid        = AMOUNTDUE,
                Balance           = AMOUNTDUE,
                CustomerName      = CUSTOMERNAME,
                CustomerType      = "",
                Remark            = "",
                Responcecode      = "00",
                StatusCode        = STATUS,
                StatusDescription = StatusDescriptionx,
                FlexResponse      = EXREF
            });
            return(KCCADetailsinfo.EXRef.ToString());
        }
Example #4
0
        public string FinpayUmeme(string CustRefence, string Area, string EXREF, string DRACCBRANCH,
                                  string DRACCOUNTNUMBER, string DRAMOUNT, string DRACCURR, string TXNDATE,
                                  string TXNTIME, string PhoneNumber, string CustRemarks, string Location)
        {
            string ReferenceNumberx = "";
            string Areax            = "";
            string OutstandingBalx  = "";
            string CustNamex        = "";
            string PropertyRefx     = "";
            string CustomerErrorx   = "";
            string cust_ref_        = CustRefence;

            string OriginalReference = "";

            OriginalReference = CustRefence;

            string[] FCDBSetting = null;
            string   FCDBSetings = "";

            string FCDBINTERNALGL      = "";
            string FCDBTELLERCODE      = "";
            string FCDBDESC            = "";
            string FCDBTILLID          = "";
            string FCDBLIMIT           = "";
            string FCDBMAKERy          = "";
            string FCDBCHECKERy        = "";
            string Subhosty            = "";
            string Msgtypey            = "";
            string Procodey            = "";
            string Commissiony         = "";
            string Trantypey           = "";
            string Terminaly           = "";
            string Batchy              = "";
            string MessageFlagy        = "";
            string Workstationy        = "";
            string PosConfirmedy       = "";
            string PosReversedy        = "";
            string EftSourcey          = "";
            string IbTxny              = "";
            string Flexuseridy         = "";
            string UtilityAccountY     = "";
            string UtilityAccBranchY   = "";
            string UtilityAccCurrencyY = "";
            string MerchantTypeY       = "";

            string sp_reference = "";

            bool isrepeat     = false;
            bool istransacted = false;
            bool issuccess    = false;

            string valuefield = "";

            var FailureDetailsinfo = new UMEMEFCDBResponse();
            var UmemeDetailsinfo   = new UMEMEFCDBResponse();

            Datamanagement.PushUmemeCustReferenceDetails(CustRefence);

            //
            System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

            string UmemeVendorCode     = ConfigurationManager.AppSettings["UMEMEVendorCode"];
            string UmemeVendorPassword = ConfigurationManager.AppSettings["UMEMEVendorPass"];

            UMEMEGateway.EPayment service = new UMEMEGateway.EPayment();
            UMEMEGateway.Customer x       = new UMEMEGateway.Customer();
            var d = new object();

            x = service.ValidateCustomer(OriginalReference, UmemeVendorCode, UmemeVendorPassword);



            var     res               = service.ValidateCustomer(CustRefence, UmemeVendorCode, UmemeVendorPassword);
            string  remark            = "";
            string  CustomerRef       = res.CustomerRef;
            string  CustomerName      = res.CustomerName;
            string  CustomerType      = res.CustomerType;
            string  Balance           = Convert.ToString(res.Balance);
            string  StatusCode        = res.StatusCode;
            string  StatusDescription = res.StatusDescription;
            Boolean auth              = false;

            if (res.StatusDescription != "SUCCESS")
            {
                auth   = false;
                remark = res.StatusDescription;
            }
            else
            {
                auth   = true;
                remark = "Successful";
            }


            Datamanagement.UpdateUMEMEDetails(CustRefence, CustomerName, CustomerType, Balance, StatusCode, StatusDescription, remark, auth);
            //umemept.Close();
            //
            //Thread.Sleep(5000);

            string CustReferenceDetials = Datamanagement.getUmemeCustRefDetails(CustRefence);

            string[] Custrefdets = null;
            Custrefdets      = CustReferenceDetials.Split('|');
            ReferenceNumberx = Custrefdets[0];
            //Areax = Custrefdets[1];
            OutstandingBalx = Custrefdets[1];
            CustNamex       = Custrefdets[2];
            string statuscodex = Custrefdets[3];

            PropertyRefx = Custrefdets[4];
            //CustomerErrorx = Custrefdets[5];

            switch (PropertyRefx)
            {
            case "SUCCESS":
                //Continue
                break;

            default:
                //Do Zilch

                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.CustReference  = CustRefence;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UmemeFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UmemeFailureDetials()
                {
                    Remark       = CustomerErrorx,
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            sp_reference = ReferenceNumberx + "-" + CustNamex;
            //Get FCDB details here

            FCDBSetings = Datamanagement.getFCDBSettings("UMEME");
            FCDBSetting = FCDBSetings.Split('|');

            FCDBINTERNALGL = FCDBSetting[0];
            FCDBTELLERCODE = FCDBSetting[1];
            FCDBDESC       = FCDBSetting[2];
            FCDBTILLID     = FCDBSetting[3];
            FCDBLIMIT      = FCDBSetting[4];

            FCDBMAKERy          = FCDBSetting[5];
            FCDBCHECKERy        = FCDBSetting[6];
            Subhosty            = FCDBSetting[7];
            Msgtypey            = FCDBSetting[8];
            Procodey            = FCDBSetting[9];
            Commissiony         = FCDBSetting[10];
            Trantypey           = FCDBSetting[11];
            Terminaly           = FCDBSetting[12];
            Batchy              = FCDBSetting[13];
            MessageFlagy        = FCDBSetting[14];
            Workstationy        = FCDBSetting[15];
            PosConfirmedy       = FCDBSetting[16];
            PosReversedy        = FCDBSetting[17];
            EftSourcey          = FCDBSetting[18];
            IbTxny              = FCDBSetting[19];
            Flexuseridy         = FCDBSetting[20];
            UtilityAccountY     = FCDBSetting[21];
            UtilityAccBranchY   = FCDBSetting[22];
            UtilityAccCurrencyY = FCDBSetting[23];
            MerchantTypeY       = FCDBSetting[24];

            istransacted = Datamanagement.isalreadyTransacted(CustRefence);

            switch (istransacted)
            {
            case true:
                FailureDetailsinfo.EXRef         = EXREF;
                FailureDetailsinfo.CustReference = CustRefence;
                ////FailureDetailsinfo.Area = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UmemeFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UmemeFailureDetials()
                {
                    Remark =
                        "Payment reference has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;

            default:
                break;
            }

            CustRefence = CustRefence + Trantypey;
            string MyRef = (OriginalReference.ToString()).Trim().Replace(" ", "").ToUpper() +
                           System.DateTime.Today.ToString("yyMMdd") + System.DateTime.Now.ToString("hhmmss") + "UTIL";


            valuefield =
                Datamanagement.getFinpayGlobalDetails(
                    "select * from Payments where CustomerRefNumber = '" + OriginalReference +
                    "' AND STATUS= 'Posted' AND AccountNumber= '" + DRACCOUNTNUMBER + "' AND AMOUNTPAID= '" + DRAMOUNT +
                    "' AND VALUEDATE='" + TXNDATE + "' and phonenumber='" + PhoneNumber + "'", "CustomerRefNumber");
            if (valuefield == "")
            {
                valuefield =
                    Datamanagement.getFinpayGlobalDetails(
                        "select * from PaymentsArchive where CustomerRefNumber = '" + OriginalReference +
                        "' AND STATUS= 'Posted' AND AccountNumber= '" + DRACCOUNTNUMBER + "' AND AMOUNTPAID= '" +
                        DRAMOUNT + "' AND VALUEDATE='" + TXNDATE + "' and phonenumber='" + PhoneNumber + "'",
                        "CustomerRefNumber");
            }
            switch (valuefield)
            {
            case "":

                break;

            default:
                FailureDetailsinfo.EXRef         = EXREF;
                FailureDetailsinfo.CustReference = CustRefence;
                //FailureDetailsinfo.Area = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UmemeFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UmemeFailureDetials()
                {
                    Remark =
                        "Payment reference has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            //check whether transaction already sent to the bridge
            isrepeat = Datamanagement.isalreadyPosted(MyRef);
            if (isrepeat == false)
            {
                //post to the bridge
                Datamanagement.InsertIntoLog(MyRef, Subhosty,
                                             Msgtypey, Procodey, TXNDATE, TXNTIME, DRACCBRANCH, CustRefence, CustRefence,
                                             DRAMOUNT, Commissiony, DRACCOUNTNUMBER, MerchantTypeY, EXREF, Terminaly,
                                             DRACCBRANCH,
                                             Batchy, Terminaly, sp_reference, DRACCOUNTNUMBER, DRACCURR, "0",
                                             MessageFlagy,
                                             Workstationy,
                                             PosConfirmedy, PosReversedy, "0", UtilityAccountY, UtilityAccBranchY,
                                             MerchantTypeY, EftSourcey, IbTxny, "", Flexuseridy);
            }

            Thread.Sleep(5000);
            issuccess = Datamanagement.isSuccessful(MyRef);
            EXREF     = Datamanagement.Ecternalref(MyRef);
            switch (issuccess)
            {
            case true:
                //joannah...7/8/2015
                Datamanagement.IsertintoUmemePayments(MyRef, "Energy Payment", UtilityAccBranchY,
                                                      UtilityAccountY, CustNamex, OutstandingBalx, DRAMOUNT,
                                                      "DIRECTDEBIT",
                                                      DRACCBRANCH, DRACCOUNTNUMBER, "", OriginalReference,
                                                      "", PhoneNumber, CustRemarks, FCDBMAKERy, Procodey, TXNDATE,
                                                      DRACCBRANCH,
                                                      statuscodex, PropertyRefx, "", "", "", "");
                break;

            case false:
                FailureDetailsinfo.EXRef         = EXREF;
                FailureDetailsinfo.CustReference = CustRefence;
                //FailureDetailsinfo.Area = Area;
                FailureDetailsinfo.PaymentAmount  = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UmemeFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UmemeFailureDetials()
                {
                    Remark       = "Failed To Post To Core Banking",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }



            //notify umeme payments..joannah 9/7/2015
            PostUmemebill(CustRefence, OriginalReference, CustomerName, DRAMOUNT, "DIRECTDEBIT", "", PhoneNumber, remark, FCDBMAKERy, "254", TXNDATE, "", 0, "2", "2");


            //RESPOND HERE
            UmemeDetailsinfo.EXRef         = EXREF;
            UmemeDetailsinfo.CustReference = OriginalReference;
            UmemeDetailsinfo.PaymentAmount = DRAMOUNT;
            UmemeDetailsinfo.UmemeDetails  = new List <UmemeDetials>();
            UmemeDetailsinfo.UmemeDetails.Add(new UmemeDetials()
            {
                CustomerName = CustNamex,
                AmountPaid   = OutstandingBalx,
                Responcecode = "00",
                Remark       = CustRemarks
            });
            return(UmemeDetailsinfo.EXRef.ToString());
        }
        public String FinpayURA(string CustPRN, string EXREF, string DRACCBRANCH,
                                string DRACCOUNTNUMBER, string DRAMOUNT, string DRACCURR, string TXNDATE,
                                string TXNTIME)
        {
            string TINc          = "";
            string TaxPayernamec = "";
            string amountduec    = "";
            string ExpDatec      = "";
            string RegDatec      = "";
            string Remarkc       = "";

            string PRNResponse = "";
            string OriginalPRN = "";
            string FCDBSetings = "";

            string FCDBINTERNALGL      = "";
            string FCDBTELLERCODE      = "";
            string FCDBDESC            = "";
            string FCDBTILLID          = "";
            string FCDBLIMIT           = "";
            string FCDBMAKERy          = "";
            string FCDBCHECKERy        = "";
            string Subhosty            = "";
            string Msgtypey            = "";
            string Procodey            = "";
            string Commissiony         = "";
            string Trantypey           = "";
            string Terminaly           = "";
            string Batchy              = "";
            string MessageFlagy        = "";
            string Workstationy        = "";
            string PosConfirmedy       = "";
            string PosReversedy        = "";
            string EftSourcey          = "";
            string IbTxny              = "";
            string Flexuseridy         = "";
            string UtilityAccountY     = "";
            string UtilityAccBranchY   = "";
            string UtilityAccCurrencyY = "";
            string MerchantTypeY       = "";

            string statuscodex = "";

            string[] FCDBSetting = null;

            bool isrepeat     = false;
            bool istransacted = false;
            bool issuccess    = false;
            bool isexisting   = false;

            OriginalPRN = CustPRN;

            var FailureDetailsinfo = new URAFCDBResponse();
            var TaxDetailsinfo     = new URAFCDBResponse();

            InterfaceUra IU = new InterfaceUra();

            //string results_= IU.PullRegistrationDetails(CustPRN);
            //***** Lets Validate this before even bothering flex.

            try
            {
                // ---------------------- Validate the Prn -------------------------
                System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
                URAGateway.UraPmtService     service = new URAGateway.UraPmtService();
                eTaxPmtLibrary.UraEncryption uraEnc  = new eTaxPmtLibrary.UraEncryption();
                string EnctryptionAlgorith           = "rijndael";
                FinpayiSecurity.CryptoFactory CryptographyFactory = new FinpayiSecurity.CryptoFactory();
                FinpayiSecurity.ICrypto       Cryptographer       = CryptographyFactory.MakeCryptographer(EnctryptionAlgorith);
                MyAPIPass     = fn.GetFinpayParameter("Select ItemValue from Parameters where ItemKey = 'URAWEBPASS'");
                MyAPIUserName = fn.GetFinpayParameter("Select ItemValue from Parameters where ItemKey = 'URAWEBUSER'");
                string UraPassword = Cryptographer.Decrypt(MyAPIPass);
                string s           = uraEnc.EncryptedData(UraPassword, x509Cert_ura);
                URAGateway.PaymentRegEntity res = service.GetPRNDetails(MyAPIUserName, s, System.Configuration.ConfigurationManager.AppSettings["BANK_SHORT_CODE"], CustPRN);

                string remark       = "";
                string TaxPayername = res.TaxpayerName;
                string amountdue    = res.Amount;
                string TIN          = res.Tin;
                string ExpDate      = res.ExpiryDt;
                string RegDate      = res.PaymentRegDt;
                string statuscode   = res.StatusCode;
                if (amountdue != DRAMOUNT)
                {
                    return("UNSUCCESSFUL - INVALID AMOUNT " + DRAMOUNT + " INSTEAD OF " + amountdue);
                }
                Boolean auth = false;

                switch (statuscode)
                {
                case "A":
                    //auth = true;
                    //remark = "Awaiting To Transact : " + res.StatusDesc;
                    break;

                case "C":
                    //auth = false;
                    return("Registration has been cancelled by URA! : " + res.StatusDesc);

                //break;
                case "X":
                    //auth = false;
                    return("Registration has expired! : " + res.StatusDesc);

                //break;
                case "T":
                    //auth = false;
                    return("Registration has already been transacted! : " + res.StatusDesc);

                //break;
                default:
                    //auth = false;
                    return("Results Unknown! : " + res.StatusDesc);
                    //break;
                }
                Datamanagement.PushRegistrationDetails(CustPRN);
                Datamanagement.UpdateURARegDetails(CustPRN, TaxPayername, amountdue, TIN, ExpDate, RegDate, remark, auth, statuscode);
                //urapt.Close();
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }

            //*****


            Thread.Sleep(5000);
            //Validate PRN here
            PRNResponse = Datamanagement.getPRNDetails(CustPRN);
            string[] prndets = null;

            prndets = PRNResponse.Split('|');

            string sp_reference = "";

            TINc          = prndets[0];
            TaxPayernamec = prndets[1];
            amountduec    = prndets[2];
            ExpDatec      = prndets[3];
            RegDatec      = prndets[4];
            Remarkc       = prndets[5];
            statuscodex   = prndets[6];

            switch (statuscodex)
            {
            case "A":
                //Continue
                break;

            default:
                //Do Zilch
                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.PRNNUMBER      = CustPRN;
                FailureDetailsinfo.TaxAmount      = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UraFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UraFailureDetials()
                {
                    Remark       = Remarkc,
                    statuscode   = statuscodex,
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            //Get FCDB details here

            FCDBSetings = Datamanagement.getFCDBSettings("TAX");
            FCDBSetting = FCDBSetings.Split('|');

            FCDBINTERNALGL = FCDBSetting[0];
            FCDBTELLERCODE = FCDBSetting[1];
            FCDBDESC       = FCDBSetting[2];
            FCDBTILLID     = FCDBSetting[3];
            FCDBLIMIT      = FCDBSetting[4];

            FCDBMAKERy          = FCDBSetting[5];
            FCDBCHECKERy        = FCDBSetting[6];
            Subhosty            = FCDBSetting[7];
            Msgtypey            = FCDBSetting[8];
            Procodey            = FCDBSetting[9];
            Commissiony         = FCDBSetting[10];
            Trantypey           = FCDBSetting[11];
            Terminaly           = FCDBSetting[12];
            Batchy              = FCDBSetting[13];
            MessageFlagy        = FCDBSetting[14];
            Workstationy        = FCDBSetting[15];
            PosConfirmedy       = FCDBSetting[16];
            PosReversedy        = FCDBSetting[17];
            EftSourcey          = FCDBSetting[18];
            IbTxny              = FCDBSetting[19];
            Flexuseridy         = FCDBSetting[20];
            UtilityAccountY     = FCDBSetting[21];
            UtilityAccBranchY   = FCDBSetting[22];
            UtilityAccCurrencyY = FCDBSetting[23];
            MerchantTypeY       = FCDBSetting[24];


            //Check if already transacted
            istransacted = Datamanagement.isalreadyTransacted(CustPRN);
            switch (istransacted)
            {
            case true:
                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.PRNNUMBER      = CustPRN;
                FailureDetailsinfo.TaxAmount      = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UraFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UraFailureDetials()
                {
                    Remark       = "Registration has already been transacted",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;

            default:
                break;
            }

            CustPRN = CustPRN + Trantypey;

            sp_reference = CustPRN + "-" + TaxPayernamec;

            isexisting = Datamanagement.isalreadyExisting(OriginalPRN);
            switch (isexisting)
            {
            case true:
                //update source as fcdb
                Datamanagement.UpdatePRNSource(OriginalPRN, "FCDB");
                break;

            case false:
                //insert into registration
                Datamanagement.insertnewfcdbpayment(OriginalPRN, TINc, TaxPayernamec, amountduec, RegDatec, ExpDatec,
                                                    statuscodex, "FCDB");
                break;
            }

            //update CLEAREDSTATUS here
            //Datamanagement.UpdateRegistration(CustPRN, "CLEARING CHEQUE");
            //check whether transaction already sent to the bridge
            isrepeat = Datamanagement.isalreadyPosted(CustPRN);
            if (isrepeat == false)
            {
                //post to the bridge
                Datamanagement.InsertIntoLog(CustPRN, Subhosty,
                                             Msgtypey, Procodey, TXNDATE, TXNTIME, DRACCBRANCH, CustPRN, CustPRN,
                                             DRAMOUNT, Commissiony, DRACCOUNTNUMBER, MerchantTypeY, EXREF, Terminaly,
                                             DRACCBRANCH,
                                             Batchy, Terminaly, sp_reference, DRACCOUNTNUMBER, DRACCURR, "0",
                                             MessageFlagy, Workstationy,
                                             PosConfirmedy, PosReversedy, "0", UtilityAccountY, UtilityAccBranchY,
                                             MerchantTypeY, EftSourcey, IbTxny, "", Flexuseridy);
            }

            Thread.Sleep(5000);
            issuccess = Datamanagement.isSuccessful(CustPRN);
            EXREF     = Datamanagement.Ecternalref(CustPRN);
            Datamanagement.UpdateMSGIDResponded(CustPRN);
            switch (issuccess)
            {
            case true:

                Datamanagement.UpdateRegistration(OriginalPRN, TXNDATE, FCDBTELLERCODE, DRACCBRANCH, "",
                                                  UtilityAccountY, DRACCOUNTNUMBER, "C", "T", EXREF, false,
                                                  FCDBCHECKERy, "11",
                                                  UtilityAccBranchY, "", Trantypey, DRACCURR, MerchantTypeY,
                                                  UtilityAccCurrencyY);
                break;

            case false:
                FailureDetailsinfo.EXRef          = EXREF;
                FailureDetailsinfo.PRNNUMBER      = CustPRN;
                FailureDetailsinfo.TaxAmount      = DRAMOUNT;
                FailureDetailsinfo.FailureDetails = new List <UraFailureDetials>();
                FailureDetailsinfo.FailureDetails.Add(new UraFailureDetials()
                {
                    Remark       = "Failed To Post To Core Banking",
                    Responcecode = "05"
                });
                return("UNSUCCESSFUL");

                break;
            }

            //Notify URA - If successfully posted
            Datamanagement.InsertIntoBridgeRegistration(OriginalPRN, "C", TINc, DRAMOUNT, TXNDATE, TXNDATE, "T",
                                                        DRACCBRANCH, CustPRN, "", "");

            //joannah.....9/7/2015
            Thread.Sleep(5000);
            //Notify URA here
            NotifyURA(OriginalPRN, "C", TINc, DRAMOUNT, TXNDATE, TXNDATE, "T",
                      DRACCBRANCH, CustPRN, "", "");

            var strUpdate = "Update REGISTRATIONS set Sent = 1, acknowledged = 1 where PRN = prn";

            try
            {
                using (
                    var conn =
                        new SqlConnection(WebConfigurationManager.ConnectionStrings["Bridge"].ConnectionString))
                {
                    conn.Open();
                    using (var cmd = new SqlCommand(strUpdate, conn))
                    {
                        var dr = cmd.ExecuteReader();
                    }
                }
            }

            catch (Exception ex)
            {
            }

            //joannah.....9/7/2015



            //RESPOND HERE

            TaxDetailsinfo.EXRef      = EXREF;
            TaxDetailsinfo.PRNNUMBER  = CustPRN;
            TaxDetailsinfo.TaxAmount  = amountduec;
            TaxDetailsinfo.TAXDetails = new List <UraDetials>();
            TaxDetailsinfo.TAXDetails.Add(new UraDetials()
            {
                amountdue    = amountduec,
                TaxPayername = TaxPayernamec,
                TIN          = TINc,
                ExpDate      = ExpDatec,
                RegDate      = RegDatec,
                Remark       = Remarkc,
                Responcecode = "00"
            });

            return(TaxDetailsinfo.EXRef.ToString());
        }
        //======================================================================
        public static string GetURADetails(string PRN, string Area)
        {
            var DM = new Datamanagement();

            return("");
        }