InvokeHelper.cs 31 KB

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