Beispiel #1
0
        /// <summary>
        /// Контроль создания платежа
        /// </summary>
        public void Read()
        {
            WriteLog("Read", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                ISingleResult <ReadResult> result = db.Read(Template_tid.ToString(), Session["vru_session_id"].ToInt(), Tid, ref ErrCode, ref ErrDesc);

                if (ErrCode != 0)
                {
                    Status = 1;
                }
                else
                {
                    Status = 0;
                }
                if (Status == 0)
                {
                    foreach (ReadResult para in result)
                    {
                        GorodFields.Add(para.Name, para.Value);
                    }
                }
            }

            WriteLog("Read", false);
        }
Beispiel #2
0
        /// <summary>
        /// Закрытие сессии
        /// </summary>
        public void Logout()
        {
            WriteLog("Logout", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                db.LogOut(Session["vru_session_id"].ToInt());
            }

            WriteLog("Logout", false);
        }
Beispiel #3
0
        /// <summary>
        /// Создание платежа
        /// </summary>
        public void MakePay()
        {
            int?   NewServiceNumber = null, NewState = null, NewTid = null;
            string NewOutTid = "";

            // decimal? NewBalance, NewAmount, NewCommission;

            WriteLog("Makepay", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                Status = db.MakePay(Template_tid.ToString(),
                                    Session["vru_session"].ToInt(),
                                    Session["stc_session_id"].ToInt(),
                                    Session["service_number"].ToInt(),
                                    Mode,
                                    OutTid,
                                    CardNumber == 1? "card": "redo",
                                    ref NewServiceNumber, ref NewState, ref NewTid, ref NewOutTid,
                                    ref NewBalance, ref NewAmount, ref NewCommission,
                                    ref ErrCode, ref ErrDesc
                                    );
            }

            Session.Add("new_service_number", NewServiceNumber.ToString());
            Session.Add("new_state", NewState.ToString());
            Session.Add("new_tid", NewTid.ToString());
            Session.Add("new_out_tid", NewOutTid);
            // NewBalance = ToAmount(r.ResultSet.Tables[0].Rows[0]["new_balance"]);
            // NewAmount = ToAmount(r.ResultSet.Tables[0].Rows[0]["new_amount"]);
            // NewCommission = ToAmount(r.ResultSet.Tables[0].Rows[0]["new_commission"]);

            WriteLog("Makepay", false);

            Session["service_number"] = Session["new_service_number"];
            OutTid     = Session["new_out_tid"];
            Tid        = Session["new_tid"].ToInt();
            State      = Session["new_state"].ToInt();
            Balance    = NewBalance;
            Amount     = NewAmount;
            Commission = NewCommission;

            // Удаление промежуточных параметров сессии
            Session.Remove("new_service_number");
            Session.Remove("new_state");
            Session.Remove("new_tid");
            Session.Remove("new_out_tid");

            NewBalance    = null;
            NewAmount     = null;
            NewCommission = null;
        }
Beispiel #4
0
        /// <summary>
        /// Кодирование ПИН-кода
        /// </summary>
        /// <returns></returns>
        public int Calc()
        {
            WriteLog("Calc", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                // 1 - раскодировать, 0 - закодировать
                db.EncodePin(null, CardNumber, IsNumeric(PIN)? 1: 0, ref PINout);
            }

            WriteLog("Calc", false);

            return(0);
        }
Beispiel #5
0
        /// <summary>
        /// Сохранение поля
        /// </summary>
        /// <param name="FieldName"></param>
        /// <param name="Value"></param>
        public void Save(string FieldName, string FieldValue)
        {
            this.FieldName  = FieldName;
            this.FieldValue = FieldValue;

            WriteLog("Save", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                Status = db.Save(Template_tid.Value, Session["vru_session_id"].ToInt(), FieldName, FieldValue, ref ErrCode, ref ErrDesc);
            }

            WriteLog("Save", false);
        }
