InvokeHelper.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  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. ******************************************************************************/
  12. using Newtonsoft.Json.Linq;
  13. using Newtonsoft.Json;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.IO;
  17. using System.Linq;
  18. using System.Net;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Windows.Forms;
  22. using PTMedicalInsurance.Helper;
  23. using PTMedicalInsurance.Common;
  24. using PTMedicalInsurance.Variables;
  25. using System.Runtime.InteropServices;
  26. using PTMedicalInsurance.APIGATEWAY_SDK;
  27. using System.Net.Http;
  28. using System.Globalization;
  29. using PTMedicalInsurance.Forms;
  30. namespace PTMedicalInsurance.Helper
  31. {
  32. class InvokeHelper
  33. {
  34. private string serviceURL;
  35. private string authorization;
  36. /// <summary>
  37. /// iris服务调用的封装
  38. /// </summary>
  39. /// <param name="data"></param>
  40. /// <returns></returns>
  41. public JObject invokeIrisService(string data, string serviceDesc)
  42. {
  43. string rtn = "", url = "";
  44. JObject joRtn = new JObject();
  45. try
  46. {
  47. //先根据用户请求的uri构造请求地址
  48. url = serviceURL;
  49. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  50. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  51. //创建Web访问对象
  52. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  53. //把用户传过来的数据转成“UTF-8”的字节流
  54. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  55. //添加头部信息
  56. myRequest.Method = "POST";
  57. myRequest.ContentLength = buf.Length;
  58. myRequest.ContentType = "application/json";
  59. myRequest.Headers.Add("Authorization", authorization);
  60. myRequest.MaximumAutomaticRedirections = 1;
  61. myRequest.AllowAutoRedirect = true;
  62. //发送请求
  63. Stream stream = myRequest.GetRequestStream();
  64. stream.Write(buf, 0, buf.Length);
  65. stream.Close();
  66. //获取接口返回值
  67. //通过Web访问对象获取响应内容
  68. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  69. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  70. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  71. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  72. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  73. reader.Close();
  74. myResponse.Close();
  75. joRtn = JObject.Parse(rtn);
  76. return joRtn;
  77. }
  78. catch (Exception ex)
  79. {
  80. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  81. rtn = JsonConvert.SerializeObject(joRtn);
  82. return joRtn;
  83. }
  84. finally
  85. {
  86. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  87. }
  88. }
  89. /// <summary>
  90. /// HIS服务调用的封装
  91. /// </summary>
  92. /// <param name="data"></param>
  93. /// <returns></returns>
  94. public JObject invokeHISService(string data, string serviceDesc)
  95. {
  96. JObject joRtn = new JObject();
  97. try
  98. {
  99. //先根据用户请求的uri构造请求地址
  100. serviceURL = string.Format("{0}/{1}", Global.hisConfig.ip, Global.hisConfig.url);
  101. authorization = Global.hisConfig.authorization;
  102. joRtn = invokeIrisService(data, serviceDesc);
  103. return joRtn;
  104. }
  105. catch (Exception ex)
  106. {
  107. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  108. return joRtn;
  109. }
  110. finally
  111. {
  112. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  113. }
  114. }
  115. /// <summary>
  116. /// 医保平台服务调用的封装
  117. /// </summary>
  118. /// <param name="data"></param>
  119. /// <returns></returns>
  120. public JObject invokeInsuService(string data, string serviceDesc)
  121. {
  122. string rtn = "";
  123. JObject joRtn = new JObject();
  124. try
  125. {
  126. //先根据用户请求的uri构造请求地址
  127. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  128. authorization = Global.insuConfig.authorization;
  129. joRtn = invokeIrisService(data, serviceDesc);
  130. rtn = JsonConvert.SerializeObject(joRtn);
  131. return joRtn;
  132. }
  133. catch (Exception ex)
  134. {
  135. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  136. rtn = JsonConvert.SerializeObject(joRtn);
  137. return joRtn;
  138. }
  139. finally
  140. {
  141. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  142. }
  143. }
  144. private JObject invokeCenterService_KM(string data)
  145. {
  146. string postContent = "";
  147. JObject joRtn = new JObject();
  148. try
  149. {
  150. //创建一个HTTP请求
  151. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  152. //Post请求方式
  153. request.Method = "POST";
  154. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  155. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  156. //内容类型
  157. request.ContentType = "application/json";
  158. //昆明增加头部信息
  159. string sTemp = timestamp + Global.inf.privateKey + nonce + timestamp;
  160. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  161. string signature = Encrypt.SHA256EncryptStr(sTemp);
  162. request.Headers.Add("x-tif-signature", signature);
  163. request.Headers.Add("x-tif-timestamp", timestamp);
  164. request.Headers.Add("x-tif-nonce", nonce);
  165. request.Headers.Add("x-tif-paasid", Global.inf.privateKey);
  166. request.Headers.Add("x-hw-id", Global.inf.privateKey);
  167. //设置参数,并进行URL编码
  168. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  169. byte[] payload;
  170. //将Json字符串转化为字节
  171. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  172. //设置请求的ContentLength
  173. request.ContentLength = payload.Length;
  174. //发送请求,获得请求流
  175. Stream writer;
  176. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  177. //将请求参数写入流
  178. writer.Write(payload, 0, payload.Length);
  179. writer.Close();//关闭请求流
  180. // String strValue = "";//strValue为http响应所返回的字符流
  181. HttpWebResponse response;
  182. try
  183. {
  184. //获得响应流
  185. response = (HttpWebResponse)request.GetResponse();
  186. }
  187. catch (WebException ex)
  188. {
  189. response = ex.Response as HttpWebResponse;
  190. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  191. }
  192. Stream s = response.GetResponseStream();
  193. StreamReader sRead = new StreamReader(s);
  194. postContent = sRead.ReadToEnd();
  195. sRead.Close();
  196. joRtn = JObject.Parse(postContent);//返回Json数据
  197. return joRtn;
  198. }
  199. catch (Exception ex)
  200. {
  201. postContent = "调用中心服务异常" + ex.Message;
  202. joRtn.Add("infcode", -1);
  203. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  204. return joRtn;
  205. }
  206. }
  207. /// <summary>
  208. /// 医保电子处方流转调用服务
  209. /// </summary>
  210. /// <param name="data"></param>
  211. /// <returns></returns>
  212. private JObject invokeCenterServicePresCir(string data)
  213. {
  214. string postContent = "";
  215. JObject joRtn = new JObject();
  216. try
  217. {
  218. //内容类型
  219. Signer signer = new Signer();
  220. signer.Key = Global.inf.privateKey; //应用编码
  221. signer.Secret = Global.inf.Secret; //secretKey 私钥
  222. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  223. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  224. HttpRequest Resquest = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  225. Resquest.headers.Add("charset", "UTF-8");
  226. //Resquest.headers.Add("x-hw-id", signer.Key);
  227. //Resquest.headers.Add("x-tif-timestamp", timestamp);
  228. //Resquest.headers.Add("x-tif-passid", signer.Key);
  229. //Resquest.headers.Add("x-tif-nonce", nonce);
  230. Resquest.body = data;
  231. string RtnStr;
  232. HttpWebRequest req = signer.Sign(Resquest);
  233. req.ContentType = "application/json;charset=utf8";
  234. req.Timeout = 5 * 10000;
  235. try
  236. {
  237. var writer = new StreamWriter(req.GetRequestStream());
  238. writer.Write(Resquest.body);
  239. writer.Flush();
  240. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  241. StreamReader reader = new StreamReader(resp.GetResponseStream());
  242. RtnStr = reader.ReadToEnd();
  243. joRtn = JObject.Parse(RtnStr);//返回Json数据
  244. return joRtn;
  245. }
  246. catch (WebException e)
  247. {
  248. HttpWebResponse resp = (HttpWebResponse)e.Response;
  249. if (resp != null)
  250. {
  251. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(a)", new StreamReader(resp.GetResponseStream()).ReadToEnd() + "异常内容:" + e.Message);
  252. }
  253. else
  254. {
  255. RtnStr = "异常:" + e.Message;
  256. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(b)", e.Message);
  257. }
  258. }
  259. }
  260. catch (Exception ex)
  261. {
  262. postContent = "调用中心服务异常" + ex.Message;
  263. joRtn.Add("infcode", -1);
  264. joRtn.Add("err_msg", "invokeCenterService(Exception_Last):" + ex.Message);
  265. return joRtn;
  266. }
  267. }
  268. #region 【医保移动支付】
  269. /// <summary>
  270. /// 移动
  271. /// </summary>
  272. /// <param name="funNO"></param>
  273. /// <param name="data"></param>
  274. /// <returns></returns>
  275. public JObject invokeMPService(string funNO, string data)
  276. {
  277. return invokeMPService(funNO, JObject.Parse(data));
  278. }
  279. public JObject invokeMPService(string funNO, JObject joInput)
  280. {
  281. JObject joRtn = new JObject();
  282. String outPar = "";
  283. try
  284. {
  285. string url = "";
  286. switch (funNO)
  287. {
  288. case "6201":
  289. url = "/org/local/api/hos/uldFeeInfo";
  290. break;
  291. case "6202":
  292. url = "/org/local/api/hos/pay_order";
  293. break;
  294. case "6203":
  295. url = "/org/local/api/hos/refund_Order";
  296. break;
  297. case "6301":
  298. url = "/org/local/api/hos/query_order_info";
  299. break;
  300. case "6401":
  301. url = "/org/local/api/hos/revoke_order";
  302. break;
  303. default:
  304. break;
  305. }
  306. EncryptHelper encrypt = new EncryptHelper();
  307. //兰州医保移动支付测试环境
  308. //Global.inf.mobilePayURL = @"http:\\10.126.40.167:8080";
  309. //兰州医保移动支付正式环境
  310. Global.inf.mobilePayURL = @"http:\\10.126.34.19:8080";
  311. string data = JsonHelper.setMPCenterInpar(funNO, joInput);
  312. // 移动支付地址
  313. Global.curEvt.URL = Global.inf.mobilePayURL + url;
  314. Global.inf.centerURL = Global.curEvt.URL;
  315. string outputData = "", errMsg = "";
  316. // 动态调试模式
  317. if (Global.curEvt.enabledDebug)
  318. {
  319. CenterResult center = new CenterResult();
  320. center.setTradeNo(funNO);
  321. if (center.ShowDialog() == DialogResult.OK)
  322. {
  323. outPar = center.returnData;
  324. return JObject.Parse(outPar);
  325. }
  326. }
  327. try
  328. {
  329. InvokeRestCenter mobileCenter = new InvokeRestCenter();
  330. int iInt = mobileCenter.Business(data, ref outputData, ref errMsg);
  331. joRtn = JObject.Parse(outputData);
  332. string encData = JsonHelper.getDestValue(joRtn, "encData");
  333. string signData = JsonHelper.getDestValue(joRtn, "signData");
  334. if (!string.IsNullOrEmpty(encData) && !string.IsNullOrEmpty(signData))
  335. {
  336. joRtn.Remove("encData");
  337. joRtn.Remove("signData");
  338. joRtn.Remove("data");
  339. //解密
  340. string decData = encrypt.decrypt00(encData);
  341. // 验签
  342. JsonConvert.DefaultSettings = () => new JsonSerializerSettings
  343. {
  344. FloatParseHandling = FloatParseHandling.Decimal
  345. };
  346. joRtn.Add("data", JToken.FromObject(JsonConvert.DeserializeObject(decData)));
  347. bool rtn = encrypt.verify(joRtn, signData);
  348. if (rtn)
  349. {
  350. joRtn = JObject.Parse(decData);
  351. joRtn.Add("success", "True");
  352. }
  353. else
  354. {
  355. Global.writeLog("验签失败,请核查!");
  356. }
  357. }
  358. return joRtn;
  359. }
  360. finally
  361. {
  362. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  363. }
  364. }
  365. catch (Exception ex)
  366. {
  367. if (joRtn["infcode"] == null)
  368. { joRtn.Add("infcode", -1); }
  369. if (joRtn["err_msg"] == null)
  370. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  371. outPar = JsonHelper.Compress(joRtn);
  372. return joRtn;
  373. }
  374. finally
  375. {
  376. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
  377. this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
  378. }
  379. }
  380. #endregion
  381. /// <summary>
  382. /// 医保中心Post服务调用封装
  383. /// </summary>
  384. /// <param name="data"></param>
  385. /// <returns></returns>
  386. private JObject invokeCenterService(string data)
  387. {
  388. string postContent = "";
  389. JObject joRtn = new JObject();
  390. try
  391. {
  392. //内容类型
  393. Signer signer = new Signer();
  394. signer.Key = Global.inf.privateKey; //应用编码
  395. signer.Secret = Global.inf.Secret; //secretKey 私钥
  396. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  397. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  398. HttpRequest Resquest = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  399. Resquest.headers.Add("charset", "UTF-8");
  400. Resquest.headers.Add("x-hw-id", signer.Key);
  401. Resquest.headers.Add("x-tif-timestamp", timestamp);
  402. Resquest.headers.Add("x-tif-passid", signer.Key);
  403. Resquest.headers.Add("x-tif-nonce", nonce);
  404. Resquest.body = data;
  405. string RtnStr;
  406. HttpWebRequest req = signer.Sign(Resquest);
  407. req.ContentType = "application/json;charset=utf8";
  408. req.Timeout = 5 * 10000;
  409. try
  410. {
  411. var writer = new StreamWriter(req.GetRequestStream());
  412. writer.Write(Resquest.body);
  413. writer.Flush();
  414. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  415. StreamReader reader = new StreamReader(resp.GetResponseStream());
  416. RtnStr = reader.ReadToEnd();
  417. joRtn = JObject.Parse(RtnStr);//返回Json数据
  418. return joRtn;
  419. }
  420. catch(WebException e)
  421. {
  422. HttpWebResponse resp = (HttpWebResponse)e.Response;
  423. if (resp != null)
  424. {
  425. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(a)", new StreamReader(resp.GetResponseStream()).ReadToEnd() + "异常内容:" + e.Message);
  426. }
  427. else
  428. {
  429. RtnStr = "异常:" + e.Message;
  430. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(b)", e.Message);
  431. }
  432. }
  433. }
  434. catch (Exception ex)
  435. {
  436. postContent = "调用中心服务异常" + ex.Message;
  437. joRtn.Add("infcode", -1);
  438. joRtn.Add("err_msg", "invokeCenterService(Exception_Last):" + ex.Message);
  439. return joRtn;
  440. }
  441. }
  442. /// </summary>
  443. /// <param name="funNO"></param>
  444. /// <param name="data"></param>
  445. /// <returns></returns>
  446. public JObject invokeCenterService(string funNO, JObject data)
  447. {
  448. JObject joRtn = new JObject();
  449. string outPar = ""; Boolean bDownLoad = false;
  450. int iInt = 0;
  451. try
  452. {
  453. Global.curEvt.URL = Global.inf.centerURL + funNO;
  454. joRtn = invokeCenterService(data.ToString());
  455. outPar = JsonHelper.Compress(joRtn);
  456. return joRtn;
  457. }
  458. catch (Exception ex)
  459. {
  460. if (joRtn["infcode"] == null)
  461. { joRtn.Add("infcode", -1); }
  462. if (joRtn["err_msg"] == null)
  463. { joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message); }
  464. outPar = JsonHelper.Compress(joRtn);
  465. return joRtn;
  466. }
  467. finally
  468. {
  469. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  470. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  471. }
  472. }
  473. /// </summary>
  474. /// <param name="funNO"></param>
  475. /// <param name="data"></param>
  476. /// <returns></returns>
  477. public JObject invokeCenterService(string funNO, string data)
  478. {
  479. JObject joRtn = new JObject();
  480. string outPar = "";
  481. try
  482. {
  483. Global.curEvt.URL = Global.inf.centerURL + funNO;
  484. joRtn = invokeCenterService(data);
  485. outPar = JsonHelper.Compress(joRtn);
  486. return joRtn;
  487. }
  488. catch (Exception ex)
  489. {
  490. if (joRtn["infcode"] == null)
  491. { joRtn.Add("infcode", -1); }
  492. if (joRtn["err_msg"] == null)
  493. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  494. outPar = JsonHelper.Compress(joRtn);
  495. return joRtn;
  496. }
  497. finally
  498. {
  499. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  500. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  501. }
  502. }
  503. /// </summary>
  504. /// <param name="funNO"></param>
  505. /// <param name="data"></param>
  506. /// <returns></returns>
  507. public JObject invokeCenterServicePresCir(string funNO, string data)
  508. {
  509. JObject joRtn = new JObject();
  510. string outPar = "";
  511. try
  512. {
  513. if (funNO == "7101")
  514. {
  515. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/uploadChk";
  516. }
  517. else if (funNO == "7102")
  518. {
  519. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFixmedinsSign";
  520. }
  521. else if (funNO == "7103")
  522. {
  523. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFileUpld";
  524. }
  525. else if (funNO == "7104")
  526. {
  527. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxUndo";
  528. }
  529. else if (funNO == "7105")
  530. {
  531. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/hospRxDetlQuery";
  532. }
  533. else if (funNO == "7106")
  534. {
  535. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoQuery";
  536. }
  537. else if (funNO == "7107")
  538. {
  539. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoQuery";
  540. }
  541. else if (funNO == "7108")
  542. {
  543. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoCallback";
  544. }
  545. else if (funNO == "7109")
  546. {
  547. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoCallback";
  548. }
  549. else
  550. {
  551. Global.curEvt.URL = Global.inf.centerURL;
  552. }
  553. //Global.curEvt.URL = Global.inf.centerURL;
  554. joRtn = invokeCenterServicePresCir(data);
  555. outPar = JsonHelper.Compress(joRtn);
  556. return joRtn;
  557. }
  558. catch (Exception ex)
  559. {
  560. if (joRtn["infcode"] == null)
  561. { joRtn.Add("infcode", -1); }
  562. if (joRtn["err_msg"] == null)
  563. { joRtn.Add("err_msg", "invokeCenterServicePresCir(3):" + ex.Message); }
  564. outPar = JsonHelper.Compress(joRtn);
  565. return joRtn;
  566. }
  567. finally
  568. {
  569. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  570. //this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  571. }
  572. }
  573. /// <summary>
  574. /// 医保目录txt文件下载
  575. /// </summary>
  576. /// <param name="data"></param>
  577. /// <returns></returns>
  578. public JObject DownloadCenterFile(string data)
  579. {
  580. string error = string.Empty; int errorCode = 0;
  581. string sRtn = "";
  582. try
  583. {
  584. JObject jsonInParam = JObject.Parse(data);
  585. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  586. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  587. //MessageBox.Show("9102下载文件入参:"+jsonInParam.ToString());
  588. //如果不存在目录,则创建目录
  589. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  590. {
  591. //创建文件夹
  592. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  593. }
  594. if (File.Exists(filePath))
  595. {
  596. File.Delete(filePath);
  597. }
  598. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  599. //创建一个HTTP请求
  600. Global.curEvt.URL = Global.inf.centerURL + "9102";
  601. Signer signer = new Signer();
  602. signer.Key = Global.inf.privateKey;
  603. signer.Secret = Global.inf.Secret;
  604. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  605. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  606. HttpRequest r = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  607. r.headers.Add("x-hw-id", signer.Key);
  608. r.headers.Add("charset", "UTF-8");
  609. r.headers.Add("x-tif-timestamp", timestamp);
  610. r.headers.Add("x-tif-passid", signer.Key);
  611. r.headers.Add("x-tif-nonce", nonce);
  612. r.body = data;
  613. HttpWebRequest req = signer.Sign(r);
  614. req.ContentType = "application/json;charset=utf8";
  615. req.Timeout = 5 * 10000;
  616. var writer = new StreamWriter(req.GetRequestStream());
  617. writer.Write(r.body);
  618. writer.Flush();
  619. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  620. Stream responseStream = resp.GetResponseStream();
  621. byte[] bArr = new byte[1024];
  622. int iTotalSize = 0;
  623. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  624. while (size > 0)
  625. {
  626. iTotalSize += size;
  627. fs.Write(bArr, 0, size);
  628. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  629. }
  630. fs.Close();
  631. responseStream.Close();
  632. dynamic joReturn = new JObject();
  633. joReturn.errorCode = errorCode;
  634. joReturn.errorMessage = error;
  635. joReturn.filePath = filePath;
  636. sRtn = joReturn.ToString();
  637. return joReturn;
  638. }
  639. catch (Exception ex)
  640. {
  641. errorCode = -100;
  642. error = ex.Message;
  643. dynamic joReturn = new JObject();
  644. joReturn.errorCode = errorCode;
  645. joReturn.errorMessage = error;
  646. sRtn = joReturn.ToString();
  647. return joReturn;
  648. }
  649. finally
  650. {
  651. Global.writeLog("DownloadCenterFile" +"(" + Global.curEvt.URL + ")", data, sRtn);
  652. }
  653. }
  654. /// <summary>
  655. /// 保存中心交易日志到数据库
  656. /// </summary>
  657. /// <param name="inParam"></param>
  658. /// <param name="outParam"></param>
  659. /// <param name="inParamPlain"></param>
  660. /// <param name="outParamPlain"></param>
  661. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  662. {
  663. dynamic joIris = new JObject();
  664. string sRtn = "";
  665. try
  666. {
  667. //解析postContent,插入医保交易日志表
  668. JObject joIn = new JObject(JObject.Parse(inParam));
  669. JObject joOut = new JObject(JObject.Parse(outParam));
  670. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  671. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  672. JArray jaParams = new JArray();
  673. JObject joParam = new JObject();
  674. joParam.Add("inParam", JObject.FromObject(joIn));
  675. joParam.Add("outParam", JObject.FromObject(joOut));
  676. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  677. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  678. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  679. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  680. joParam.Add("updateUserID", Global.user.ID);
  681. joParam.Add("psn_no", Global.pat.psn_no);
  682. jaParams.Add(joParam);
  683. joIris.code = "09010021";
  684. joIris.Add("params", jaParams);
  685. //InvokeHelper invoker = new InvokeHelper();
  686. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  687. }
  688. catch (Exception ex)
  689. {
  690. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  691. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  692. }
  693. }
  694. }
  695. }