Exemple #1
0
        /// <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}");
            }
        }
Exemple #2
0
        /// <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");
                }
            }
        }
Exemple #3
0
        /// <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);
 }
Exemple #5
0
        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);
        }
Exemple #6
0
        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 += "&timestamp=";
                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()}");
            }
        }
Exemple #7
0
        /// <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);
 }
Exemple #9
0
        /// <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);
        }
Exemple #10
0
 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);
        }
Exemple #12
0
        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 += "&timestamp=";
                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);   // 优先自定义
            }
        }
Exemple #14
0
        /// <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);
            }
        }
Exemple #15
0
        /// <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");
        }
Exemple #17
0
 /// <summary>
 /// 设置当前Node节点ID
 /// </summary>
 private void SetCurCashierNodeID(int nNodeID)
 {
     if (m_nNodeId != nNodeID)
     {
         LOGGER.WARN($"Node id changed, {m_nNodeId} -> {nNodeID}");
     }
     m_nNodeId = nNodeID;
 }
Exemple #18
0
 public void SetJavaPublicKey(string key)
 {
     if (!string.Equals(key, m_strJavaPublicKey))
     {
         LOGGER.WARN($"Java RSA public key changed. {m_strJavaPublicKey} -> {key}");
     }
     m_strJavaPublicKey = key;
 }
Exemple #19
0
        /// <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));
        }
Exemple #22
0
        /// <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()));
        }
Exemple #23
0
        public string GetCSharpPrivateKey()
        {
            if (string.IsNullOrEmpty(m_strCSharpPrivateKey))
            {
                LOGGER.WARN($"C# RSA private key was empty.");
                GenCSharpKey();
            }

            return(m_strCSharpPrivateKey);
        }
Exemple #24
0
        /// <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);
        }
Exemple #25
0
 /// <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.");
     }
 }
Exemple #26
0
 /// <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);
     }
 }
Exemple #27
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);
        }
Exemple #29
0
        /// <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);
        }
Exemple #30
0
        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;
        }