Beispiel #6
0
        /// <summary>
        /// Открытие или продление сессии
        /// </summary>
        void CheckLogin()
        {
            WriteLog("CheckLogin", true);

            int?ServiceNumber = null,
               StcSessionId   = null,
               VruSessionId   = null,
               CallCategoryId = null;

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                int result = db.CheckLogin(null, IpAddress, null, CardNumber, PIN, ref Seria, ref ServiceNumber, ref StcSessionId, ref VruSessionId, ref CallCategoryId,
                                           ref Balance, ref ErrCode, ref ErrDesc);
            }

            if (ErrCode == 0)
            {
                Status = 0;
                Session.Add("service_number", ServiceNumber.ToString());
                Session.Add("stc_session_id", StcSessionId.ToString());
                Session.Add("vru_session_id", VruSessionId.ToString());
                Session.Add("call_category_id", CallCategoryId.ToString());
            }
            else
            {
                Status = 1;
                if (ErrCode != 50070 && ErrCode != 60005)
                {
                    CardNumber = 0;
                    Seria      = null;
                }
            }

            WriteLog("CheckLogin", false);

            if (ErrCode == 50091)
            {
                Logout();
                Status  = 0;
                ErrCode = 0;
                ErrDesc = "";
                CheckLogin();
            }
        }
Beispiel #7
0
        /// <summary>
        /// Построение шаблона
        /// </summary>
        public void BuildTemplate()
        {
            WriteLog("BuildTemplate", true);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                Status = db.BuildTemplate(Template_tid.ToString(), Session["vru_session_id"].ToInt(), ref ErrCode, ref ErrDesc);
            }

            foreach (string FName in Params.Keys)
            {
                if (Status != 0)
                {
                    break;
                }
                Save(FName, Params[FName]);
            }

            FieldName = "";

            WriteLog("BuildTemplate", false);
        }
