/// <summary> /// 按下执行消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_DoCmd_Click(object sender, EventArgs e) { string strCmd = textBox_Cmd.Text; string[] strCmds = strCmd.Split(' '); if (strCmds.Length < 1) { button_Help_Click(null, null); return; } bool bSuccessed = false; string strRet = string.Empty; if (strCmds.Length == 1) { bSuccessed = DoCmd(strCmds[0], null, ref strRet); } else { bSuccessed = DoCmd(strCmds[0], strCmds.Skip(1).ToArray(), ref strRet); } if (bSuccessed) { LOGGER.INFO($"DoCmd {strCmds[0]} successed \n {strRet}"); } else { LOGGER.WARN($"DoCmd {strCmds[0]} failed. \n {strRet}"); } }
/// <summary> /// 创建Web服务器 /// </summary> private void CreateWebServer() { try { if (FKConfig.IsUseHttpServer) { m_WebServer = new FKHttp.FKHttpServer(this, RequestReciver.Func_OnRequest, FKConfig.IsUseHttpsWebServer, FKConfig.WebServerListenUrl); } } catch (Exception e) { LOGGER.ERROR($"Create web server failed. Error = {e.ToString()}", 0); } if (m_WebServer == null || !m_WebServer.IsRunning()) { LOGGER.WARN("Web server is not running."); } else { if (m_WebServer.IsSupportingSSL()) { LOGGER.INFO("Create web server successed. Support HTTPS"); } else { LOGGER.INFO("Create web server successed. Only support HTTP"); } } }
/// <summary> /// 判断当前已打开的IE中账号 与 当前任务账号 是否一致 /// </summary> /// <param name="info"></param> /// <returns></returns> private bool IsSameAccount(SBillTaskInfo info) { // 未登录,直接登录即可 if (!s_bIsLogining) { return(true); } try { var currUser = getCardInfo(); if (currUser.userName == info.username) { LOGGER.INFO($"当前在线用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}]和登录用户一致"); return(true); } } catch { LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}], 当前在线用户可能不是BCM用户"); return(false); } LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}], 当前在线用户可能不是BCM用户"); return(false); }
/// <summary> /// 查找指定名的进程ID组 /// </summary> /// <param name="strProcName"></param> /// <returns></returns> private static int[] SearchProcessIDByName(string strProcName) { int[] ret = new int[8]; // 最大认为会有8个用户 try { Process[] ps = Process.GetProcessesByName(strProcName); if (ps.Length > 0) { int nIndex = 0; foreach (var process in ps) { if (nIndex < 8 && nIndex >= 0) { ret[nIndex] = process.Id; } nIndex++; } } else { return(null); } } catch (Exception e) { LOGGER.WARN($"Search process ID by name failed. Error = {e.ToString()}"); return(null); } return(ret); }
public static int OnMsg(int nNodeID, string strRequestString, MainForm mainForm, ref string strRespone) { int nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnknownFailed; // 检查请求合法性 if (!IsValidOutTaskMsg(strRequestString, RSAKeyContainer.GetInstance.GetJavaPublicKey())) { // 消息检查未通过 nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnvalidMsg; LOGGER.WARN($"Server out task request is not a invalid msg. \n Request = {strRequestString}"); } else { SOutTaskInfo info = ParseStructFromRequest(strRequestString, RSAKeyContainer.GetInstance.GetCSharpPrivateKey()); if (info.taskID <= 0) { // 消息不正常 nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_UnvalidTaskId; LOGGER.WARN($"Server out task request is not a invalid msg. \n Request = {strRequestString} \n TaskInfo = {info.ToLogString()}"); } else { // 消息解析成功,开始逻辑处理 { // 实际处理 mainForm.AddOutTaskToWaitQueue(info); nErrorCode = (int)ENUM_OutTaskResponeError.eOutTaskRequest_Successed; } } } strRespone = ("{\"nodeID\":") + nNodeID + (",\"status\":") + nErrorCode + ("}"); return(nErrorCode); }
public override void CaclVerifyCode(string strCSharpPrivateKey) { try { info.timestamp = CaclTimestamp(); string strRet = ""; strRet += "bankCardNo="; strRet += info.bankCardNo; strRet += "&ip="; strRet += info.ip; strRet += "&publicKey="; strRet += info.publicKey; strRet += "×tamp="; strRet += info.timestamp; string strHashData = ""; FKBaseUtils.FKHash.GetHash(strRet, ref strHashData); info.signature = FKBaseUtils.FKRSASignature.RSASign(strCSharpPrivateKey, strHashData); // LOGGER.DEBUG($"Hash src = \n{strRet}\n dest = {strHashData}"); // LOGGER.DEBUG($"Sign key = \n{strCSharpPrivateKey}\n src = {strHashData}\n dest = {info.signature}"); } catch (Exception e) { LOGGER.ERROR($"Cacl verify code failed. Error = {e.ToString()}"); } }
/// <summary> /// 从服务器进行注销 /// </summary> /// <returns></returns> private bool UnregsiterFromServer() { try { SUnregisteNode node = new SUnregisteNode(); node.id = GetCurCashierNodeID(); HttpSendResult result = RequestSender.SendRequestToServer(node); if (result.IsSendSuccessed() && result.ErrorStatus == 1) { LOGGER.INFO($"Node unregiste successed. NodeID = {node.id}"); return(true); } else { LOGGER.WARN($"Node unregiste failed. NodeID = {node.id}"); return(false); } } catch (Exception e) { LOGGER.ERROR($"Node unregiste error occured. Error = {e.ToString()}"); return(false); } }
/// <summary> /// 判断当前已打开的IE中账号 与 当前任务账号 是否一致 /// </summary> /// <param name="info"></param> /// <returns></returns> private bool IsSameAccount(SBillTaskInfo info) { // 未登录,直接登录即可 if (!s_bIsLogining) { return(true); } // 已登录,从页面获取account try { FKWebDriver.GetInstance.SwitchToFrameByID("contentFrame"); // 这是判断abc,如果不是abc,此项将为0,获取失败 string accountNumber = FKWebDriver.GetInstance.GetAttributeByXPath("//*[@id=\"debit\"]", "data-acctid"); if (String.IsNullOrEmpty(accountNumber)) { LOGGER.INFO($"当前登录用户为空,需要重新登录"); return(false); } if (String.Compare(info.accountNumber, accountNumber, true) != 0) { LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.accountNumber)}], 当前在线用户[{FKBaseUtils.FKStringHelper.MaskString(accountNumber)}]"); return(false); } FKWebDriver.GetInstance.SwitchToParentFrame(); } catch { LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.accountNumber)}], 当前在线用户可能不是ABC用户"); return(false); } LOGGER.INFO($"当前在线用户[{FKBaseUtils.FKStringHelper.MaskString(info.accountNumber)}]和登录用户一致"); return(true); }
/// <summary> /// 检查远程服务器是否可以ping通 /// </summary> /// <returns></returns> private bool IsCanPingPass() { bool bRet = true; if (FKConfig.IsUsePing) { try { Uri uri = new Uri(FKConfig.ServerRegisteUrl); if (uri.Host == "") { LOGGER.WARN("Can't get server ip, stop ping service."); bRet = false; } if (!FKBaseUtils.FKCommonFunc.IsRomateExistByPingTest(uri.Host)) { LOGGER.WARN("Can't pass server ip ping test."); bRet = false; } } catch (Exception e) { LOGGER.WARN($"Ping server test failed. Error = {e.ToString()}"); bRet = false; } } return(bRet); }
private bool IsSameAccount(SBillTaskInfo info) { // 未登录,直接登录即可 if (!s_bIsLogining) { return(true); } // 已登录,从页面获取account try { // 这是判断ccb,如果不是ccb,此项将为0,获取失败 string userName = FKWebDriver.GetInstance.GetAttributeByXPath("/html/body/div[6]/div[6]/div[1]/div[1]/p/b/span", "title"); if (String.IsNullOrEmpty(userName)) { return(false); } if (String.Compare(info.username, userName, true) != 0) { LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}], 当前在线用户[{FKBaseUtils.FKStringHelper.MaskString(userName)}]"); return(false); } } catch { LOGGER.INFO($"新登录用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}], 当前在线用户可能不是CCB用户"); return(false); } LOGGER.INFO($"当前在线用户[{FKBaseUtils.FKStringHelper.MaskString(info.username)}]和登录用户一致"); return(true); }
/// <summary> /// 解析消息获取其消息ID /// </summary> /// <param name="strMsg"></param> /// <returns></returns> private static int GetMsgIDFromResponse(string strMsg) { JavaScriptSerializer js = new JavaScriptSerializer(); dynamic data; try { data = js.Deserialize <dynamic>(strMsg); // 反序列化 } catch (Exception e) { LOGGER.ERROR($"Server request is not JSON format. \n Error = {e.ToString()} \n Respone = {strMsg}"); return(-1); } // 获取消息类型 int msgID = -1; try { msgID = int.Parse(data["msgID"]); } catch (Exception e) { LOGGER.ERROR($"Server request is not include invalid msgID. \n Error = {e.ToString()} \n Respone = {strMsg}"); return(-1); } return(msgID); }
public override void CaclVerifyCode(string strCSharpPrivateKey) { try { info.timestamp = CaclTimestamp(); string strRet = ""; strRet += "bankId="; strRet += info.bankId; strRet += "&msg="; strRet += info.msg; strRet += "&nodeID="; strRet += info.nodeID; strRet += "&status="; strRet += info.status; strRet += "&taskID="; strRet += info.taskID; strRet += "×tamp="; strRet += info.timestamp; string strHashData = ""; FKBaseUtils.FKHash.GetHash(strRet, ref strHashData); info.signature = FKBaseUtils.FKRSASignature.RSASign(strCSharpPrivateKey, strHashData); } catch (Exception e) { LOGGER.ERROR($"Cacl verify code failed. Error = {e.ToString()}"); } }
/// <summary> /// 获取验证码字符串 /// </summary> /// <returns></returns> private string GetVerificationCodeString() { string tmpFile = System.IO.Path.GetTempFileName(); // 保存图片文件 if (!SaveVerificationCodeFile(tmpFile)) { return(""); } // 使用自定义方式解析出字符串 string CustomString = CustomGetStringByImage(tmpFile); // 使用OCR解析出字符串 string ORCString = "";// OCRGetStringByImage(tmpFile); CustomString = CustomString.Replace("*", ""); ORCString = ORCString.Replace("*", ""); LOGGER.INFO($"验证码:FK = {CustomString} OCR = {ORCString}"); // 删除图片文件 File.Delete(tmpFile); if (CustomString.Length != 4 && ORCString.Length == 4) { return(ORCString); } else if (CustomString.Length == 4 && ORCString.Length != 4) { return(CustomString); } else { return(CustomString); // 优先自定义 } }
/// <summary> /// 向服务器注册 /// </summary> private bool RegsiterToServer() { // 先尝试检查远程服务器是否可以ping通 bool bIsRomateCanPing = IsCanPingPass(); if (!bIsRomateCanPing) { LOGGER.ERROR("Can't pass server ip ping test, will not use registe node and heart-beat"); return(false); } // 开始注册 SRegisteNode node = new SRegisteNode(); node.bankCardNo = FKConfig.BankCardNo; node.ip = string.IsNullOrEmpty(FKConfig.LocalIP) ? FKBaseUtils.FKSystemEnviSettingHelper.GetLocalIPAddressByUri(FKConfig.ServerRegisteUrl) : FKConfig.LocalIP; node.publicKey = RSAKeyContainer.GetInstance.GetCSharpPublicKey(); LOGGER.INFO($"Begin to register to server. Bank card No = {node.bankCardNo}, Ip = {node.ip}"); HttpSendResult result = RequestSender.SendRequestToServer(node); if (result.IsSendSuccessed() && result.ErrorStatus == 1 && (!string.IsNullOrEmpty(result.publicKey))) { SetCurCashierNodeID(result.NodeID); RSAKeyContainer.GetInstance.SetJavaPublicKey(result.publicKey); LOGGER.INFO($"Register to server successed. Node id = {result.NodeID}"); return(true); } else { SetCurCashierNodeID(INVALID_NODE_ID); LOGGER.ERROR($"Register to server failed. but still use registe node and heart-beat. Node id = {GetCurCashierNodeID()}"); return(true); } }
/// <summary> /// 解析一个日志请求消息,组装一个日志请求结构 /// </summary> /// <param name="strRequestString"></param> /// <param name="strCSharpPrivateKey"></param> /// <returns></returns> private static SGetTaskLogInfo ParseStructFromRequest(string strRequestString, string strCSharpPrivateKey) { JavaScriptSerializer js = new JavaScriptSerializer(); S2CMessage_GetTaskLogRequest request = new S2CMessage_GetTaskLogRequest(); dynamic data; try { data = js.Deserialize <dynamic>(strRequestString); // 反序列化 } catch (Exception e) { LOGGER.WARN($"Server get task log request is not a invalid JSON format. \n Error = {e.ToString()} \n Request = {strRequestString}"); return(request.info); } try { request.info.taskID = int.Parse(data["taskID"]); } catch (Exception e) { LOGGER.WARN($"Parse server get task log request failed. \n Error = {e.ToString()} \n Request = {strRequestString}"); return(request.info); } return(request.info); }
/// <summary> /// 逻辑线程 /// </summary> private void LogicThreadMain() { int nIdleTime = FKConfig.LoginThreadIdleTime; LOGGER.INFO($"Start Logic thread. Idle time = {nIdleTime} millseconds."); // 建议最早更新时间:若早于该时间则一定不会进行更新事件通知 DateTime SuggestEarlistUpdateTime = DateTime.Now; string strBankType = string.Empty; int nOprationType = 0; // 0: Unknown 1: GetBill 2: Out while (!m_bIsNeedCloseLogicThread) { if (m_BillTasksList.Count > 0) { try { nOprationType = 1; strBankType = m_BillTasksList.Peek().bankCode; HandleBillTask(); } catch (Exception e) { LOGGER.ERROR($"Handle bill task failed. Error = {e.ToString()}"); } } else if (m_OutTasksList.Count > 0) { try { nOprationType = 2; strBankType = m_OutTasksList.Peek().fromBankCode; HandleOutTask(); } catch (Exception e) { LOGGER.ERROR($"Handle out task failed. Error = {e.ToString()}"); } } { // 每次无论出入账与否,都尝试进行一次刷新 try { // 根据上一次执行的任务进行update更新 SuggestEarlistUpdateTime = HandleUpdateTask(SuggestEarlistUpdateTime, nOprationType, strBankType); } catch (Exception e) { LOGGER.ERROR($"Handle update task failed. Error = {e.ToString()}"); } // 逻辑线程休眠 Thread.Sleep(nIdleTime); } } LOGGER.INFO($"Logic thread exit"); }
/// <summary> /// 设置当前Node节点ID /// </summary> private void SetCurCashierNodeID(int nNodeID) { if (m_nNodeId != nNodeID) { LOGGER.WARN($"Node id changed, {m_nNodeId} -> {nNodeID}"); } m_nNodeId = nNodeID; }
public void SetJavaPublicKey(string key) { if (!string.Equals(key, m_strJavaPublicKey)) { LOGGER.WARN($"Java RSA public key changed. {m_strJavaPublicKey} -> {key}"); } m_strJavaPublicKey = key; }
/// <summary> /// Form 启动初始化函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_Load(object sender, System.EventArgs e) { LOGGER.LOG(FKLog.FKLogImp.ENUM_LogLevel.eLogLevel_Debug, "Debug", 0); LOGGER.LOG(FKLog.FKLogImp.ENUM_LogLevel.eLogLevel_Info, "Info", 0); LOGGER.LOG(FKLog.FKLogImp.ENUM_LogLevel.eLogLevel_Warning, "Warning", 0); LOGGER.LOG(FKLog.FKLogImp.ENUM_LogLevel.eLogLevel_Error, "Error", 0); this.Text = GetAppDescption(); }
/// <summary> /// 发送Http请求给服务器 /// </summary> /// <param name="requestStruct"></param> /// <returns></returns> public static HttpSendResult SendRequestToServer(C2SStruct requestStruct) { int nTimeout = FKConfig.ConnectServerTimeout; // 连接服务器的超时时间 string strSendUrl = string.Empty; // 发送的Url string strCSharpPrivateKey = RSAKeyContainer.GetInstance.GetCSharpPrivateKey(); // C# RSA私钥 string strSendString = string.Empty; // 需要发送的字符串 string strMsgType = string.Empty; if (requestStruct is SOutTaskResult) { C2SMessage_OutTaskResult msg = new C2SMessage_OutTaskResult(); msg.info = (SOutTaskResult)requestStruct; strSendString = msg.ToPostDataString(strCSharpPrivateKey); strMsgType = msg.GetType().ToString(); strSendUrl = FKConfig.ServerReviceOutcomeResultUrl; } else if (requestStruct is SRegisteNode) { C2SMessage_RequestNode msg = new C2SMessage_RequestNode(); msg.info = (SRegisteNode)requestStruct; strSendString = msg.ToPostDataString(strCSharpPrivateKey); strMsgType = msg.GetType().ToString(); strSendUrl = FKConfig.ServerRegisteUrl; } else if (requestStruct is SHeartbeat) { C2SMessage_Heartbeat msg = new C2SMessage_Heartbeat(); msg.info = (SHeartbeat)requestStruct; strSendString = msg.ToPostDataString(strCSharpPrivateKey); strMsgType = msg.GetType().ToString(); strSendUrl = FKConfig.ServerHeartbeatUrl; } else if (requestStruct is SUnregisteNode) { C2SMessage_UnregisteNode msg = new C2SMessage_UnregisteNode(); msg.info = (SUnregisteNode)requestStruct; strSendString = msg.ToPostDataString(strCSharpPrivateKey); strMsgType = msg.GetType().ToString(); strSendUrl = FKConfig.ServerLogoutUrl; } else if (requestStruct is SBillTaskResult) { C2SMessage_GetBillResult msg = new C2SMessage_GetBillResult(); msg.info = (SBillTaskResult)requestStruct; strSendString = msg.ToPostDataString(strCSharpPrivateKey); strMsgType = msg.GetType().ToString(); strSendUrl = FKConfig.ServerReviceGetBillResultUrl; } else { LOGGER.WARN($"Can't send unknown request type."); return(null); } return(SendMsgToServer(strSendUrl, strSendString, strMsgType, nTimeout)); }
/// <summary> /// 收到的网络消息处理函数 /// </summary> /// <param name="mainForm"></param> /// <param name="request"></param> /// <param name="strRequestString"></param> /// <returns></returns> public static string Func_OnRequest(Form f, HttpListenerRequest request, string strRequestString) { MainForm mainForm = null; if (!(f is MainForm)) { LOGGER.ERROR("Can't get main form object."); return(DefaultErrorResponse(-1, -1)); } else { mainForm = f as MainForm; } if (mainForm == null) { LOGGER.ERROR("Can't get main form object."); return(DefaultErrorResponse(-1, -1)); } int nNodeID = mainForm.GetCurCashierNodeID(); int nErrorCode = -1; string strRespone = string.Empty; try { int nMsgID = GetMsgIDFromResponse(strRequestString); switch (nMsgID) { case (int)ENUM_S2CMsgID.eS2CMsgID_OutTaskRequest: nErrorCode = OutTaskRequestHandler.OnMsg(nNodeID, strRequestString, mainForm, ref strRespone); return(strRespone); case (int)ENUM_S2CMsgID.eS2CMsgID_GetTaskLogRequest: nErrorCode = GetTaskLogRequestHandler.OnMsg(nNodeID, strRequestString, mainForm, ref strRespone); break; case (int)ENUM_S2CMsgID.eS2CMsgID_ManageAction: break; case (int)ENUM_S2CMsgID.eS2CMsgID_GetBillTaskRequest: nErrorCode = GetBillTaskRequestHandler.OnMsg(nNodeID, strRequestString, mainForm, ref strRespone); break; default: LOGGER.WARN($"Unknown server request msg. \n Request = {strRequestString}"); break; } } catch (Exception e) { LOGGER.WARN($"Deal with server request msg error occured. Error = {e.ToString()} \n Request = {strRequestString}"); return(DefaultErrorResponse(nNodeID, nErrorCode)); } return(DefaultErrorResponse(nNodeID, nErrorCode)); }
/// <summary> /// 获取查询POST 正文参数 /// </summary> /// <param name="info"></param> /// <returns></returns> private string GetAutoBillPostContent(SBillTaskInfo info, int pageNumber = 1) { // 如下是获取流水必须的参数,对于不懂得参数一律直接传 /* * ACC_NO=6217004220011286774& ->卡号(一个账户下可以挂多个卡号,所以需要提供卡号) * ACC_SIGN =0101010& ->不懂 * TXCODE =310200& ->不懂 * SKEY =lL4XRK& ->这个在登录后首页隐藏的input可以获取到 * USERID =450326199308192729& ->同上 * ACCTYPE2 =12& ->不懂 * PAGE=1& ->页数 * CURRENT_PAGE=1&->页数 * LUGANGTONG =0&->不懂 * START_DATE =20160711&->开始日期 * END_DATE =20170718->结束日期 */ // POST参数表 Dictionary <string, string> postContent = new Dictionary <string, string>(); // 固定参数 postContent.Add("ACC_SIGN", "0101010"); postContent.Add("TXCODE", "310200"); postContent.Add("ACCTYPE2", "12"); postContent.Add("PAGE", $"{pageNumber}"); if (pageNumber == 1) { postContent.Add("flagnext", $"1"); } else { postContent.Add("flagnext", $"4"); } postContent.Add("CURRENT_PAGE", $"1"); postContent.Add("LUGANGTONG", "0"); // 非固定参数 try { postContent.Add("ACC_NO", info.accountNumber); postContent.Add("START_DATE", info.startTime.Substring(0, 8)); postContent.Add("END_DATE", info.endTime.Substring(0, 8)); // 如下路径是通过firebug获取,网页如果有调整此处需要相应调整 // 否则无法获取到对应的element postContent.Add("SKEY", FKWebDriver.GetInstance.GetAttributeByXPath("/html/body/div[6]/div[24]/div[3]/form/input[3]", "value")); postContent.Add("USERID", FKWebDriver.GetInstance.GetAttributeByXPath("/html/body/div[6]/div[24]/div[3]/form/input[4]", "value")); } catch (Exception e) { LOGGER.WARN($"Parser CCB bank post data failed. Error = {e.ToString()}"); return(string.Empty); } // POST参数拼接 return(string.Join("&", postContent.Select(x => x.Key + "=" + x.Value).ToArray())); }
public string GetCSharpPrivateKey() { if (string.IsNullOrEmpty(m_strCSharpPrivateKey)) { LOGGER.WARN($"C# RSA private key was empty."); GenCSharpKey(); } return(m_strCSharpPrivateKey); }
/// <summary> /// 检查消息有效性 /// </summary> /// <param name="strMsg"></param> /// <param name="strRSAPublicKey"></param> /// <returns></returns> private static bool IsValidOutTaskMsg(string strMsg, string strRSAPublicKey) { JavaScriptSerializer js = new JavaScriptSerializer(); S2CMessage_OutTaskRequest result = new S2CMessage_OutTaskRequest(); dynamic data; try { data = js.Deserialize <dynamic>(strMsg); // 反序列化 } catch (Exception e) { LOGGER.WARN($"Server out task request is not a invalid JSON format. \n Error = {e.ToString()} \n Request = {strMsg}"); return(false); } try { result.info.taskID = int.Parse(data["taskID"]); result.info.nodeID = int.Parse(data["nodeID"]); result.info.fromBankCode = data["fromBankCode"]; result.info.fromBankName = data["fromBankName"]; result.info.fromAccount = data["fromAccount"]; result.info.password = data["password"]; result.info.tradePassword = data["tradePassword"]; result.info.toBankCode = data["toBankCode"]; result.info.toBankName = data["toBankName"]; result.info.toAccount = data["toAccount"]; result.info.holderName = data["holderName"]; result.info.amount = data["amount"]; result.info.remarks = data["remarks"]; result.timestamp = long.Parse(data["timestamp"]); result.signature = data["signature"]; } catch (Exception e) { LOGGER.WARN($"Parse server out task request failed. \n Error = {e.ToString()} \n Request = {strMsg}"); return(false); } string strGetSrc = result.ToGetParamsString(); string strHashData = ""; FKBaseUtils.FKHash.GetHash(strGetSrc, ref strHashData); string strCSharpPublicKey = FKBaseUtils.FKRSAEncrypt.ConvertRSAPublicKey_Java2DotNet(strRSAPublicKey); bool bCheckSignSuccessed = FKBaseUtils.FKRSASignature.IsValidRSASign(strCSharpPublicKey, strHashData, result.signature); if (!bCheckSignSuccessed) { LOGGER.WARN($"Server out task request signature check failed."); return(false); } return(true); }
/// <summary> /// 手动关闭Form /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("确定退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { e.Cancel = true; } else { LOGGER.WARN($"FKClose app by man-made."); } }
/// <summary> /// 关闭逻辑线程 /// </summary> private void StopLogicThread() { m_bIsNeedCloseLogicThread = true; try { m_LogicThread.Abort(); } catch (Exception e) { LOGGER.ERROR($"Stop logic thread error occurred. Error = {e.ToString()}", 0); } }
/// <summary> /// 获取查询POST Url路径 /// </summary> /// <returns></returns> private string GetAutoBillPostUrl() { try { return(FKWebDriver.GetInstance.GetAttributeByXPath("/html/body/div[6]/div[24]/div[2]/form", "action")); } catch (Exception e) { LOGGER.WARN($"Parser CCB bank post data failed. Error = {e.ToString()}"); return(string.Empty); } }
private static bool IsValidGetBillRequestMsg(string strMsg, string strRSAPublicKey) { JavaScriptSerializer js = new JavaScriptSerializer(); S2CMessage_GetBillRequest request = new S2CMessage_GetBillRequest(); dynamic data; try { data = js.Deserialize <dynamic>(strMsg); // 反序列化 } catch (Exception e) { LOGGER.WARN($"Server get bill task request is not a invalid JSON format. \n Error = {e.ToString()} \n Request = {strMsg}"); return(false); } try { request.info.taskID = int.Parse(data["taskID"]); request.info.bankId = data["bankId"]; request.info.bankCode = data["bankCode"]; request.info.bankName = data["bankName"]; request.info.username = data["username"]; request.info.accountNumber = data["accountNumber"]; request.info.password = data["password"]; request.info.uKeyPassword = data["uKeyPassword"]; request.info.startTime = data["startTime"]; request.info.endTime = data["endTime"]; request.timestamp = long.Parse(data["timestamp"]); request.signature = data["signature"]; } catch (Exception e) { LOGGER.WARN($"Parse server get bill task request failed. \n Error = {e.ToString()} \n Request = {strMsg}"); return(false); } string strGetSrc = request.ToGetParamsString(); string strHashData = ""; FKBaseUtils.FKHash.GetHash(strGetSrc, ref strHashData); string strCSharpPublicKey = FKBaseUtils.FKRSAEncrypt.ConvertRSAPublicKey_Java2DotNet(strRSAPublicKey); bool bCheckSignSuccessed = FKBaseUtils.FKRSASignature.IsValidRSASign(strCSharpPublicKey, strHashData, request.signature); if (!bCheckSignSuccessed) { LOGGER.WARN($"Server get bill task request signature check failed."); return(false); } return(true); }
/// <summary> /// 时间过滤器 /// </summary> /// <param name="info"></param> /// <param name="oneBill"></param> /// <returns> false表示被过滤掉 true表示需保留</returns> public static bool TimeFilter(SBillTaskInfo info, string billTime) { string startTime = info.startTime; string endTime = info.endTime; //一天以内数据不做过滤 if (startTime.Substring(0, 8) == endTime.Substring(0, 8)) { return(true); } DateTime dateTimeStart; bool ret = DateTime.TryParseExact(startTime, "yyyyMMdd HH:mm:ss", null, DateTimeStyles.None, out dateTimeStart); if (!ret) { LOGGER.INFO($"过滤开始时间格式错误:{startTime}"); return(true); } DateTime dateTimeEnd; ret = DateTime.TryParseExact(endTime, "yyyyMMdd HH:mm:ss", null, DateTimeStyles.None, out dateTimeEnd); if (!ret) { LOGGER.INFO($"过滤结束时间格式错误:{endTime}"); return(true); } if (dateTimeEnd.CompareTo(dateTimeStart) < 0) { //LOGGER.INFO($"过滤结束时间:{endTime}早于开始时间:{startTime}"); return(true); } DateTime dateTimeSumbmit; ret = DateTime.TryParseExact(billTime, "yyyy-MM-dd HH:mm:ss", null, DateTimeStyles.None, out dateTimeSumbmit); if (!ret) { LOGGER.INFO($"明细时间格式错误:{billTime}"); return(true); } if (dateTimeSumbmit.CompareTo(dateTimeStart) < 0) { //LOGGER.INFO($"删除项时间[{billTime}],过滤开始时间[{startTime}]"); return(false); } else if (dateTimeSumbmit.CompareTo(dateTimeEnd) > 0) { //LOGGER.INFO($"删除项时间[{billTime}],过滤结束时间[{endTime}]"); return(false); } return(true); }
public void Check() { var now = DateTime.Now; int leftSeconds = secondsForEachCall - (int)now.Subtract(lastCallTime).TotalSeconds; if (leftSeconds > 0) { LOGGER.INFO($"调用频率限制,睡眠:{leftSeconds}s"); Thread.Sleep(leftSeconds * 1000); } lastCallTime = DateTime.Now; }