InvokeRestCenter.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Common;
  3. using PTMedicalInsurance.Variables;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace PTMedicalInsurance.Helper
  13. {
  14. class InvokeRestCenter : IInvokeCenter
  15. {
  16. public int Business(string inputData, ref string outputData, ref string pErrMsg)
  17. {
  18. //Global.writeLog("开始");
  19. ////南昌的电脑环境貌似不支持httpclient
  20. //if ((Global.inf.hospitalDr == 26) || (Global.inf.hospitalDr == 27))
  21. //{
  22. // Global.writeLog("开始1");
  23. // return BusinessDefault(inputData, ref outputData, ref pErrMsg);
  24. //}
  25. //else
  26. //{
  27. // Global.writeLog("开始2");
  28. // var result = BusinessClient(inputData);
  29. // outputData = result.OutputData;
  30. // pErrMsg = result.ErrMsg;
  31. // return result.Success;
  32. //}
  33. return BusinessDefault(inputData, ref outputData, ref pErrMsg);
  34. //var result = BusinessClientAsync(inputData).Result;
  35. }
  36. //public async Task<(string OutputData, int Success, string ErrMsg)> BusinessClientAsync(string inputData)
  37. ////public async Task<BusinessResult> BusinessClientAsync(string inputData)
  38. //{
  39. // Dictionary<string, string> headers = new Dictionary<string, string> { { "access-token", "98d39db4ca7a6a6980eb95f3778b14e8" } };
  40. // Object body = inputData;
  41. // HttpClientHelper.ContentType contentType = HttpClientHelper.ContentType.Json;
  42. // HttpClientHelper.Instance.SetBaseAddress(Global.curEvt.URL);
  43. // Global.writeLog($"当前类型:{Global.curEvt.restfulType}");
  44. // if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
  45. // {
  46. // Dictionary<string, string> formData = new Dictionary<string, string> { };
  47. // JArray ja = JArray.Parse(inputData);
  48. // foreach (JObject jo in ja)
  49. // {
  50. // foreach (var property in jo.Properties())
  51. // {
  52. // formData[property.Name] = property.Value?.ToString();
  53. // Global.writeLog(property.Name, formData[property.Name],"");
  54. // }
  55. // }
  56. // body = formData;
  57. // contentType = HttpClientHelper.ContentType.FormData;
  58. // }
  59. // if (Global.curEvt.restfulType == RestfulType.BaseLine)
  60. // {
  61. // String stamp = TimeStamp.get13().ToString();
  62. // string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
  63. // //南昌增加头部信息
  64. // string sTemp = "_api_access_key=" + Global.inf.AK
  65. // + "&_api_name=" + apiName
  66. // + "&_api_timestamp=" + stamp
  67. // + "&_api_version=" + "1.0.0";
  68. // string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  69. // headers = new Dictionary<string, string>
  70. // {
  71. // { "_api_version", "1.0.0"},
  72. // { "_api_timestamp", stamp },
  73. // { "_api_name", apiName },
  74. // { "_api_signature", signature },
  75. // { "_api_access_key", Global.inf.AK }
  76. // };
  77. // body = inputData;
  78. // contentType = HttpClientHelper.ContentType.Json;
  79. // }
  80. // var result = await HttpClientHelper.Instance.SendRequestAsync(
  81. // HttpMethod.Post,
  82. // Global.curEvt.URL,
  83. // body,
  84. // headers,
  85. // contentType);
  86. // return (result.Result, result.IsSuccess ? 0 : -1, result.ErrorMessage);
  87. // //BusinessResult result1 = new BusinessResult();
  88. // //result1.Success = result.IsSuccess ? 0 : -1;
  89. // //result1.OutputData = result.Result;
  90. // //result1.ErrMsg = result.ErrorMessage;
  91. // //return result1;
  92. //}
  93. public (string OutputData, int Success, string ErrMsg) BusinessClient(string inputData)
  94. {
  95. Global.writeLog("BusinessClientAsync");
  96. Dictionary<string, string> headers = new Dictionary<string, string> { { "access-token", "98d39db4ca7a6a6980eb95f3778b14e8" } };
  97. Object body = inputData;
  98. HttpClientHelper.ContentType contentType = HttpClientHelper.ContentType.Json;
  99. HttpClientHelper.Instance.SetBaseAddress(Global.curEvt.URL);
  100. Global.writeLog($"当前类型:{Global.curEvt.restfulType}");
  101. if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
  102. {
  103. Dictionary<string, string> formData = new Dictionary<string, string>();
  104. JArray ja = JArray.Parse(inputData);
  105. foreach (JObject jo in ja)
  106. {
  107. foreach (var property in jo.Properties())
  108. {
  109. formData[property.Name] = property.Value?.ToString();
  110. Global.writeLog(property.Name, formData[property.Name], "");
  111. }
  112. }
  113. body = formData;
  114. contentType = HttpClientHelper.ContentType.FormData;
  115. }
  116. if (Global.curEvt.restfulType == RestfulType.BaseLine)
  117. {
  118. String stamp = TimeStamp.get13().ToString();
  119. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
  120. string sTemp = "_api_access_key=" + Global.inf.AK
  121. + "&_api_name=" + apiName
  122. + "&_api_timestamp=" + stamp
  123. + "&_api_version=" + "1.0.0";
  124. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  125. headers = new Dictionary<string, string>
  126. {
  127. { "_api_version", "1.0.0"},
  128. { "_api_timestamp", stamp },
  129. { "_api_name", apiName },
  130. { "_api_signature", signature },
  131. { "_api_access_key", Global.inf.AK }
  132. };
  133. body = inputData;
  134. contentType = HttpClientHelper.ContentType.Json;
  135. }
  136. var result = HttpClientHelper.Instance.SendRequest(
  137. HttpMethod.Post,
  138. Global.curEvt.URL,
  139. body,
  140. headers,
  141. contentType);
  142. return (result.Result, result.IsSuccess ? 0 : -1, result.ErrorMessage);
  143. }
  144. public int BusinessPresc(string inputData, ref string outputData, ref string pErrMsg)
  145. {
  146. outputData = "";
  147. pErrMsg = "";
  148. JObject joRtn = new JObject();
  149. try
  150. {
  151. string FunName = "";
  152. if (Global.curEvt.funNo == "7101")
  153. {
  154. FunName = "fix-uploadChk";
  155. }
  156. else if (Global.curEvt.funNo == "7102")
  157. {
  158. FunName= "fix-rxFixmedinsSign";
  159. }
  160. else if (Global.curEvt.funNo == "7103")
  161. {
  162. FunName = "fix-rxFileUpld";
  163. }
  164. else if (Global.curEvt.funNo == "7104")
  165. {
  166. FunName = "fix-rxUndo";
  167. }
  168. else if (Global.curEvt.funNo == "7105")
  169. {
  170. FunName = "fix-hospRxDetlQuery";
  171. }
  172. else if (Global.curEvt.funNo == "7106")
  173. {
  174. FunName = "fix-rxChkInfoQuery";
  175. }
  176. else if (Global.curEvt.funNo == "7107")
  177. {
  178. FunName = "fix-rxSetlInfoQuery";
  179. }
  180. else if (Global.curEvt.funNo == "7108")
  181. {
  182. FunName = "fix-rxChkInfoCallback";
  183. }
  184. else if (Global.curEvt.funNo == "7109")
  185. {
  186. FunName = "fix-rxSetlInfoCallback";
  187. }
  188. else if (Global.curEvt.funNo == "7100")
  189. {
  190. FunName = "pss-indiho";
  191. }
  192. //创建一个HTTP请求
  193. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.inf.PresCir.url);
  194. //Post请求方式
  195. request.Method = "POST";
  196. //内容类型
  197. request.ContentType = "application/json";
  198. String stamp = TimeStamp.get13().ToString();
  199. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
  200. apiName = FunName;
  201. //if (apiName.Contains("4101A"))
  202. //{
  203. // apiName = "h" + apiName;
  204. //}
  205. //南昌增加头部信息
  206. string sTemp = "_api_access_key=" + Global.inf.PresCir.ak
  207. + "&_api_name=" + apiName
  208. + "&_api_timestamp=" + stamp
  209. + "&_api_version=" + "1.0.0";
  210. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.PresCir.sk);
  211. request.Headers.Add("_api_version", "1.0.0");
  212. request.Headers.Add("_api_timestamp", stamp);
  213. request.Headers.Add("_api_name", apiName);
  214. request.Headers.Add("_api_signature", signature);
  215. request.Headers.Add("_api_access_key", Global.inf.PresCir.ak);
  216. Global.writeLog("call api (ak):" + Global.inf.PresCir.ak + "(sk):" + Global.inf.PresCir.sk);
  217. //设置参数,并进行URL编码
  218. string paraUrlCoded = inputData;//System.Web.HttpUtility.UrlEncode(jsonParas);
  219. byte[] payload;
  220. //将Json字符串转化为字节
  221. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  222. //设置请求的ContentLength
  223. request.ContentLength = payload.Length;
  224. //发送请求,获得请求流
  225. Stream writer;
  226. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  227. //将请求参数写入流
  228. writer.Write(payload, 0, payload.Length);
  229. writer.Close();//关闭请求流
  230. HttpWebResponse response = null;
  231. try
  232. {
  233. //获得响应流
  234. response = (HttpWebResponse)request.GetResponse();
  235. }
  236. catch (WebException ex)
  237. {
  238. HttpWebResponse res = (HttpWebResponse)ex.Response;
  239. Stream myResponseStream = res.GetResponseStream();
  240. StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
  241. string retString = myStreamReader.ReadToEnd();
  242. outputData = JsonHelper.setExceptionJson(-99, "异常返回", retString).ToString();
  243. return -1;
  244. }
  245. outputData = getResponseData(response);
  246. joRtn = JObject.Parse(outputData);//返回Json数据
  247. if (joRtn.ContainsKey("body"))
  248. {
  249. joRtn = (JObject)joRtn.GetValue("body");
  250. outputData = JsonHelper.toJsonString(joRtn);
  251. }
  252. return 0;
  253. }
  254. catch (Exception ex)
  255. {
  256. joRtn.Add("infcode", -1);
  257. joRtn.Add("err_msg", "调用中心服务异常invokeCenterService(1):" + ex.Message);
  258. outputData = JsonHelper.toJsonString(joRtn);
  259. return -1;
  260. }
  261. }
  262. public int BusinessDefault(string inputData, ref string outputData, ref string pErrMsg)
  263. {
  264. Global.writeLog("BusinessDefault");
  265. outputData = "";
  266. pErrMsg = "";
  267. JObject joRtn = new JObject();
  268. try
  269. {
  270. //创建一个HTTP请求
  271. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  272. //Post请求方式
  273. request.Method = "POST";
  274. //内容类型
  275. request.ContentType = "application/json";
  276. if (Global.curEvt.restfulType == RestfulType.SettlementListFormData)
  277. {
  278. request.ContentType = "multipart/form-data";
  279. }
  280. if (Global.curEvt.restfulType == RestfulType.BaseLine)
  281. {
  282. String stamp = TimeStamp.get13().ToString();
  283. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.LastIndexOf("/") + 1);
  284. //if (apiName.Contains("4101A"))
  285. //{
  286. // apiName = "h" + apiName;
  287. //}
  288. //测试环境
  289. //Global.inf.AK = "039d423c2c5f4b65b97fdc4ca52869be";
  290. //Global.inf.SK = "jtAtVp61pKyydDaFEJb0K/Xtcfo=";
  291. //南昌增加头部信息
  292. string sTemp = "_api_access_key=" + Global.inf.AK
  293. + "&_api_name=" + apiName
  294. + "&_api_timestamp=" + stamp
  295. + "&_api_version=" + "1.0.0";
  296. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  297. request.Headers.Add("_api_version", "1.0.0");
  298. request.Headers.Add("_api_timestamp", stamp);
  299. request.Headers.Add("_api_name", apiName);
  300. request.Headers.Add("_api_signature", signature);
  301. request.Headers.Add("_api_access_key", Global.inf.AK);
  302. Global.writeLog("call api (ak):" + Global.inf.AK + "\r" + "(sk):" + Global.inf.SK);
  303. }
  304. else //SettlemetnList DIP上传
  305. {
  306. request.Headers.Add("access-token", "98d39db4ca7a6a6980eb95f3778b14e8");
  307. }
  308. //设置参数,并进行URL编码
  309. string paraUrlCoded = inputData;//System.Web.HttpUtility.UrlEncode(jsonParas);
  310. byte[] payload;
  311. //将Json字符串转化为字节
  312. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  313. //设置请求的ContentLength
  314. request.ContentLength = payload.Length;
  315. //发送请求,获得请求流
  316. Stream writer;
  317. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  318. //将请求参数写入流
  319. writer.Write(payload, 0, payload.Length);
  320. writer.Close();//关闭请求流
  321. HttpWebResponse response = null;
  322. try
  323. {
  324. //获得响应流
  325. response = (HttpWebResponse)request.GetResponse();
  326. }
  327. catch (WebException ex)
  328. {
  329. HttpWebResponse res = (HttpWebResponse)ex.Response;
  330. Stream myResponseStream = res.GetResponseStream();
  331. StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
  332. string retString = myStreamReader.ReadToEnd();
  333. if (!string.IsNullOrEmpty(retString))
  334. {
  335. outputData = JsonHelper.setExceptionJson(-99, "异常返回", retString).ToString();
  336. return -1;
  337. }
  338. else
  339. {
  340. outputData = JsonHelper.setExceptionJson(-99, "异常返回", ex.Message).ToString();
  341. return -1;
  342. }
  343. }
  344. outputData = getResponseData(response);
  345. joRtn = JObject.Parse(outputData);//返回Json数据
  346. if (joRtn.ContainsKey("body"))
  347. {
  348. joRtn = (JObject)joRtn.GetValue("body");
  349. outputData = JsonHelper.toJsonString(joRtn);
  350. }
  351. return 0;
  352. }
  353. catch (Exception ex)
  354. {
  355. joRtn.Add("infcode", -1);
  356. joRtn.Add("err_msg", "调用中心服务异常invokeCenterService(1):" + ex.Message);
  357. outputData = JsonHelper.toJsonString(joRtn);
  358. return -1;
  359. }
  360. }
  361. public int BusinessExt(string inputData, ref string outputData, ref string pErrMsg)
  362. {
  363. return this.Business(inputData, ref outputData, ref pErrMsg);
  364. }
  365. public int DownloadFile(string inputData, ref string outputData)
  366. {
  367. outputData = "";
  368. string error = string.Empty; int errorCode = 0;
  369. try
  370. {
  371. JObject jsonInParam = JObject.Parse(inputData);
  372. // 去除外wrapper层便于通用
  373. Utils.removeWrapper(jsonInParam);
  374. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  375. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  376. //如果不存在目录,则创建目录
  377. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  378. {
  379. //创建文件夹
  380. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  381. }
  382. if (File.Exists(filePath))
  383. {
  384. File.Delete(filePath);
  385. }
  386. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  387. //创建一个HTTP请求
  388. Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";
  389. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  390. //Post请求方式
  391. request.Method = "POST";
  392. String stamp = TimeStamp.get13().ToString();
  393. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.Length - 12);
  394. //南昌增加头部信息
  395. string sTemp = "_api_access_key=" + Global.inf.AK
  396. + "&_api_name=" + apiName
  397. + "&_api_timestamp=" + stamp
  398. + "&_api_version=" + "1.0.0";
  399. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  400. //内容类型
  401. request.ContentType = "application/json";
  402. request.Headers.Add("_api_version", "1.0.0");
  403. request.Headers.Add("_api_timestamp", stamp);
  404. request.Headers.Add("_api_name", apiName);
  405. request.Headers.Add("_api_signature", signature);
  406. request.Headers.Add("_api_access_key", Global.inf.AK);
  407. //设置参数,并进行URL编码
  408. string paraUrlCoded = JsonHelper.toJsonString(jsonInParam);
  409. byte[] payload;
  410. //将Json字符串转化为字节
  411. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  412. //设置请求的ContentLength
  413. request.ContentLength = payload.Length;
  414. Stream writer;
  415. try
  416. {
  417. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  418. }
  419. catch (Exception)
  420. {
  421. writer = null;
  422. errorCode = -100;
  423. error = "连接服务器失败!";
  424. }
  425. //将请求参数写入流
  426. writer.Write(payload, 0, payload.Length);
  427. writer.Close();//关闭请求流
  428. // String strValue = "";//strValue为http响应所返回的字符流
  429. //发送请求并获取相应回应数据
  430. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  431. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  432. Stream responseStream = response.GetResponseStream();
  433. //创建本地文件写入流
  434. byte[] bArr = new byte[1024];
  435. int iTotalSize = 0;
  436. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  437. while (size > 0)
  438. {
  439. iTotalSize += size;
  440. fs.Write(bArr, 0, size);
  441. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  442. }
  443. fs.Close();
  444. responseStream.Close();
  445. dynamic joReturn = new JObject();
  446. joReturn.errorCode = errorCode;
  447. joReturn.errorMessage = error;
  448. joReturn.filePath = filePath;
  449. outputData = joReturn.ToString();
  450. }
  451. catch (Exception ex)
  452. {
  453. errorCode = -100;
  454. error = ex.Message;
  455. dynamic joReturn = new JObject();
  456. joReturn.errorCode = errorCode;
  457. joReturn.errorMessage = error;
  458. outputData = joReturn.ToString();
  459. return -1;
  460. }
  461. finally
  462. {
  463. Global.writeLog("DownloadCenterFile" + "(" + Global.curEvt.URL + ")", inputData, outputData);
  464. }
  465. return 0;
  466. }
  467. public int Init(ref string pErrMsg)
  468. {
  469. return 0;
  470. }
  471. public int UploadFile(string inputData, ref string outputData, ref string pErrMsg)
  472. {
  473. throw new NotImplementedException();
  474. }
  475. private string getResponseData(HttpWebResponse response)
  476. {
  477. string data = "";
  478. if (response != null)
  479. {
  480. Stream s = response.GetResponseStream();
  481. StreamReader sRead = new StreamReader(s,Encoding.GetEncoding("UTF-8"));
  482. data = sRead.ReadToEnd();
  483. sRead.Close();
  484. response.Close();
  485. }
  486. return data;
  487. }
  488. }
  489. public class BusinessResult
  490. {
  491. public string OutputData { get; set; }
  492. public int Success { get; set; }
  493. public string ErrMsg { get; set; }
  494. }
  495. }