Beispiel #8
0
        public void Run()
        {
            int    Status      = 0;
            int    ErrCode     = 0;
            string ErrDesc     = "";
            int    State       = 0;
            int    CheckId     = 0;      // Tid в ГОРОДе
            string SubInnerTid = "";     // Номер транзакции (чека)

            Log("Производится сканирование БД с {0}", XConvert.AsDate(FromDate));
            Console.WriteLine("Производится сканирование БД с {0}", XConvert.AsDate(FromDate));

            /*
             * string RequestString =
             *      @"select p.tid, d.ClientAccount, p.Card_number, p.Amount, p.Summary_Amount
             *              FROM [Gorod].[dbo].[payment] p
             *              inner join [Gorod].[dbo].[PD4] d on p.tid = d.tid
             *              where p.datepay >= {0} and p.[state] = 12 and p.[result_text] = '[BLACK] Отменён вручную'
             *              order by p.datepay;";
             */
            string RequestString =
                @"select p.DatePay, p.tid, p.template_tid, p.agent_oid, p.point_oid, d.ClientAccount, p.Card_number, p.Amount, p.Summary_Amount, p.User_id
					FROM [Gorod].[dbo].[payment] p (NOLOCK)
					inner join [Gorod].[dbo].[PD4] d (NOLOCK) on p.tid = d.tid 
					where p.datepay >= {0} and p.[state] = 12 and p.[result_text] = '[BLACK] Отменён вручную' and
						not sub_inner_tid like 'card-%' and charindex('-', sub_inner_tid) > 0
					order by p.datepay;"                    ;
            string PIN      = "";
            string Nick     = "";
            string Password = "";

            string GetNickAndPasswordRequest =
                "SELECT [login],[password] FROM [Gorod].[dbo].[user] where user_id = {0}";

            Log("Database: {0}", Properties.Settings.Default.GorodConnectionString);

            using (Gorod db = new Gorod(Properties.Settings.Default.GorodConnectionString))
            {
                IEnumerable <Payment> Payments = db.ExecuteQuery <Payment>(RequestString, FromDate);

                foreach (Payment Row in Payments)
                {
                    // string PIN = GetPIN(Row);
                    // Console.Write("tid={0} card={1}", Row.Tid, Row.CardNumber);
                    if (Row.Card_number > 0)
                    {
                        PIN = db.GetCardPIN(Row.Card_number, 1).First <PinResult>().PIN;
                    }

                    // Имя пользователя и пароль
                    IEnumerable <User> Users = db.ExecuteQuery <User>(GetNickAndPasswordRequest, Row.User_id);
                    User item = Users.First();
                    Nick     = item.Login;
                    Password = item.Password;

                    Console.WriteLine("Tid={0} {1,12:f2} {2,12:f2} Account={3,20} AgentCard={4,7} PIN={5} Point={6,4} Agent={7,4} User={8} Nick={9} Password={10}",
                                      Row.Tid, Row.Summary_amount, Row.Amount, Row.ClientAccount, Row.Card_number, PIN,
                                      Row.Point_oid, Row.Agent_oid, Row.User_id, Nick, Password);
                    Log("Tid={0} {1,12:f2} {2,12:f2} Account={3,20} AgentCard={4,7} PIN={5} Point={6,4} Agent={7,4} User={8} Nick={9} Password={10}",
                        Row.Tid, Row.Summary_amount, Row.Amount, Row.ClientAccount, Row.Card_number, PIN,
                        Row.Point_oid, Row.Agent_oid, Row.User_id, Nick, Password);

                    string QueryString = string.Format("Agent_ID={0}&Point_ID={1}&Nick={2}&Password={3}&template_tid=193&ls=900080&SUMMARY_AMOUNT={4}&tid={5}",
                                                       Row.Agent_oid, Row.Point_oid, Nick, Password, Row.Summary_amount.AsCurrency(), Outtid);

                    string Response = Get(Properties.Settings.Default.SimpleHost, Properties.Settings.Default.Endpoint, QueryString);
                    // Нет связи с платёжным сервисом
                    if (string.IsNullOrEmpty(Response))
                    {
                        break;
                    }

                    // Проверка статус и errCode
                    StringBuilder sb = new StringBuilder();
                    Status  = GetInt(Response, "/request/result/Status");
                    ErrCode = GetInt(Response, "/request/result/errCode");
                    sb.AppendFormat("Status={0} errCode={1}", Status, ErrCode);
                    ErrDesc = GetString(Response, "/request/result/errDesc");
                    if (ErrCode != 0)
                    {
                        sb.AppendFormat(" errDesc={0}", ErrDesc);
                    }
                    if (Status == 0)
                    {
                        State       = GetInt(Response, "/request/result/state");
                        CheckId     = GetInt(Response, "/request/result/out_tid");
                        SubInnerTid = GetString(Response, "/request/result/tid");
                        sb.AppendFormat(" state={0} checkid={1} subinnertid={2}", State, CheckId, SubInnerTid);
                    }
                    Console.WriteLine(sb.ToString());
                    Log("{0}", sb.ToString());

                    // Если создан новый платёж (chrckid > 0) установить статус 10 для исходного платежа
                    if (CheckId > 0)
                    {
                        db.SetStatePayment(Row.Tid, 10, 0, string.Format("Платёж перепроведён. Новый платёж {0}", CheckId));
                        // Вписать новый result_text в новый tid
                        string ResultText = string.Format("Платёж перепроведён: Tid={0} Acc={1} Pnt={2} Agn={3} SA={4} S={5} Tpl={6}",
                                                          Row.Tid, Row.ClientAccount, Row.Point_oid, Row.Agent_oid, Row.Summary_amount, Row.Amount, Row.Template_tid);
                        db.ExecuteCommand(@"update [gorod].[dbo].[payment_history] set result_text = {1} 
												where tid = {0} and old_state is null and new_state = 0 and try_state = 0"                                                ,
                                          CheckId, ResultText);
                        Utility.Log(Properties.Settings.Default.RedoLogFile, "DATE={7} Tid={0} SUM={1,12:f2} AMN={2,12:f2} ACC={3,20} CRD={4,7} PNT={5,4} AGN={6,4}",
                                    Row.Tid, Row.Summary_amount, Row.Amount, Row.ClientAccount, Row.Card_number,
                                    Row.Point_oid, Row.Agent_oid, XConvert.AsDate(Row.DatePay).Replace('T', ' '));
                    }

                    break;                     // Только одна итерация!
                }
            }
        }