| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- using Newtonsoft.Json.Linq;
- using PTMedicalInsurance.Common;
- using PTMedicalInsurance.Variables;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- namespace PTMedicalInsurance.Helper
- {
- class InvokeRestCenter : IInvokeCenter
- {
- public int Business(string inputData, ref string outputData, ref string pErrMsg)
- {
- //Global.writeLog("开始");
- ////南昌的电脑环境貌似不支持httpclient
- //if ((Global.inf.hospitalDr == 26) || (Global.inf.hospitalDr == 27))
- //{
- // Global.writeLog("开始1");
- // return BusinessDefault(inputData, ref outputData, ref pErrMsg);
- //}
- //else
- //{
- // Global.writeLog("开始2");
- // var result = BusinessClient(inputData);
- // outputData = result.OutputData;
- // pErrMsg = result.ErrMsg;
- // return result.Success;
- //}
- return BusinessDefault(inputData, ref outputData, ref pErrMsg);
- //var result = BusinessClientAsync(inputData).Result;
- }
- //public async Task<(string OutputData, int Success, string ErrMsg)> BusinessClientAsync(string inputData)
- ////public async Task<BusinessResult> BusinessClientAsync(string inputData)
- //{
- // Dictionary<string, string> headers = new Dictionary<string, string> { { "access-token", "98d39db4ca7a6a6980eb95f3778b14e8" } };
- // Object body = inputData;
-
- // HttpClientHelper.ContentType contentType = HttpClientHelper.ContentType.Json;
- // HttpClientHelper.Instance.SetBaseAddress(Global.curEvt.URL);
- // Global.writeLog($"当前类型:{Global.curEvt.restfulType}");
- // if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
- // {
- // Dictionary<string, string> formData = new Dictionary<string, string> { };
- // JArray ja = JArray.Parse(inputData);
- // foreach (JObject jo in ja)
- // {
- // foreach (var property in jo.Properties())
- // {
- // formData[property.Name] = property.Value?.ToString();
- // Global.writeLog(property.Name, formData[property.Name],"");
- // }
-
- // }
- // body = formData;
- // contentType = HttpClientHelper.ContentType.FormData;
- // }
- // if (Global.curEvt.restfulType == RestfulType.BaseLine)
- // {
- // String stamp = TimeStamp.get13().ToString();
- // string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
- // //南昌增加头部信息
- // string sTemp = "_api_access_key=" + Global.inf.AK
- // + "&_api_name=" + apiName
- // + "&_api_timestamp=" + stamp
- // + "&_api_version=" + "1.0.0";
- // string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
- // headers = new Dictionary<string, string>
- // {
- // { "_api_version", "1.0.0"},
- // { "_api_timestamp", stamp },
- // { "_api_name", apiName },
- // { "_api_signature", signature },
- // { "_api_access_key", Global.inf.AK }
- // };
- // body = inputData;
- // contentType = HttpClientHelper.ContentType.Json;
- // }
- // var result = await HttpClientHelper.Instance.SendRequestAsync(
- // HttpMethod.Post,
- // Global.curEvt.URL,
- // body,
- // headers,
- // contentType);
- // return (result.Result, result.IsSuccess ? 0 : -1, result.ErrorMessage);
- // //BusinessResult result1 = new BusinessResult();
- // //result1.Success = result.IsSuccess ? 0 : -1;
- // //result1.OutputData = result.Result;
- // //result1.ErrMsg = result.ErrorMessage;
- // //return result1;
- //}
- public (string OutputData, int Success, string ErrMsg) BusinessClient(string inputData)
- {
- Global.writeLog("BusinessClientAsync");
- Dictionary<string, string> headers = new Dictionary<string, string> { { "access-token", "98d39db4ca7a6a6980eb95f3778b14e8" } };
- Object body = inputData;
- HttpClientHelper.ContentType contentType = HttpClientHelper.ContentType.Json;
- HttpClientHelper.Instance.SetBaseAddress(Global.curEvt.URL);
- Global.writeLog($"当前类型:{Global.curEvt.restfulType}");
- if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
- {
- Dictionary<string, string> formData = new Dictionary<string, string>();
- JArray ja = JArray.Parse(inputData);
- foreach (JObject jo in ja)
- {
- foreach (var property in jo.Properties())
- {
- formData[property.Name] = property.Value?.ToString();
- Global.writeLog(property.Name, formData[property.Name], "");
- }
- }
- body = formData;
- contentType = HttpClientHelper.ContentType.FormData;
- }
- if (Global.curEvt.restfulType == RestfulType.BaseLine)
- {
- String stamp = TimeStamp.get13().ToString();
- string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
- string sTemp = "_api_access_key=" + Global.inf.AK
- + "&_api_name=" + apiName
- + "&_api_timestamp=" + stamp
- + "&_api_version=" + "1.0.0";
- string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
- headers = new Dictionary<string, string>
- {
- { "_api_version", "1.0.0"},
- { "_api_timestamp", stamp },
- { "_api_name", apiName },
- { "_api_signature", signature },
- { "_api_access_key", Global.inf.AK }
- };
- body = inputData;
- contentType = HttpClientHelper.ContentType.Json;
- }
- var result = HttpClientHelper.Instance.SendRequest(
- HttpMethod.Post,
- Global.curEvt.URL,
- body,
- headers,
- contentType);
- return (result.Result, result.IsSuccess ? 0 : -1, result.ErrorMessage);
- }
- public int BusinessPresc(string inputData, ref string outputData, ref string pErrMsg)
- {
- outputData = "";
- pErrMsg = "";
- JObject joRtn = new JObject();
- try
- {
- string FunName = "";
- if (Global.curEvt.funNo == "7101")
- {
- FunName = "fix-uploadChk";
- }
- else if (Global.curEvt.funNo == "7102")
- {
- FunName= "fix-rxFixmedinsSign";
- }
- else if (Global.curEvt.funNo == "7103")
- {
- FunName = "fix-rxFileUpld";
- }
- else if (Global.curEvt.funNo == "7104")
- {
- FunName = "fix-rxUndo";
- }
- else if (Global.curEvt.funNo == "7105")
- {
- FunName = "fix-hospRxDetlQuery";
- }
- else if (Global.curEvt.funNo == "7106")
- {
- FunName = "fix-rxChkInfoQuery";
- }
- else if (Global.curEvt.funNo == "7107")
- {
- FunName = "fix-rxSetlInfoQuery";
- }
- else if (Global.curEvt.funNo == "7108")
- {
- FunName = "fix-rxChkInfoCallback";
- }
- else if (Global.curEvt.funNo == "7109")
- {
- FunName = "fix-rxSetlInfoCallback";
- }
- else if (Global.curEvt.funNo == "7100")
- {
- FunName = "pss-indiho";
- }
- //创建一个HTTP请求
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.inf.PresCir.url);
- //Post请求方式
- request.Method = "POST";
- //内容类型
- request.ContentType = "application/json";
- String stamp = TimeStamp.get13().ToString();
- string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
- apiName = FunName;
- //if (apiName.Contains("4101A"))
- //{
- // apiName = "h" + apiName;
- //}
- //南昌增加头部信息
- string sTemp = "_api_access_key=" + Global.inf.PresCir.ak
- + "&_api_name=" + apiName
- + "&_api_timestamp=" + stamp
- + "&_api_version=" + "1.0.0";
- string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.PresCir.sk);
- request.Headers.Add("_api_version", "1.0.0");
- request.Headers.Add("_api_timestamp", stamp);
- request.Headers.Add("_api_name", apiName);
- request.Headers.Add("_api_signature", signature);
- request.Headers.Add("_api_access_key", Global.inf.PresCir.ak);
- Global.writeLog("call api (ak):" + Global.inf.PresCir.ak + "(sk):" + Global.inf.PresCir.sk);
- //设置参数,并进行URL编码
- string paraUrlCoded = inputData;//System.Web.HttpUtility.UrlEncode(jsonParas);
- byte[] payload;
- //将Json字符串转化为字节
- payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
- //设置请求的ContentLength
- request.ContentLength = payload.Length;
- //发送请求,获得请求流
- Stream writer;
- writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
- //将请求参数写入流
- writer.Write(payload, 0, payload.Length);
- writer.Close();//关闭请求流
- HttpWebResponse response = null;
- try
- {
- //获得响应流
- response = (HttpWebResponse)request.GetResponse();
- }
- catch (WebException ex)
- {
- HttpWebResponse res = (HttpWebResponse)ex.Response;
- Stream myResponseStream = res.GetResponseStream();
- StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
- string retString = myStreamReader.ReadToEnd();
- outputData = JsonHelper.setExceptionJson(-99, "异常返回", retString).ToString();
- return -1;
- }
- outputData = getResponseData(response);
- joRtn = JObject.Parse(outputData);//返回Json数据
- if (joRtn.ContainsKey("body"))
- {
- joRtn = (JObject)joRtn.GetValue("body");
- outputData = JsonHelper.toJsonString(joRtn);
- }
- return 0;
- }
- catch (Exception ex)
- {
- joRtn.Add("infcode", -1);
- joRtn.Add("err_msg", "调用中心服务异常invokeCenterService(1):" + ex.Message);
- outputData = JsonHelper.toJsonString(joRtn);
- return -1;
- }
- }
- public int BusinessDefault(string inputData, ref string outputData, ref string pErrMsg)
- {
- Global.writeLog("BusinessDefault");
- outputData = "";
- pErrMsg = "";
- JObject joRtn = new JObject();
- try
- {
- //创建一个HTTP请求
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
- //Post请求方式
- request.Method = "POST";
- //内容类型
- request.ContentType = "application/json";
- if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
- {
- request.ContentType = "multipart/form-data";
- }
- if (Global.curEvt.restfulType == RestfulType.BaseLine)
- {
- String stamp = TimeStamp.get13().ToString();
- string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
- //if (apiName.Contains("4101A"))
- //{
- // apiName = "h" + apiName;
- //}
- //测试环境
- //Global.inf.AK = "039d423c2c5f4b65b97fdc4ca52869be";
- //Global.inf.SK = "jtAtVp61pKyydDaFEJb0K/Xtcfo=";
- //南昌增加头部信息
- string sTemp = "_api_access_key=" + Global.inf.AK
- + "&_api_name=" + apiName
- + "&_api_timestamp=" + stamp
- + "&_api_version=" + "1.0.0";
- string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
- request.Headers.Add("_api_version", "1.0.0");
- request.Headers.Add("_api_timestamp", stamp);
- request.Headers.Add("_api_name", apiName);
- request.Headers.Add("_api_signature", signature);
- request.Headers.Add("_api_access_key", Global.inf.AK);
- Global.writeLog("call api (ak):" + Global.inf.AK + "\r" + "(sk):" + Global.inf.SK);
- }
- else //SettlemetnList DIP上传
- {
- request.Headers.Add("access-token", "98d39db4ca7a6a6980eb95f3778b14e8");
- }
- //设置参数,并进行URL编码
- string paraUrlCoded = inputData;//System.Web.HttpUtility.UrlEncode(jsonParas);
- byte[] payload;
- //将Json字符串转化为字节
- payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
- //设置请求的ContentLength
- request.ContentLength = payload.Length;
- //发送请求,获得请求流
- Stream writer;
- writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
- //将请求参数写入流
- writer.Write(payload, 0, payload.Length);
- writer.Close();//关闭请求流
- HttpWebResponse response = null;
- try
- {
- //获得响应流
- response = (HttpWebResponse)request.GetResponse();
- }
- catch (WebException ex)
- {
- HttpWebResponse res = (HttpWebResponse)ex.Response;
- Stream myResponseStream = res.GetResponseStream();
- StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
- string retString = myStreamReader.ReadToEnd();
- if (!string.IsNullOrEmpty(retString))
- {
- outputData = JsonHelper.setExceptionJson(-99, "异常返回", retString).ToString();
- return -1;
- }
- else
- {
- outputData = JsonHelper.setExceptionJson(-99, "异常返回", ex.Message).ToString();
- return -1;
- }
- }
- outputData = getResponseData(response);
- joRtn = JObject.Parse(outputData);//返回Json数据
- if (joRtn.ContainsKey("body"))
- {
- joRtn = (JObject)joRtn.GetValue("body");
- outputData = JsonHelper.toJsonString(joRtn);
- }
- return 0;
- }
- catch (Exception ex)
- {
- joRtn.Add("infcode", -1);
- joRtn.Add("err_msg", "调用中心服务异常invokeCenterService(1):" + ex.Message);
- outputData = JsonHelper.toJsonString(joRtn);
- return -1;
- }
- }
- public int BusinessExt(string inputData, ref string outputData, ref string pErrMsg)
- {
- return this.Business(inputData, ref outputData, ref pErrMsg);
- }
- public int DownloadFile(string inputData, ref string outputData)
- {
- outputData = "";
- string error = string.Empty; int errorCode = 0;
- try
- {
- JObject jsonInParam = JObject.Parse(inputData);
- // 去除外wrapper层便于通用
- Utils.removeWrapper(jsonInParam);
- string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
- string filePath = Global.curEvt.path + "\\Download\\" + fileName;
- //如果不存在目录,则创建目录
- if (!Directory.Exists(Global.curEvt.path + "\\Download"))
- {
- //创建文件夹
- DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
- }
- if (File.Exists(filePath))
- {
- File.Delete(filePath);
- }
- FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
- //创建一个HTTP请求
- Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
- //Post请求方式
- request.Method = "POST";
- String stamp = TimeStamp.get13().ToString();
- string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.Length - 12);
- //南昌增加头部信息
- string sTemp = "_api_access_key=" + Global.inf.AK
- + "&_api_name=" + apiName
- + "&_api_timestamp=" + stamp
- + "&_api_version=" + "1.0.0";
- string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
- //内容类型
- request.ContentType = "application/json";
- request.Headers.Add("_api_version", "1.0.0");
- request.Headers.Add("_api_timestamp", stamp);
- request.Headers.Add("_api_name", apiName);
- request.Headers.Add("_api_signature", signature);
- request.Headers.Add("_api_access_key", Global.inf.AK);
- //设置参数,并进行URL编码
- string paraUrlCoded = JsonHelper.toJsonString(jsonInParam);
- 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.errorMessage = error;
- joReturn.filePath = filePath;
- outputData = joReturn.ToString();
- }
- catch (Exception ex)
- {
- errorCode = -100;
- error = ex.Message;
- dynamic joReturn = new JObject();
- joReturn.errorCode = errorCode;
- joReturn.errorMessage = error;
- outputData = joReturn.ToString();
- return -1;
- }
- finally
- {
- Global.writeLog("DownloadCenterFile" + "(" + Global.curEvt.URL + ")", inputData, outputData);
- }
- return 0;
- }
- public int Init(ref string pErrMsg)
- {
- return 0;
- }
- public int UploadFile(string inputData, ref string outputData, ref string pErrMsg)
- {
- throw new NotImplementedException();
- }
- private string getResponseData(HttpWebResponse response)
- {
- string data = "";
- if (response != null)
- {
- Stream s = response.GetResponseStream();
- StreamReader sRead = new StreamReader(s,Encoding.GetEncoding("UTF-8"));
- data = sRead.ReadToEnd();
- sRead.Close();
- response.Close();
- }
- return data;
- }
- }
- public class BusinessResult
- {
- public string OutputData { get; set; }
- public int Success { get; set; }
- public string ErrMsg { get; set; }
- }
- }
|