InvokeHelper.cs 38 KB

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