/// <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); }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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(); } }
/// <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); }
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; // Только одна итерация! } } }