using Newtonsoft.Json.Linq; using System; using System.IO; using System.Net; using System.Reflection; using System.Text; using MedicalInsurance.Common; namespace ChengDuMedInsu2 { class CenterServices { public string Post(string Url, string jsonParas) { GlobalVariables.writeLog("CenterServices.URL:" + Url); //GlobalVariables.writeLog("CenterServices.post入参:" + jsonParas); string strURL = Url; //创建一个HTTP请求 GlobalVariables.writeLog(strURL); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); GlobalVariables.writeLog("111"); //Post请求方式 request.Method = "POST"; //内容类型 request.ContentType = "application/json"; //设置参数,并进行URL编码 string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas); byte[] payload; //将Json字符串转化为字节 payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); //设置请求的ContentLength request.ContentLength = payload.Length; //发送请求,获得请求流 Stream writer; try { writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象 } catch (Exception) { writer = null; GlobalVariables.writeLog("连接服务器失败!"); } //将请求参数写入流 writer.Write(payload, 0, payload.Length); writer.Close();//关闭请求流 // String strValue = "";//strValue为http响应所返回的字符流 HttpWebResponse response; try { //获得响应流 response = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { response = ex.Response as HttpWebResponse; } Stream s = response.GetResponseStream(); // Stream postData = Request.InputStream; StreamReader sRead = new StreamReader(s); string postContent = sRead.ReadToEnd(); //GlobalVariables.writeLog("CenterServices.post出参:" + postContent); sRead.Close(); //解析postContent,插入医保交易日志表 //IrisServices iris = new IrisServices(); //dynamic joIris = new JObject(); //JObject joinParam = new JObject(); //joinParam = JObject.Parse(jsonParas); //JObject jooutParam = new JObject(); //jooutParam = JObject.Parse(postContent); //joIris.Add("inParam", JObject.FromObject(joinParam)); //joIris.Add("outParam", JObject.FromObject(jooutParam)); //joIris.code = "09010021"; //joIris.HospitalID = GlobalVariables.hospitalID; //joIris.InterfaceID = GlobalVariables.InterfaceID; //iris.Invoke(joIris.ToString()); return postContent;//返回Json数据 } public string Download(string url, string strParams) { string error = string.Empty; int errorCode = 0; try { GlobalVariables.writeLog("CenterServices.Download入参:" + strParams); JObject jsonInParam = JObject.Parse(strParams); string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"]; string filePath = System.Environment.CurrentDirectory +"\\Download\\" + fileName; //如果不存在目录,则创建目录 if (!Directory.Exists(System.Environment.CurrentDirectory + "\\Download")) { //创建文件夹 DirectoryInfo dirInfo = Directory.CreateDirectory(System.Environment.CurrentDirectory + "\\Download"); } if (File.Exists(filePath)) { File.Delete(filePath); } FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); string strURL = url; //创建一个HTTP请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); //Post请求方式 request.Method = "POST"; //内容类型 request.ContentType = "application/json"; //设置参数,并进行URL编码 string paraUrlCoded = strParams;//System.Web.HttpUtility.UrlEncode(jsonParas); byte[] payload; //将Json字符串转化为字节 payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); //设置请求的ContentLength request.ContentLength = payload.Length; Stream writer; try { writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象 } catch (Exception) { writer = null; errorCode = -100; error ="连接服务器失败!"; } //将请求参数写入流 writer.Write(payload, 0, payload.Length); writer.Close();//关闭请求流 // String strValue = "";//strValue为http响应所返回的字符流 //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); //创建本地文件写入流 byte[] bArr = new byte[1024]; int iTotalSize = 0; int size = responseStream.Read(bArr, 0, (int)bArr.Length); while (size > 0) { iTotalSize += size; fs.Write(bArr, 0, size); size = responseStream.Read(bArr, 0, (int)bArr.Length); } fs.Close(); responseStream.Close(); dynamic joReturn = new JObject(); joReturn.errorCode = errorCode; joReturn.error = error; joReturn.filePath = filePath; GlobalVariables.writeLog("CenterServices.Download出参:" + joReturn.ToString()); return joReturn.ToString(); } catch (Exception ex) { errorCode = -100; error = ex.Message; dynamic joReturn = new JObject(); joReturn.errorCode = errorCode; joReturn.error = error; GlobalVariables.writeLog("CenterServices.Download出参:" + joReturn.ToString()); return joReturn.ToString(); } } } class IrisServices { public string Invoke(string data) { //GlobalVariables.writeLog("IrisServices.Invoke入参:" + data); //先根据用户请求的uri构造请求地址 string url = string.Format("{0}/{1}", GlobalVariables.irisServiceIP, GlobalVariables.irisServiceURL); //log.Write(serviceUrl); //log.Write(data); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); // //把用户传过来的数据转成“UTF-8”的字节流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data); myRequest.Method = "POST"; myRequest.ContentLength = buf.Length; myRequest.ContentType = "application/json"; //myRequest.Headers.Add("Authorization", hisauthorization); //myRequest.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); //myRequest.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"); myRequest.Headers.Add("Authorization", GlobalVariables.irisServiceAuthorization); myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //发送请求 Stream stream = myRequest.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //获取接口返回值 //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 reader.Close(); myResponse.Close(); //GlobalVariables.writeLog("IrisServices.Invoke出参:" + rtn); return rtn; } } class YinHaiCom { string progID1 = "YinHai.CHS.InterfaceSCS"; System.Type YinHaiComType; object YinHaiComInstance; //public YinHaiCom() //{ // // 与指定 ProgID 关联的类型,即获取相应的Com对象 // if (YinHaiComType == null) // { // GlobalVariables.writeLog("开始创建银海Com对象"); // YinHaiComType = System.Type.GetTypeFromProgID(progID); // Init(); // } // else // { // GlobalVariables.writeLog("银海Com对象已存在"); // } //} public int Init() { YinHaiComType = System.Type.GetTypeFromProgID(progID1); // 创建Com的实例 if (YinHaiComType != null) { GlobalVariables.writeLog("开始COM组件Init"); //创建实例 YinHaiComInstance = Activator.CreateInstance(YinHaiComType); if (YinHaiComInstance != null) { GlobalVariables.writeLog("Init实例创建成功"); } //设置需要设置的参数值 object[] ParamArray = new object[2]; ParamArray[0] = 0; ParamArray[1] = ""; ParameterModifier[] ParamMods = new ParameterModifier[1]; ParamMods[0] = new ParameterModifier(2); // 初始化为接口参数的个数 ParamMods[0][0] = true; ParamMods[0][1] = true; // 设置第二个参数为返回参数,调用含有ParameterModifier数组的重载函数 YinHaiComType.InvokeMember("yh_CHS_init", // 接口函数名 BindingFlags.Default | BindingFlags.InvokeMethod, null, YinHaiComInstance, // 调用的COM组件 ParamArray, // 参数数组 ParamMods, // 指定返回参数的ParameterModifier数组 null, null); string Msg = "加载成功:" + ParamArray[1].ToString(); GlobalVariables.writeLog(Msg + "___" + ParamArray[0].ToString()); return (int)ParamArray[0]; } else { string Msg = "YinHaiComType加载失败!"; GlobalVariables.writeLog(Msg); return 1; } } public void Call(string infno,string input,out string output) { try { if (YinHaiComType != null) { //创建实例,不能再次创建,否则会提示没有初始化 //YinHaiComInstance = Activator.CreateInstance(YinHaiComType); if (YinHaiComInstance != null) { GlobalVariables.writeLog("实例创建成功,准备调用Call服务"); } else { output = "实例不存在!"; GlobalVariables.writeLog("实例不存在"); return; } //GlobalVariables.writeLog("入参infno:" + infno); //GlobalVariables.writeLog("入参input:" + input); //设置需要设置的参数值 object[] ParamArray = new object[3]; ParamArray[0] = infno; ParamArray[1] = input; ParamArray[2] = ""; ParameterModifier[] ParamMods = new ParameterModifier[1]; ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数 //ParamMods[0][0] = false; //ParamMods[0][1] = false; ParamMods[0][2] = true; YinHaiComType.InvokeMember("yh_CHS_call", // 接口函数名 BindingFlags.Default | BindingFlags.InvokeMethod, null, YinHaiComInstance, // 调用的COM组件 ParamArray, // 参数数组 ParamMods, // 指定返回参数的ParameterModifier数组 null, null); output = ParamArray[2].ToString(); GlobalVariables.writeLog("Com输出:" + output); } else { output = "COM加载失败!"; GlobalVariables.writeLog("COM加载失败!"); } } catch (Exception ex) { output = ex.Message; GlobalVariables.writeLog("COM加载失败!"+ output); } // if (YinHaiComType == null) // { // output = "未找到组件,请先调用ComInit或者检查运行环境!"; // GlobalVariables.writeLog(output); // return ; // } // //设置需要设置的参数值 // object[] ParamArray = new object[3]; // ParamArray[0] = infno; // ParamArray[1] = input; // ParamArray[2] = ""; // ParameterModifier[] ParamMods = new ParameterModifier[1]; // ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数 // ParamMods[0][2] = true; // 设置第二个参数为返回参数 // //调用含有ParameterModifier数组的重载函数 // YinHaiComType.InvokeMember("yh_CHS_call", // 接口函数名 // BindingFlags.Default | BindingFlags.InvokeMethod, // null, // YinHaiComInstance, // 调用的COM组件 // ParamArray, // 参数数组 // ParamMods, // 指定返回参数的ParameterModifier数组 // null, //null); // output = ParamArray[2].ToString(); } public void Print(string input, out string output) { if (YinHaiComType != null) { //创建实例,不能再次创建,否则会提示没有初始化 //YinHaiComInstance = Activator.CreateInstance(YinHaiComType); if (YinHaiComInstance != null) { GlobalVariables.writeLog("实例创建成功,准备调用Call服务"); } else { output = "实例不存在!"; GlobalVariables.writeLog("实例不存在"); return; } //GlobalVariables.writeLog("入参infno:" + infno); //GlobalVariables.writeLog("入参input:" + input); //设置需要设置的参数值 object[] ParamArray = new object[2]; ParamArray[0] = input; ParamArray[1] = ""; ParameterModifier[] ParamMods = new ParameterModifier[1]; ParamMods[0] = new ParameterModifier(2); // 初始化为接口参数的个数 //ParamMods[0][0] = false; //ParamMods[0][1] = false; ParamMods[0][1] = true; YinHaiComType.InvokeMember("yh_CHS_print", // 接口函数名 BindingFlags.Default | BindingFlags.InvokeMethod, null, YinHaiComInstance, // 调用的COM组件 ParamArray, // 参数数组 ParamMods, // 指定返回参数的ParameterModifier数组 null, null); output = ParamArray[1].ToString(); } else { output = "COM加载失败!"; GlobalVariables.writeLog("COM加载失败!"); } // if (YinHaiComType == null) // { // output = "未找到组件,请先调用ComInit或者检查运行环境!"; // GlobalVariables.writeLog(output); // return ; // } // //设置需要设置的参数值 // object[] ParamArray = new object[3]; // ParamArray[0] = infno; // ParamArray[1] = input; // ParamArray[2] = ""; // ParameterModifier[] ParamMods = new ParameterModifier[1]; // ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数 // ParamMods[0][2] = true; // 设置第二个参数为返回参数 // //调用含有ParameterModifier数组的重载函数 // YinHaiComType.InvokeMember("yh_CHS_call", // 接口函数名 // BindingFlags.Default | BindingFlags.InvokeMethod, // null, // YinHaiComInstance, // 调用的COM组件 // ParamArray, // 参数数组 // ParamMods, // 指定返回参数的ParameterModifier数组 // null, //null); // output = ParamArray[2].ToString(); } public void Destroy(out string output) { // 创建Com的实例 if (YinHaiComType != null) { //创建实例 YinHaiComInstance = Activator.CreateInstance(YinHaiComType); if (YinHaiComInstance != null) { GlobalVariables.writeLog("实例创建成功,准备调用Call服务"); } else { output = "实例不存在!"; GlobalVariables.writeLog("实例不存在"); return; } //设置需要设置的参数值 object[] ParamArray = new object[0]; ParameterModifier[] ParamMods = new ParameterModifier[0]; ParamMods[0] = new ParameterModifier(0); // 初始化为接口参数的个数 YinHaiComType.InvokeMember("yh_CHS_destroy", // 接口函数名 BindingFlags.Default | BindingFlags.InvokeMethod, null, YinHaiComInstance, // 调用的COM组件 ParamArray, // 参数数组 ParamMods, // 指定返回参数的ParameterModifier数组 null, null); output = "destroy成功!"; } else { output = "COM加载失败!"; GlobalVariables.writeLog("COM加载失败!"); } } } }