InvokeHelper.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. /******************************************************************************
  2. * 文件名称: InvokeHelper.cs
  3. * 文件说明: 调用助手,调用方法的封装
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-12
  6. *
  7. * 2020-04-12: 增加 businessDLLInvoke 方法
  8. * 2020-04-12: 增加 writeLog 方法
  9. * 2020-04-14: 增加 businessDLLInvoke(重载) 方法
  10. * 2020-04-14: 增加 irisServiceInvoke 方法
  11. * 2022-05-16: 增加 invokeInsuService 方法
  12. * 2022-05-16: 增加 invokeHISService 方法
  13. ******************************************************************************/
  14. using Newtonsoft.Json;
  15. using Newtonsoft.Json.Linq;
  16. using System;
  17. using System.Collections.Generic;
  18. using System.IO;
  19. using System.Linq;
  20. using System.Net;
  21. using System.Text;
  22. using System.Threading.Tasks;
  23. using System.Windows.Forms;
  24. using PTMedicalInsurance.Variables;
  25. using PTMedicalInsurance.Common;
  26. namespace PTMedicalInsurance.Helper
  27. {
  28. class InvokeHelper
  29. {
  30. private string serviceURL;
  31. private string authorization;
  32. /// <summary>
  33. /// 封装业务DLL的调用,返回整型,带两ref出参
  34. /// </summary>
  35. /// <param name="methodName"></param>
  36. /// <param name="inParam"></param>
  37. /// <param name="outParam"></param>
  38. /// <param name="ErrorMessage"></param>
  39. /// <returns></returns>
  40. public int businessDLLInvoke(string methodName, string inParam, ref string outParam,ref string ErrorMessage)
  41. {
  42. try
  43. {
  44. DllInvoke dllInvoke = new DllInvoke();
  45. string path = GlobalVariables.currentDirectory + "\\" + GlobalVariables.businessDllName;
  46. string[] str = new string[1];
  47. str[0] = inParam;
  48. object o2 = DllInvoke.ManagedInvoke(path, GlobalVariables.businessDllNameSpace, "InsuBusiness", methodName, str);
  49. if (o2.ToString() == "")
  50. {
  51. ErrorMessage = "返回数据为空";
  52. return -1;
  53. }
  54. JObject joRtn = JObject.Parse(o2.ToString());
  55. if (joRtn["errorCode"].ToString() != "0")
  56. {
  57. ErrorMessage = joRtn["errorMessage"].ToString();
  58. return -1;
  59. }
  60. else
  61. {
  62. outParam = o2.ToString();
  63. return 0;
  64. }
  65. }
  66. catch (Exception ex)
  67. {
  68. ErrorMessage = "调用异常:" + ex.ToString();
  69. return -1;
  70. }
  71. finally
  72. {
  73. writeLog(methodName,inParam,outParam);
  74. }
  75. }
  76. /// <summary>
  77. /// 封装业务DLL的调用,返回JSON对象
  78. /// </summary>
  79. /// <param name="methodName"></param>
  80. /// <param name="inParam"></param>
  81. /// <returns></returns>
  82. public JObject businessDLLInvoke(string methodName, string inParam)
  83. {
  84. string outParam = string.Empty; string path = "";
  85. JObject joRtn = new JObject();
  86. try
  87. {
  88. DllInvoke dllInvoke = new DllInvoke();
  89. path = GlobalVariables.currentDirectory + "\\" + GlobalVariables.businessDllName;
  90. string[] str = new string[1];
  91. str[0] = inParam;
  92. object o2 = DllInvoke.ManagedInvoke(path, GlobalVariables.businessDllNameSpace, "InsuBusiness", methodName, str);
  93. outParam = o2.ToString();
  94. joRtn = JObject.Parse(outParam);
  95. return joRtn;
  96. }
  97. catch (Exception ex)
  98. {
  99. outParam = "businessDLLInvoke:原出参(" + outParam + ")\r\n ,异常:" + ex.Message;
  100. return JsonHelper.getIrisExceptionJson(-1, "businessDLLInvoke:" ,outParam);
  101. }
  102. finally
  103. {
  104. writeLog(methodName + "(" + path + ")", inParam, outParam);
  105. }
  106. }
  107. /// <summary>
  108. /// 调用壳DLL
  109. /// </summary>
  110. /// <param name="methodName"></param>
  111. /// <param name="inParam"></param>
  112. /// <returns></returns>
  113. public JObject invokeShellDll(string methodName, string inParam)
  114. {
  115. string outParam = string.Empty; string path = "";
  116. JObject joRtn = new JObject();
  117. try
  118. {
  119. DllInvoke dllInvoke = new DllInvoke();
  120. path = GlobalVariables.currentDirectory + "\\" + "PTMedInsuInterface.dll";
  121. string[] str = new string[1];
  122. str[0] = inParam;
  123. object o2 = DllInvoke.ManagedInvoke(path, "PTMedInsuInterface", "InsuBusiness", methodName, str);
  124. outParam = o2.ToString();
  125. joRtn = JObject.Parse(outParam);
  126. return joRtn;
  127. }
  128. catch (Exception ex)
  129. {
  130. outParam = "invokeShellDll:原出参(" + outParam + ")\r\n ,异常:" + ex.Message;
  131. return JsonHelper.getIrisExceptionJson(-1, "invokeShellDll:", outParam);
  132. }
  133. finally
  134. {
  135. writeLog(methodName + "(" + path + ")", inParam, outParam);
  136. }
  137. }
  138. /// <summary>
  139. /// iris服务调用的封装
  140. /// </summary>
  141. /// <param name="data"></param>
  142. /// <returns></returns>
  143. public JObject irisServiceInvoke(string data,string serviceName)
  144. {
  145. string rtn = "", url = "";
  146. JObject joRtn = new JObject();
  147. try
  148. {
  149. //先根据用户请求的uri构造请求地址
  150. url = string.Format("{0}/{1}", GlobalVariables.irisServiceIP, GlobalVariables.irisServiceURL);
  151. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  152. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  153. //创建Web访问对象
  154. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  155. //把用户传过来的数据转成“UTF-8”的字节流
  156. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  157. //添加头部信息
  158. myRequest.Method = "POST";
  159. myRequest.ContentLength = buf.Length;
  160. myRequest.ContentType = "application/json";
  161. myRequest.Headers.Add("Authorization", GlobalVariables.irisServiceAuthorization);
  162. myRequest.MaximumAutomaticRedirections = 1;
  163. myRequest.AllowAutoRedirect = true;
  164. //发送请求
  165. Stream stream = myRequest.GetRequestStream();
  166. stream.Write(buf, 0, buf.Length);
  167. stream.Close();
  168. //获取接口返回值
  169. //通过Web访问对象获取响应内容
  170. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  171. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  172. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  173. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  174. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  175. reader.Close();
  176. myResponse.Close();
  177. joRtn = JObject.Parse(rtn);
  178. return joRtn;
  179. }
  180. catch (Exception ex)
  181. {
  182. joRtn = JsonHelper.getIrisExceptionJson(-1, serviceName,rtn + "\r\n" + ex.Message);
  183. rtn = joRtn.ToString();
  184. return joRtn;
  185. }
  186. finally
  187. {
  188. writeLog(serviceName+ url , data, rtn);
  189. }
  190. }
  191. /// <summary>
  192. /// iris服务调用的封装
  193. /// </summary>
  194. /// <param name="data"></param>
  195. /// <returns></returns>
  196. public JObject invokeHISService(string data, string serviceDesc)
  197. {
  198. string rtn = "", url = "";
  199. JObject joRtn = new JObject();
  200. try
  201. {
  202. //先根据用户请求的uri构造请求地址
  203. url = string.Format("{0}/{1}", GlobalVariables.hisIrisServiceIP, GlobalVariables.hisIrisServiceURL);
  204. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  205. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  206. //创建Web访问对象
  207. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  208. //把用户传过来的数据转成“UTF-8”的字节流
  209. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  210. //添加头部信息
  211. myRequest.Method = "POST";
  212. myRequest.ContentLength = buf.Length;
  213. myRequest.ContentType = "application/json";
  214. myRequest.Headers.Add("Authorization", GlobalVariables.hisIrisServiceAuthorization);
  215. myRequest.MaximumAutomaticRedirections = 1;
  216. myRequest.AllowAutoRedirect = true;
  217. //发送请求
  218. Stream stream = myRequest.GetRequestStream();
  219. stream.Write(buf, 0, buf.Length);
  220. stream.Close();
  221. //获取接口返回值
  222. //通过Web访问对象获取响应内容
  223. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  224. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  225. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  226. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  227. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  228. reader.Close();
  229. myResponse.Close();
  230. joRtn = JObject.Parse(rtn);
  231. return joRtn;
  232. }
  233. catch (Exception ex)
  234. {
  235. joRtn = JsonHelper.getIrisExceptionJson(-1, serviceDesc, ex.Message);
  236. rtn = JsonConvert.SerializeObject(joRtn);
  237. return joRtn;
  238. }
  239. finally
  240. {
  241. GlobalVariables.writeLog(serviceDesc + "(" + url + ")", data, rtn);
  242. }
  243. }
  244. /// <summary>
  245. /// iris服务调用的封装
  246. /// </summary>
  247. /// <param name="data"></param>
  248. /// <returns></returns>
  249. public JObject invokeInsuService(string data, string serviceDesc)
  250. {
  251. string rtn = "", url = "";
  252. JObject joRtn = new JObject();
  253. try
  254. {
  255. //先根据用户请求的uri构造请求地址
  256. url = string.Format("{0}/{1}", GlobalVariables.insuIrisServiceIP, GlobalVariables.insuIrisServiceURL);
  257. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  258. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  259. //创建Web访问对象
  260. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  261. //把用户传过来的数据转成“UTF-8”的字节流
  262. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  263. //添加头部信息
  264. myRequest.Method = "POST";
  265. myRequest.ContentLength = buf.Length;
  266. myRequest.ContentType = "application/json";
  267. myRequest.Headers.Add("Authorization", GlobalVariables.insuIrisServiceAuthorization);
  268. myRequest.MaximumAutomaticRedirections = 1;
  269. myRequest.AllowAutoRedirect = true;
  270. //发送请求
  271. Stream stream = myRequest.GetRequestStream();
  272. stream.Write(buf, 0, buf.Length);
  273. stream.Close();
  274. //获取接口返回值
  275. //通过Web访问对象获取响应内容
  276. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  277. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  278. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  279. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  280. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  281. reader.Close();
  282. myResponse.Close();
  283. joRtn = JObject.Parse(rtn);
  284. return joRtn;
  285. }
  286. catch (Exception ex)
  287. {
  288. joRtn = JsonHelper.getIrisExceptionJson(-1, serviceDesc, ex.Message);
  289. rtn = JsonConvert.SerializeObject(joRtn);
  290. return joRtn;
  291. }
  292. finally
  293. {
  294. GlobalVariables.writeLog(serviceDesc + "(" + url + ")", data, rtn);
  295. }
  296. }
  297. /// <summary>
  298. /// 一次交易的完整日志记录,用*****分割每次交易,简洁明了。
  299. /// </summary>
  300. /// <param name="tradeName"></param>
  301. /// <param name="inParam"></param>
  302. /// <param name="outParam"></param>
  303. private void writeLog(string tradeName, string inParam, string outParam)
  304. {
  305. string logDir = GlobalVariables.currentDirectory + "\\Log", logName = DateTime.Now.ToString("yyyy-MM-dd") + "_Demo.Log";
  306. string statrTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff");
  307. if (!Directory.Exists(logDir))
  308. {
  309. //创建文件夹
  310. DirectoryInfo dirInfo = Directory.CreateDirectory(logDir);
  311. }
  312. if (!File.Exists(logDir + "\\" + logName))
  313. {
  314. FileStream fs1 = File.Create(logDir + "\\" + logName);
  315. fs1.Close();
  316. }
  317. FileStream fs = new FileStream(logDir + "\\" + logName, FileMode.Append, FileAccess.Write);
  318. StreamWriter sw = new StreamWriter(fs);
  319. string content = "****************************交易开始(" + statrTime + ")****************************" + "\r\n";
  320. content = content + "交易名称:" + tradeName + "\r\n";
  321. content = content + "交易入参:" + inParam + "\r\n";
  322. content = content + "交易出参:" + outParam + "\r\n";
  323. content = content + "****************************交易结束(" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff") + ")****************************" + "\r\n";
  324. sw.WriteLine(content);
  325. sw.Close();
  326. fs.Close();
  327. }
  328. /***************************************************************下载目录接口用*****************************************************************************/
  329. /// <summary>
  330. /// iris服务调用的封装
  331. /// </summary>
  332. /// <param name="data"></param>
  333. /// <returns></returns>
  334. public JObject invokeIrisService(string data, string serviceDesc)
  335. {
  336. string rtn = "", url = "";
  337. JObject joRtn = new JObject();
  338. try
  339. {
  340. //先根据用户请求的uri构造请求地址
  341. url = serviceURL;
  342. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  343. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  344. //创建Web访问对象
  345. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  346. //把用户传过来的数据转成“UTF-8”的字节流
  347. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  348. //添加头部信息
  349. myRequest.Method = "POST";
  350. myRequest.ContentLength = buf.Length;
  351. myRequest.ContentType = "application/json";
  352. myRequest.Headers.Add("Authorization", authorization);
  353. myRequest.MaximumAutomaticRedirections = 1;
  354. myRequest.AllowAutoRedirect = true;
  355. //发送请求
  356. Stream stream = myRequest.GetRequestStream();
  357. stream.Write(buf, 0, buf.Length);
  358. stream.Close();
  359. //获取接口返回值
  360. //通过Web访问对象获取响应内容
  361. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  362. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  363. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  364. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  365. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  366. reader.Close();
  367. myResponse.Close();
  368. joRtn = JObject.Parse(rtn);
  369. return joRtn;
  370. }
  371. catch (Exception ex)
  372. {
  373. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  374. rtn = JsonConvert.SerializeObject(joRtn);
  375. return joRtn;
  376. }
  377. }
  378. /// <summary>
  379. /// HIS服务调用的封装
  380. /// </summary>
  381. /// <param name="data"></param>
  382. /// <returns></returns>
  383. public JObject invokeHISService_T(string data, string serviceDesc)
  384. {
  385. JObject joRtn = new JObject();
  386. try
  387. {
  388. //先根据用户请求的uri构造请求地址
  389. serviceURL = string.Format("{0}/{1}", Global.hisConfig.ip, Global.hisConfig.url);
  390. authorization = Global.hisConfig.authorization;
  391. joRtn = invokeIrisService(data, serviceDesc);
  392. return joRtn;
  393. }
  394. catch (Exception ex)
  395. {
  396. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  397. return joRtn;
  398. }
  399. finally
  400. {
  401. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  402. }
  403. }
  404. /// <summary>
  405. /// 医保平台服务调用的封装
  406. /// </summary>
  407. /// <param name="data"></param>
  408. /// <returns></returns>
  409. public JObject invokeInsuService_T(string data, string serviceDesc)
  410. {
  411. string rtn = "";
  412. JObject joRtn = new JObject();
  413. try
  414. {
  415. //先根据用户请求的uri构造请求地址
  416. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  417. authorization = Global.insuConfig.authorization;
  418. joRtn = invokeIrisService(data, serviceDesc);
  419. rtn = JsonConvert.SerializeObject(joRtn);
  420. return joRtn;
  421. }
  422. catch (Exception ex)
  423. {
  424. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  425. rtn = JsonConvert.SerializeObject(joRtn);
  426. return joRtn;
  427. }
  428. finally
  429. {
  430. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  431. }
  432. }
  433. private JObject invokeCenterService(string data)
  434. {
  435. string postContent = "";
  436. JObject joRtn = new JObject();
  437. try
  438. {
  439. //创建一个HTTP请求
  440. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  441. //Post请求方式
  442. request.Method = "POST";
  443. //内容类型
  444. request.ContentType = "application/json";
  445. String stamp = TimeStamp.get13().ToString();
  446. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.Length - 12);
  447. //南昌增加头部信息
  448. string sTemp = "_api_access_key=" + Global.inf.AK
  449. + "&_api_name=" + apiName
  450. + "&_api_timestamp=" + stamp
  451. + "&_api_version=" + "1.0.0";
  452. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  453. //Global.writeLog(sTemp);
  454. //Global.writeLog(Global.inf.SK);
  455. //Global.writeLog(signature);
  456. request.Headers.Add("_api_version", "1.0.0");
  457. request.Headers.Add("_api_timestamp", stamp);
  458. request.Headers.Add("_api_name", apiName);
  459. request.Headers.Add("_api_signature", signature);
  460. request.Headers.Add("_api_access_key", Global.inf.AK);
  461. //设置参数,并进行URL编码
  462. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  463. byte[] payload;
  464. //将Json字符串转化为字节
  465. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  466. //设置请求的ContentLength
  467. request.ContentLength = payload.Length;
  468. //发送请求,获得请求流
  469. Stream writer;
  470. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  471. //将请求参数写入流
  472. writer.Write(payload, 0, payload.Length);
  473. writer.Close();//关闭请求流
  474. // String strValue = "";//strValue为http响应所返回的字符流
  475. HttpWebResponse response;
  476. try
  477. {
  478. //获得响应流
  479. response = (HttpWebResponse)request.GetResponse();
  480. }
  481. catch (WebException ex)
  482. {
  483. response = ex.Response as HttpWebResponse;
  484. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  485. }
  486. Stream s = response.GetResponseStream();
  487. StreamReader sRead = new StreamReader(s);
  488. postContent = sRead.ReadToEnd();
  489. sRead.Close();
  490. joRtn = JObject.Parse(postContent);//返回Json数据
  491. return joRtn;
  492. }
  493. catch (Exception ex)
  494. {
  495. postContent = "调用中心服务异常" + ex.Message;
  496. joRtn.Add("infcode", -1);
  497. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  498. return joRtn;
  499. }
  500. }
  501. public JObject invokeCenterService(string funNO, JObject data)
  502. {
  503. JObject joRtn = new JObject();
  504. String outPar = "";
  505. try
  506. {
  507. Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-" + funNO;
  508. joRtn = invokeCenterService(data.ToString());
  509. outPar = JsonHelper.Compress(joRtn);
  510. return joRtn;
  511. }
  512. catch (Exception ex)
  513. {
  514. joRtn.Add("infcode", -1);
  515. joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message);
  516. outPar = JsonHelper.Compress(joRtn);
  517. return joRtn;
  518. }
  519. finally
  520. {
  521. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  522. this.saveCenterLog(JsonHelper.Compress(data), outPar);
  523. }
  524. }
  525. public JObject invokeCenterService(string funNO, string data)
  526. {
  527. JObject joRtn = new JObject();
  528. String outPar = "";
  529. try
  530. {
  531. Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-" + funNO;
  532. joRtn = invokeCenterService(data);
  533. outPar = JsonHelper.Compress(joRtn);
  534. return joRtn;
  535. }
  536. catch (Exception ex)
  537. {
  538. joRtn.Add("infcode", -1);
  539. joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message);
  540. outPar = JsonHelper.Compress(joRtn);
  541. return joRtn;
  542. }
  543. finally
  544. {
  545. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), outPar);
  546. this.saveCenterLog(data, outPar);
  547. }
  548. }
  549. public JObject DownloadCenterFile(string data)
  550. {
  551. string error = string.Empty; int errorCode = 0;
  552. string sRtn = "";
  553. try
  554. {
  555. JObject jsonInParam = JObject.Parse(data);
  556. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  557. string filePath = System.Environment.CurrentDirectory + "\\Download\\" + fileName;
  558. //如果不存在目录,则创建目录
  559. if (!Directory.Exists(System.Environment.CurrentDirectory + "\\Download"))
  560. {
  561. //创建文件夹
  562. DirectoryInfo dirInfo = Directory.CreateDirectory(System.Environment.CurrentDirectory + "\\Download");
  563. }
  564. if (File.Exists(filePath))
  565. {
  566. File.Delete(filePath);
  567. }
  568. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  569. //创建一个HTTP请求
  570. Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";
  571. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  572. //Post请求方式
  573. request.Method = "POST";
  574. //内容类型
  575. request.ContentType = "application/json";
  576. String stamp = TimeStamp.get13().ToString();
  577. string apiName = Global.curEvt.URL.Substring(Global.curEvt.URL.Length - 12);
  578. //南昌增加头部信息
  579. string sTemp = "_api_access_key=" + Global.inf.AK
  580. + "&_api_name=" + apiName
  581. + "&_api_timestamp=" + stamp
  582. + "&_api_version=" + "1.0.0";
  583. string signature = Encrypt.ToBase64hmac(sTemp, Global.inf.SK);
  584. //Global.writeLog(sTemp);
  585. //Global.writeLog(Global.inf.SK);
  586. //Global.writeLog(signature);
  587. request.Headers.Add("_api_version", "1.0.0");
  588. request.Headers.Add("_api_timestamp", stamp);
  589. request.Headers.Add("_api_name", apiName);
  590. request.Headers.Add("_api_signature", signature);
  591. request.Headers.Add("_api_access_key", Global.inf.AK);
  592. //设置参数,并进行URL编码
  593. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  594. byte[] payload;
  595. //将Json字符串转化为字节
  596. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  597. //设置请求的ContentLength
  598. request.ContentLength = payload.Length;
  599. Stream writer;
  600. try
  601. {
  602. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  603. }
  604. catch (Exception)
  605. {
  606. writer = null;
  607. errorCode = -100;
  608. error = "连接服务器失败!";
  609. }
  610. //将请求参数写入流
  611. writer.Write(payload, 0, payload.Length);
  612. writer.Close();//关闭请求流
  613. // String strValue = "";//strValue为http响应所返回的字符流
  614. //发送请求并获取相应回应数据
  615. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  616. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  617. Stream responseStream = response.GetResponseStream();
  618. //创建本地文件写入流
  619. byte[] bArr = new byte[1024];
  620. int iTotalSize = 0;
  621. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  622. while (size > 0)
  623. {
  624. iTotalSize += size;
  625. fs.Write(bArr, 0, size);
  626. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  627. }
  628. fs.Close();
  629. responseStream.Close();
  630. dynamic joReturn = new JObject();
  631. joReturn.errorCode = errorCode;
  632. joReturn.error = error;
  633. joReturn.filePath = filePath;
  634. sRtn = joReturn.ToString();
  635. return joReturn;
  636. }
  637. catch (Exception ex)
  638. {
  639. errorCode = -100;
  640. error = ex.Message;
  641. dynamic joReturn = new JObject();
  642. joReturn.errorCode = errorCode;
  643. joReturn.error = error;
  644. sRtn = joReturn.ToString();
  645. return joReturn;
  646. }
  647. finally
  648. {
  649. Global.writeLog("DownloadCenterFile" + "(" + Global.curEvt.URL + ")", data, sRtn);
  650. }
  651. }
  652. /// <summary>
  653. /// 保存中心交易日志到数据库
  654. /// </summary>
  655. /// <param name="inParam"></param>
  656. /// <param name="outParam"></param>
  657. private void saveCenterLog(string inParam, string outParam)
  658. {
  659. dynamic joIris = new JObject();
  660. string sRtn = "";
  661. try
  662. {
  663. //解析postContent,插入医保交易日志表
  664. JObject joIn = new JObject(JObject.Parse(inParam));
  665. JObject joOut = new JObject(JObject.Parse(outParam));
  666. JArray jaParams = new JArray();
  667. JObject joParam = new JObject();
  668. joParam.Add("inParam", JObject.FromObject(joIn));
  669. joParam.Add("outParam", JObject.FromObject(joOut));
  670. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  671. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  672. joParam.Add("updateUserID", Global.user.ID);
  673. joParam.Add("psn_no", Global.pat.psn_no);
  674. jaParams.Add(joParam);
  675. joIris.code = "09010021";
  676. joIris.Add("params", jaParams);
  677. //InvokeHelper invoker = new InvokeHelper();
  678. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  679. }
  680. catch (Exception ex)
  681. {
  682. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  683. }
  684. }
  685. }
  686. }