InvokeHelper.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761
  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. joRtn = JObject.Parse(decData);
  356. joRtn.Add("success", "False");
  357. Global.writeLog("验签失败,请核查!");
  358. }
  359. }
  360. return joRtn;
  361. }
  362. finally
  363. {
  364. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  365. }
  366. }
  367. catch (Exception ex)
  368. {
  369. if (joRtn["infcode"] == null)
  370. { joRtn.Add("infcode", -1); }
  371. if (joRtn["err_msg"] == null)
  372. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  373. outPar = JsonHelper.Compress(joRtn);
  374. return joRtn;
  375. }
  376. finally
  377. {
  378. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
  379. this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
  380. }
  381. }
  382. #endregion
  383. /// <summary>
  384. /// 医保中心Post服务调用封装
  385. /// </summary>
  386. /// <param name="data"></param>
  387. /// <returns></returns>
  388. private JObject invokeCenterService(string data)
  389. {
  390. string postContent = "";
  391. JObject joRtn = new JObject();
  392. try
  393. {
  394. //内容类型
  395. Signer signer = new Signer();
  396. signer.Key = Global.inf.privateKey; //应用编码
  397. signer.Secret = Global.inf.Secret; //secretKey 私钥
  398. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  399. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  400. HttpRequest Resquest = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  401. Resquest.headers.Add("charset", "UTF-8");
  402. Resquest.headers.Add("x-hw-id", signer.Key);
  403. Resquest.headers.Add("x-tif-timestamp", timestamp);
  404. Resquest.headers.Add("x-tif-passid", signer.Key);
  405. Resquest.headers.Add("x-tif-nonce", nonce);
  406. Resquest.body = data;
  407. string RtnStr;
  408. HttpWebRequest req = signer.Sign(Resquest);
  409. req.ContentType = "application/json;charset=utf8";
  410. req.Timeout = 5 * 10000;
  411. try
  412. {
  413. var writer = new StreamWriter(req.GetRequestStream());
  414. writer.Write(Resquest.body);
  415. writer.Flush();
  416. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  417. StreamReader reader = new StreamReader(resp.GetResponseStream());
  418. RtnStr = reader.ReadToEnd();
  419. joRtn = JObject.Parse(RtnStr);//返回Json数据
  420. return joRtn;
  421. }
  422. catch(WebException e)
  423. {
  424. HttpWebResponse resp = (HttpWebResponse)e.Response;
  425. if (resp != null)
  426. {
  427. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(a)", new StreamReader(resp.GetResponseStream()).ReadToEnd() + "异常内容:" + e.Message);
  428. }
  429. else
  430. {
  431. RtnStr = "异常:" + e.Message;
  432. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(b)", e.Message);
  433. }
  434. }
  435. }
  436. catch (Exception ex)
  437. {
  438. postContent = "调用中心服务异常" + ex.Message;
  439. joRtn.Add("infcode", -1);
  440. joRtn.Add("err_msg", "invokeCenterService(Exception_Last):" + ex.Message);
  441. return joRtn;
  442. }
  443. }
  444. /// </summary>
  445. /// <param name="funNO"></param>
  446. /// <param name="data"></param>
  447. /// <returns></returns>
  448. public JObject invokeCenterService(string funNO, JObject data)
  449. {
  450. JObject joRtn = new JObject();
  451. string outPar = ""; Boolean bDownLoad = false;
  452. int iInt = 0;
  453. try
  454. {
  455. Global.curEvt.URL = Global.inf.centerURL + funNO;
  456. joRtn = invokeCenterService(data.ToString());
  457. outPar = JsonHelper.Compress(joRtn);
  458. return joRtn;
  459. }
  460. catch (Exception ex)
  461. {
  462. if (joRtn["infcode"] == null)
  463. { joRtn.Add("infcode", -1); }
  464. if (joRtn["err_msg"] == null)
  465. { joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message); }
  466. outPar = JsonHelper.Compress(joRtn);
  467. return joRtn;
  468. }
  469. finally
  470. {
  471. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  472. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  473. }
  474. }
  475. /// </summary>
  476. /// <param name="funNO"></param>
  477. /// <param name="data"></param>
  478. /// <returns></returns>
  479. public JObject invokeCenterService(string funNO, string data)
  480. {
  481. JObject joRtn = new JObject();
  482. string outPar = "";
  483. try
  484. {
  485. Global.curEvt.URL = Global.inf.centerURL + funNO;
  486. joRtn = invokeCenterService(data);
  487. outPar = JsonHelper.Compress(joRtn);
  488. return joRtn;
  489. }
  490. catch (Exception ex)
  491. {
  492. if (joRtn["infcode"] == null)
  493. { joRtn.Add("infcode", -1); }
  494. if (joRtn["err_msg"] == null)
  495. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  496. outPar = JsonHelper.Compress(joRtn);
  497. return joRtn;
  498. }
  499. finally
  500. {
  501. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  502. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  503. }
  504. }
  505. /// </summary>
  506. /// <param name="funNO"></param>
  507. /// <param name="data"></param>
  508. /// <returns></returns>
  509. public JObject invokeCenterServicePresCir(string funNO, string data)
  510. {
  511. JObject joRtn = new JObject();
  512. string outPar = "";
  513. try
  514. {
  515. if (funNO == "7101")
  516. {
  517. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/uploadChk";
  518. }
  519. else if (funNO == "7102")
  520. {
  521. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFixmedinsSign";
  522. }
  523. else if (funNO == "7103")
  524. {
  525. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFileUpld";
  526. }
  527. else if (funNO == "7104")
  528. {
  529. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxUndo";
  530. }
  531. else if (funNO == "7105")
  532. {
  533. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/hospRxDetlQuery";
  534. }
  535. else if (funNO == "7106")
  536. {
  537. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoQuery";
  538. }
  539. else if (funNO == "7107")
  540. {
  541. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoQuery";
  542. }
  543. else if (funNO == "7108")
  544. {
  545. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoCallback";
  546. }
  547. else if (funNO == "7109")
  548. {
  549. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoCallback";
  550. }
  551. else
  552. {
  553. Global.curEvt.URL = Global.inf.centerURL;
  554. }
  555. //Global.curEvt.URL = Global.inf.centerURL;
  556. joRtn = invokeCenterServicePresCir(data);
  557. outPar = JsonHelper.Compress(joRtn);
  558. return joRtn;
  559. }
  560. catch (Exception ex)
  561. {
  562. if (joRtn["infcode"] == null)
  563. { joRtn.Add("infcode", -1); }
  564. if (joRtn["err_msg"] == null)
  565. { joRtn.Add("err_msg", "invokeCenterServicePresCir(3):" + ex.Message); }
  566. outPar = JsonHelper.Compress(joRtn);
  567. return joRtn;
  568. }
  569. finally
  570. {
  571. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  572. //this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  573. }
  574. }
  575. /// <summary>
  576. /// 医保目录txt文件下载
  577. /// </summary>
  578. /// <param name="data"></param>
  579. /// <returns></returns>
  580. public JObject DownloadCenterFile(string data)
  581. {
  582. string error = string.Empty; int errorCode = 0;
  583. string sRtn = "";
  584. try
  585. {
  586. JObject jsonInParam = JObject.Parse(data);
  587. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  588. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  589. //MessageBox.Show("9102下载文件入参:"+jsonInParam.ToString());
  590. //如果不存在目录,则创建目录
  591. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  592. {
  593. //创建文件夹
  594. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  595. }
  596. if (File.Exists(filePath))
  597. {
  598. File.Delete(filePath);
  599. }
  600. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  601. //创建一个HTTP请求
  602. Global.curEvt.URL = Global.inf.centerURL + "9102";
  603. Signer signer = new Signer();
  604. signer.Key = Global.inf.privateKey;
  605. signer.Secret = Global.inf.Secret;
  606. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  607. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  608. HttpRequest r = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  609. r.headers.Add("x-hw-id", signer.Key);
  610. r.headers.Add("charset", "UTF-8");
  611. r.headers.Add("x-tif-timestamp", timestamp);
  612. r.headers.Add("x-tif-passid", signer.Key);
  613. r.headers.Add("x-tif-nonce", nonce);
  614. r.body = data;
  615. HttpWebRequest req = signer.Sign(r);
  616. req.ContentType = "application/json;charset=utf8";
  617. req.Timeout = 5 * 10000;
  618. var writer = new StreamWriter(req.GetRequestStream());
  619. writer.Write(r.body);
  620. writer.Flush();
  621. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  622. Stream responseStream = resp.GetResponseStream();
  623. byte[] bArr = new byte[1024];
  624. int iTotalSize = 0;
  625. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  626. while (size > 0)
  627. {
  628. iTotalSize += size;
  629. fs.Write(bArr, 0, size);
  630. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  631. }
  632. fs.Close();
  633. responseStream.Close();
  634. dynamic joReturn = new JObject();
  635. joReturn.errorCode = errorCode;
  636. joReturn.errorMessage = error;
  637. joReturn.filePath = filePath;
  638. sRtn = joReturn.ToString();
  639. return joReturn;
  640. }
  641. catch (Exception ex)
  642. {
  643. errorCode = -100;
  644. error = ex.Message;
  645. dynamic joReturn = new JObject();
  646. joReturn.errorCode = errorCode;
  647. joReturn.errorMessage = error;
  648. sRtn = joReturn.ToString();
  649. return joReturn;
  650. }
  651. finally
  652. {
  653. Global.writeLog("DownloadCenterFile" +"(" + Global.curEvt.URL + ")", data, sRtn);
  654. }
  655. }
  656. /// <summary>
  657. /// 保存中心交易日志到数据库
  658. /// </summary>
  659. /// <param name="inParam"></param>
  660. /// <param name="outParam"></param>
  661. /// <param name="inParamPlain"></param>
  662. /// <param name="outParamPlain"></param>
  663. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  664. {
  665. dynamic joIris = new JObject();
  666. string sRtn = "";
  667. try
  668. {
  669. //解析postContent,插入医保交易日志表
  670. JObject joIn = new JObject(JObject.Parse(inParam));
  671. JObject joOut = new JObject(JObject.Parse(outParam));
  672. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  673. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  674. JArray jaParams = new JArray();
  675. JObject joParam = new JObject();
  676. joParam.Add("inParam", JObject.FromObject(joIn));
  677. joParam.Add("outParam", JObject.FromObject(joOut));
  678. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  679. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  680. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  681. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  682. joParam.Add("updateUserID", Global.user.ID);
  683. joParam.Add("psn_no", Global.pat.psn_no);
  684. jaParams.Add(joParam);
  685. joIris.code = "09010021";
  686. joIris.Add("params", jaParams);
  687. //InvokeHelper invoker = new InvokeHelper();
  688. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  689. }
  690. catch (Exception ex)
  691. {
  692. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  693. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  694. }
  695. }
  696. }
  697. }