using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Net; using System.IO; using Newtonsoft.Json; using Cosmos.BaseFrame; using Cosmos.UserFrame; using Cosmos.ServiceProvider; using Cosmos.Common; using System.Net.Security; using System.Security.Cryptography.X509Certificates; namespace Cosmos.Network { public class NetworkHttp : INetworkHttp { private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출 private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체) private PosStatus m_cPosStatus; // 기본정보 참조 private DeviceStatus m_cDevStatus; // 장비정보 참조 public NetworkHttp() { m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보 m_cDevStatus = (DeviceStatus)StateObject.DEVICE; // POS 장치정보 } /// /// 해피오더 POST방식 Request /// /// /// /// /// /// public int HttpJsonPOST_SendReceive(string sUrl, string sWorkType, Hashtable htReqData, ref Hashtable htRspData, ref string sRespJsonData) { int iRet = BaseCom.NG; string sRespString = string.Empty; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType); string sSendJsonData = JsonConvert.SerializeObject(htReqData); UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) sSendJsonData); byte[] reqByte = Encoding.UTF8.GetBytes(sSendJsonData); req.Method = "POST"; req.ContentType = "application/json"; req.ContentLength = reqByte.Length; // create our stream to send Stream webDataStream = req.GetRequestStream(); webDataStream.Write(reqByte, 0, reqByte.Length); // get thre response from our stream WebResponse resp = req.GetResponse(); webDataStream = resp.GetResponseStream(); // convert the result into a string StreamReader respStreamReader = new StreamReader(webDataStream); string respFromServer = respStreamReader.ReadToEnd(); respStreamReader.Close(); UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) respFromServer); Hashtable temp = JsonConvert.DeserializeObject(respFromServer); foreach (string key in temp.Keys) { string jsonString = temp[key].ToString(); if (key.Equals("status")) { Hashtable htHeader = JsonConvert.DeserializeObject(jsonString); if (htHeader["status"].ToString().Equals("200")) { iRet = BaseCom.OK; } htRspData = htHeader; } else { sRespJsonData = jsonString; } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } /// /// 해피오더 GET방식 Request /// /// 서버URL /// 작업구분 /// 요청Data /// JSON String 형태의 응답 데이터 /// public int HttpJsonGET_SendReceive(string sUrl, string sWorkType, string sReqData, ref string sRespJsonData) { int iRet = BaseCom.NG; string sRespString = string.Empty; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType + "?" + sReqData); req.Method = "GET"; UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) sUrl + sWorkType + "?" + sReqData); using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) { Stream stream = resp.GetResponseStream(); //StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("UTF-8")); StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("ks_c_5601-1987")); sRespString = streamReader.ReadToEnd(); streamReader.Close(); } UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명)) sRespString); Hashtable temp = JsonConvert.DeserializeObject(sRespString); foreach (string key in temp.Keys) { string jsonString = temp[key].ToString(); if (key.Equals("status")) { Hashtable htHeader = JsonConvert.DeserializeObject(jsonString); if (htHeader["status"].ToString().Equals("200")) { iRet = BaseCom.OK; } } else { sRespJsonData = jsonString; } } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } /// /// GET방식 Request /// /// 서버URL /// 작업구분 /// 요청Data /// JSON String 형태의 응답 데이터 /// public int HttpGET_SendReceive(string sUrl, string sWorkType, string sReqData, string sEncodingFlag, ref string sRespData) { int iRet = BaseCom.NG; string sRespString = string.Empty; StreamReader streamReader = null; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType + "?" + sReqData); req.Method = "GET"; using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) { Stream stream = resp.GetResponseStream(); if (sEncodingFlag == PosConst.ENCODING_FLAG.UTF) { streamReader = new StreamReader(stream, Encoding.GetEncoding("UTF-8")); } else { streamReader = new StreamReader(stream, Encoding.GetEncoding("ks_c_5601-1987")); } sRespString = streamReader.ReadToEnd(); streamReader.Close(); } iRet = BaseCom.OK; sRespData = sRespString; } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } /// /// 해피버즈 http 통신 /// /// /// /// /// /// /// public int HttpJsonPOST_SendReceiveForBuzz(string sUrl, string sWorkType, Hashtable htReqData, ref Hashtable htRspData) { int iRet = BaseCom.NG; string sRespString = string.Empty; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType); string sSendJsonData = JsonConvert.SerializeObject(htReqData); byte[] reqByte = Encoding.UTF8.GetBytes(sSendJsonData); req.Method = "POST"; req.ContentType = "application/json"; req.ContentLength = reqByte.Length; // create our stream to send Stream webDataStream = req.GetRequestStream(); webDataStream.Write(reqByte, 0, reqByte.Length); // get thre response from our stream WebResponse resp = req.GetResponse(); webDataStream = resp.GetResponseStream(); // convert the result into a string StreamReader respStreamReader = new StreamReader(webDataStream); string respFromServer = respStreamReader.ReadToEnd(); respStreamReader.Close(); htRspData = JsonConvert.DeserializeObject(respFromServer); if (htRspData["result"].Equals(true)) { iRet = BaseCom.OK; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } /// /// 관공서 방문 알림 통신 /// /// /// /// /// /// /// public int HttpPOST_SendReceiveForGoverVisit(string sUrl, string sWorkType, Hashtable htReqData, ref Hashtable htRspData) { int iRet = BaseCom.NG; string sRespString = string.Empty; try { // 요청 String -> 요청 Byte 변환 byte[] byteDataParams = UTF8Encoding.UTF8.GetBytes(htReqData.ToString()); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType); req.Method = "POST"; // 기본값 "GET" req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = byteDataParams.Length; // 요청 Byte -> 요청 Stream 변환 Stream stDataParams = req.GetRequestStream(); stDataParams.Write(byteDataParams, 0, byteDataParams.Length); stDataParams.Close(); // 요청, 응답 받기 HttpWebResponse response = (HttpWebResponse)req.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) { iRet = BaseCom.OK; } //HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl + sWorkType); //string sSendJsonData = JsonConvert.SerializeObject(htReqData); //byte[] reqByte = Encoding.UTF8.GetBytes(sSendJsonData); //req.Method = "POST"; //req.ContentType = "application/json"; //req.ContentLength = reqByte.Length; //// create our stream to send //Stream webDataStream = req.GetRequestStream(); //webDataStream.Write(reqByte, 0, reqByte.Length); //// get thre response from our stream //WebResponse resp = req.GetResponse(); //webDataStream = resp.GetResponseStream(); //// convert the result into a string //StreamReader respStreamReader = new StreamReader(webDataStream); //string respFromServer = respStreamReader.ReadToEnd(); //respStreamReader.Close(); //htRspData = JsonConvert.DeserializeObject(respFromServer); //if (htRspData["result"].Equals(true)) //{ // iRet = BaseCom.OK; //} } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } // #20170616, 해피앱 스탬프 Start /// /// 해피앱 스탬프 http 통신 /// /// /// /// /// public int HttpJsonPOST_SendReceiveForStamp(string sUrl, Hashtable htReqData, ref Hashtable htRspData) { int iRet = BaseCom.NG; string sRespString = string.Empty; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sUrl); string sSendJsonData = JsonConvert.SerializeObject(htReqData); UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // project name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // class name (class name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // function name (function name (함수명)) sSendJsonData); byte[] reqByte = Encoding.UTF8.GetBytes(sSendJsonData); req.Method = "post"; req.ContentType = "application/json"; req.ContentLength = reqByte.Length; //#20171117 해피앱 스탬프 timeout 설정 start req.Timeout = 3000; //#20171117 해피앱 스탬프 timeout 설정 end // create our stream to send Stream webDataStream = req.GetRequestStream(); webDataStream.Write(reqByte, 0, reqByte.Length); // get thre response from our stream WebResponse resp = req.GetResponse(); webDataStream = resp.GetResponseStream(); // convert the result into a string StreamReader respStreamReader = new StreamReader(webDataStream); string respFromServer = respStreamReader.ReadToEnd(); respStreamReader.Close(); UserLog.WriteLogFile(UserCom.LOG_SOCK, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // project name (프로젝트명) System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // class name (class name (클래스명)) System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // function name (function name (함수명)) respFromServer); htRspData = JsonConvert.DeserializeObject(respFromServer); if (htRspData["result"].Equals("00")) { iRet = BaseCom.OK; } } catch (Exception ex) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.ToString()); } return iRet; } // #20170616, 해피앱 스탬프 End //contentType 에 따른 HTTP Post 전송, girak.kim , 2017.09.11 public static bool CheckValidationResult(object sender, X509Certificate certficate, X509Chain chain, SslPolicyErrors errors) { return true; } #region HTTP Post 전송 //#20170911.001, Http post 통신 추가 start;girak.kim; /// /// /// /// 경로 /// 전송 컨텐츠 타입 /// 전송 데이타 /// 결과 데이타 /// public int HttpPOST_SendReceive(string sUrl, string sContentType, string sReqString, ref string sRespData) { int iRet = BaseCom.NG; string result = ""; int nConnecLimit = 200; HttpWebRequest request = null; HttpWebResponse response = null; Stream reqStream = null; try { ServicePointManager.DefaultConnectionLimit = nConnecLimit;//동시 연결 if (sUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))//ssl 일 경우 인증서 무시 { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); } Uri uri = new Uri(sUrl); request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "POST"; request.Timeout = 30000;//30sec request.ContentType = sContentType;// "text/xml";// "text/xml; encoding='UTF-8'"; //request.KeepAlive = false; byte[] bData = System.Text.Encoding.UTF8.GetBytes(sReqString); request.ContentLength = bData.Length; reqStream = request.GetRequestStream(); reqStream.Write(bData, 0, bData.Length); reqStream.Close(); response = (HttpWebResponse)request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); sRespData = result; iRet = BaseCom.OK; } catch (System.Threading.ThreadAbortException e) { //e.Message // System.Threading.Thread.ResetAbort(); UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", e.ToString()); } catch (WebException e) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", e.ToString()); if (e.Status == WebExceptionStatus.ProtocolError) { // (HttpWebResponse)e.Response).StatusCode; //(HttpWebResponse)e.Response).StatusDescription; } //throw new Exception(e.ToString()); } catch (Exception e) { UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", e.ToString()); //throw new Exception(e.ToString()); } finally { if (response != null) response.Close(); if (request != null) request.Abort(); } sRespData = result; return iRet; } //#20170911.001, Http post 통신 추가 end;girak.kim; #endregion } }