InvokeHelper.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  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 System;
  14. using System.Collections.Generic;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Net;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using System.Windows.Forms;
  21. using PTMedicalInsurance.Helper;
  22. using Newtonsoft.Json;
  23. using PTMedicalInsurance.Common;
  24. using PTMedicalInsurance.Variables;
  25. using System.Runtime.InteropServices;
  26. //using chsinterfaceyn;
  27. using System.Reflection;
  28. using PTMedicalInsurance.Forms;
  29. using FastReport.Cloud.OAuth;
  30. using Fizzler;
  31. using System.Security.Policy;
  32. using System.IO.Pipes;
  33. using FastReport.Utils;
  34. using System.Web;
  35. namespace PTMedicalInsurance.Helper
  36. {
  37. class InvokeHelper
  38. {
  39. private string serviceURL;
  40. private string authorization;
  41. //广西南宁基线版医保接口调用COM
  42. //string progID1 = "YinHai.XJ.Actual.Interface.New";
  43. //System.Type YinHaiComType;
  44. //object YinHaiComInstance;
  45. public void Call(string infno, string input, out string output)
  46. {
  47. try
  48. {
  49. Type YinHaiComType = System.Type.GetTypeFromProgID("YinHai.XJ.Actual.Interface.New");
  50. if (YinHaiComType != null)
  51. {
  52. //创建实例,不能再次创建,否则会提示没有初始化
  53. object YinHaiComInstance = System.Activator.CreateInstance(YinHaiComType);
  54. if (YinHaiComInstance != null)
  55. {
  56. Global.writeLog("实例创建成功,准备调用Call服务");
  57. }
  58. else
  59. {
  60. output = "实例不存在!";
  61. Global.writeLog("实例不存在");
  62. return;
  63. }
  64. //GlobalVariables.writeLog("入参infno:" + infno);
  65. //GlobalVariables.writeLog("入参input:" + input);
  66. //设置需要设置的参数值
  67. object[] ParamArray = new object[3];
  68. ParamArray[0] = infno;
  69. ParamArray[1] = input;
  70. ParamArray[2] = "";
  71. ParameterModifier[] ParamMods = new ParameterModifier[1];
  72. ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数
  73. //ParamMods[0][0] = false;
  74. //ParamMods[0][1] = false;
  75. ParamMods[0][2] = true;
  76. YinHaiComType.InvokeMember("gxyb_call", // 接口函数名
  77. BindingFlags.Default | BindingFlags.InvokeMethod,
  78. null,
  79. YinHaiComInstance, // 调用的COM组件
  80. ParamArray, // 参数数组
  81. ParamMods, // 指定返回参数的ParameterModifier数组
  82. null,
  83. null);
  84. output = ParamArray[2].ToString();
  85. Global.writeLog("Com输出:" + output);
  86. }
  87. else
  88. {
  89. output = "COM加载失败!";
  90. Global.writeLog("COM加载失败!");
  91. }
  92. }
  93. catch (Exception ex)
  94. {
  95. output = ex.Message;
  96. Global.writeLog("COM加载失败!" + output);
  97. }
  98. }
  99. /// <summary>
  100. /// iris服务调用的封装
  101. /// </summary>
  102. /// <param name="data"></param>
  103. /// <returns></returns>
  104. public JObject invokeIrisService(string data, string serviceDesc)
  105. {
  106. string rtn = "", url = "";
  107. JObject joRtn = new JObject();
  108. try
  109. {
  110. //先根据用户请求的uri构造请求地址
  111. url = serviceURL;
  112. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  113. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  114. //创建Web访问对象
  115. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  116. //把用户传过来的数据转成“UTF-8”的字节流
  117. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  118. //添加头部信息
  119. myRequest.Method = "POST";
  120. myRequest.ContentLength = buf.Length;
  121. myRequest.ContentType = "application/json";
  122. myRequest.Headers.Add("Authorization", authorization);
  123. myRequest.MaximumAutomaticRedirections = 1;
  124. myRequest.AllowAutoRedirect = true;
  125. //发送请求
  126. Stream stream = myRequest.GetRequestStream();
  127. stream.Write(buf, 0, buf.Length);
  128. stream.Close();
  129. //获取接口返回值
  130. //通过Web访问对象获取响应内容
  131. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  132. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  133. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  134. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  135. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  136. reader.Close();
  137. myResponse.Close();
  138. joRtn = JObject.Parse(rtn);
  139. return joRtn;
  140. }
  141. catch (Exception ex)
  142. {
  143. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  144. rtn = JsonConvert.SerializeObject(joRtn);
  145. return joRtn;
  146. }
  147. }
  148. /// <summary>
  149. /// HIS服务调用的封装
  150. /// </summary>
  151. /// <param name="data"></param>
  152. /// <returns></returns>
  153. public JObject invokeHISService(string data, string serviceDesc)
  154. {
  155. JObject joRtn = new JObject();
  156. try
  157. {
  158. //先根据用户请求的uri构造请求地址
  159. serviceURL = string.Format("{0}/{1}", Global.hisConfig.ip, Global.hisConfig.url);
  160. authorization = Global.hisConfig.authorization;
  161. joRtn = invokeIrisService(data, serviceDesc);
  162. return joRtn;
  163. }
  164. catch (Exception ex)
  165. {
  166. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  167. return joRtn;
  168. }
  169. finally
  170. {
  171. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  172. }
  173. }
  174. //获取Token
  175. public string GetToken(string url,int ifbd )
  176. {
  177. string rtn = "";
  178. JObject joRtn = new JObject();
  179. url = url + "/auth/oauth/token";
  180. CardReader_JIL Cardreader= new CardReader_JIL();
  181. string ClID = "";
  182. string OutBar = "";
  183. //byte[] b = System.Text.Encoding.Default.GetBytes("90CC2C7FAA93A77C:22010402");
  184. // string Authorza= "Basic " + Convert.ToBase64String(b);
  185. string Authorza = "";
  186. if (ifbd == 1)
  187. {
  188. Authorza = @"Basic OTBDQzJDN0ZBQTkzQTc3QzoyMjAxMDQwMg==";//本地
  189. }
  190. else
  191. {
  192. Authorza = @"Basic QTU4RTcwRjg3MTZDOEM4QzoyMjAxMDQwMg==";//省直异地
  193. }
  194. //if (Global.pat.insuplc_admdvs.Substring(0, 4) != "2201")
  195. //{
  196. // Authorza = "QTU4RTcwRjg3MTZDOEM4QzoyMjAxMDQwMg==";
  197. //}
  198. Cardreader.getCid(out OutBar);
  199. ClID = OutBar;
  200. string data = "";
  201. if (ifbd == 1)
  202. {
  203. data = "username=ccxyb00004&password=111111&grant_type=password&scope=server";
  204. }
  205. else
  206. {
  207. data = "username=50004&password=111111&grant_type=password&scope=server";
  208. }
  209. //if (Global.pat.insuplc_admdvs.Substring(0, 4) != "2201")
  210. //{
  211. //
  212. //}
  213. // MessageBox.Show("data:"+data + "/Authorza:"+ Authorza+ "/url:"+ url);
  214. joRtn =invokeTokenService(data, Authorza, url);
  215. //MessageBox.Show("获取Token返回:" + joRtn.ToString());
  216. rtn = JsonHelper.getDestValue(joRtn, "access_token");
  217. return rtn;
  218. }
  219. //长春获取Token服务增加头部信息
  220. private JObject invokeTokenService(string data, string auto, string url)
  221. {
  222. string postContent = "";
  223. JObject joRtn = new JObject();
  224. try
  225. {
  226. //创建一个HTTP请求
  227. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  228. //Post请求方式
  229. request.Method = "POST";
  230. request.Headers.Add("Authorization", auto);
  231. /*
  232. //昆明增加头部信息
  233. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  234. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  235. string BusinessID = Global.inf.BusinessID; //服务商ID
  236. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  237. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  238. string sTemp = timestamp + BusinessID + nonce;
  239. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  240. string signature = Encrypt.SHA256EncryptStr(sTemp);
  241. request.Headers.Add("hsf_signature", signature);
  242. request.Headers.Add("hsf_timestamp", timestamp);
  243. request.Headers.Add("hsf_nonce", nonce);
  244. request.Headers.Add("fixmedins_code", InsuHosID);
  245. request.Headers.Add("infosyscode", CreditID);
  246. */
  247. //内容类型
  248. request.ContentType = "application/x-www-form-urlencoded";
  249. //设置参数,并进行URL编码
  250. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  251. byte[] payload;
  252. //将Json字符串转化为字节
  253. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  254. //设置请求的ContentLength
  255. request.ContentLength = payload.Length;
  256. //发送请求,获得请求流
  257. Stream writer;
  258. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  259. //将请求参数写入流
  260. writer.Write(payload, 0, payload.Length);
  261. writer.Close();//关闭请求流
  262. // String strValue = "";//strValue为http响应所返回的字符流
  263. HttpWebResponse response;
  264. try
  265. {
  266. //获得响应流
  267. response = (HttpWebResponse)request.GetResponse();
  268. }
  269. catch (WebException ex)
  270. {
  271. response = ex.Response as HttpWebResponse;
  272. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  273. }
  274. Stream s = response.GetResponseStream();
  275. StreamReader sRead = new StreamReader(s);
  276. postContent = sRead.ReadToEnd();
  277. sRead.Close();
  278. joRtn = JObject.Parse(postContent);//返回Json数据
  279. return joRtn;
  280. }
  281. catch (Exception ex)
  282. {
  283. postContent = "获取Token异常" + ex.Message;
  284. joRtn.Add("infcode", -1);
  285. joRtn.Add("err_msg", "invokeTokenService(1):" + ex.Message);
  286. return joRtn;
  287. }
  288. }
  289. /// <summary>
  290. /// 医保平台服务调用的封装
  291. /// </summary>
  292. /// <param name="data"></param>
  293. /// <returns></returns>
  294. public JObject invokeInsuService(string data, string serviceDesc)
  295. {
  296. string rtn = "";
  297. JObject joRtn = new JObject();
  298. //try
  299. //{
  300. // //先根据用户请求的uri构造请求地址
  301. // serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  302. // authorization = Global.insuConfig.authorization;
  303. // joRtn = invokeIrisService(data, serviceDesc);
  304. // rtn = JsonConvert.SerializeObject(joRtn);
  305. // //if (serviceDesc == "插入签到信息")
  306. // //{
  307. // // MessageBox.Show("插入签到信息入参:" + data +"|返回值:"+ rtn.ToString()+"|"+ Global.insuConfig.url);
  308. // //}
  309. // return joRtn;
  310. //}
  311. //catch (Exception ex)
  312. //{
  313. // joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  314. // rtn = JsonConvert.SerializeObject(joRtn);
  315. // return joRtn;
  316. //}
  317. //finally
  318. //{
  319. // Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  320. //}
  321. try
  322. {
  323. //先根据用户请求的uri构造请求地址
  324. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  325. authorization = Global.insuConfig.authorization;
  326. joRtn = invokeIrisService(data, serviceDesc);
  327. rtn = JsonConvert.SerializeObject(joRtn);
  328. return joRtn;
  329. }
  330. catch (Exception ex)
  331. {
  332. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  333. rtn = JsonConvert.SerializeObject(joRtn);
  334. return joRtn;
  335. }
  336. finally
  337. {
  338. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  339. }
  340. }
  341. /// <summary>
  342. /// 医保中心Post服务调用封装
  343. /// </summary>
  344. /// <param name="data"></param>
  345. /// <returns></returns>
  346. private JObject invokeCenterService(string data)
  347. {
  348. string postContent = "";
  349. JObject joRtn = new JObject();
  350. try
  351. {
  352. //创建一个HTTP请求
  353. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  354. //Post请求方式
  355. request.Method = "POST";
  356. /*
  357. //昆明增加头部信息
  358. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  359. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  360. string BusinessID = Global.inf.BusinessID; //服务商ID
  361. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  362. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  363. string sTemp = timestamp + BusinessID + nonce;
  364. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  365. string signature = Encrypt.SHA256EncryptStr(sTemp);
  366. request.Headers.Add("hsf_signature", signature);
  367. request.Headers.Add("hsf_timestamp", timestamp);
  368. request.Headers.Add("hsf_nonce", nonce);
  369. request.Headers.Add("fixmedins_code", InsuHosID);
  370. request.Headers.Add("infosyscode", CreditID);
  371. */
  372. //长春增加头部信息
  373. string headstr = "";
  374. //if (Global.pat.insuplc_admdvs.Substring(0,4) =="2201")
  375. //{
  376. // headstr = @"bearer " + Global.curEvt.token;//市医保token
  377. // MessageBox.Show("参保地:"+ Global.pat.insuplc_admdvs + ",已赋值市医保token!!!");
  378. //}
  379. //else
  380. //{
  381. // headstr = @"bearer " + Global.curEvt.ydtoken;
  382. // MessageBox.Show("参保地:" + Global.pat.insuplc_admdvs + ",已赋值省医保token!!!");
  383. //}
  384. headstr = @"bearer " + Global.curEvt.token;//市医保token
  385. //string headstr = @"bearer " + Global.curEvt.token;
  386. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  387. request.Headers.Add("Authorization", headstr);
  388. //MessageBox.Show("头部信息" + headstr);
  389. //内容类型
  390. request.ContentType = "application/json";
  391. //设置参数,并进行URL编码
  392. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  393. byte[] payload;
  394. //将Json字符串转化为字节
  395. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  396. //设置请求的ContentLength
  397. request.ContentLength = payload.Length;
  398. //发送请求,获得请求流
  399. Stream writer;
  400. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  401. //将请求参数写入流
  402. writer.Write(payload, 0, payload.Length);
  403. writer.Close();//关闭请求流
  404. // String strValue = "";//strValue为http响应所返回的字符流
  405. HttpWebResponse response;
  406. try
  407. {
  408. //获得响应流
  409. response = (HttpWebResponse)request.GetResponse();
  410. }
  411. catch (WebException ex)
  412. {
  413. response = ex.Response as HttpWebResponse;
  414. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  415. }
  416. Stream s = response.GetResponseStream();
  417. StreamReader sRead = new StreamReader(s);
  418. postContent = sRead.ReadToEnd();
  419. sRead.Close();
  420. joRtn = JObject.Parse(postContent);//返回Json数据
  421. return joRtn;
  422. }
  423. catch (Exception ex)
  424. {
  425. postContent = "调用中心服务异常" + ex.Message;
  426. joRtn.Add("infcode", -1);
  427. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  428. return joRtn;
  429. }
  430. }
  431. /// <summary>
  432. /// 医保中心Post服务调用封装9101上传
  433. /// </summary>
  434. /// <param name="data"></param>
  435. /// <returns></returns>
  436. private JObject invokeSCCenterService(string data)
  437. {
  438. string postContent = "";
  439. JObject joRtn = new JObject();
  440. try
  441. {
  442. //创建一个HTTP请求
  443. HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ddjk.jlhs.gov.cn:20215/mbs/fsi/api/fileupload");
  444. //Post请求方式
  445. request.Method = "POST";
  446. /*
  447. //昆明增加头部信息
  448. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  449. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  450. string BusinessID = Global.inf.BusinessID; //服务商ID
  451. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  452. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  453. string sTemp = timestamp + BusinessID + nonce;
  454. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  455. string signature = Encrypt.SHA256EncryptStr(sTemp);
  456. request.Headers.Add("hsf_signature", signature);
  457. request.Headers.Add("hsf_timestamp", timestamp);
  458. request.Headers.Add("hsf_nonce", nonce);
  459. request.Headers.Add("fixmedins_code", InsuHosID);
  460. request.Headers.Add("infosyscode", CreditID);
  461. */
  462. //长春增加头部信息
  463. string headstr = "";
  464. //if (Global.pat.insuplc_admdvs.Substring(0,4) =="2201")
  465. //{
  466. // headstr = @"bearer " + Global.curEvt.token;//市医保token
  467. // MessageBox.Show("参保地:"+ Global.pat.insuplc_admdvs + ",已赋值市医保token!!!");
  468. //}
  469. //else
  470. //{
  471. // headstr = @"bearer " + Global.curEvt.ydtoken;
  472. // MessageBox.Show("参保地:" + Global.pat.insuplc_admdvs + ",已赋值省医保token!!!");
  473. //}
  474. headstr = @"bearer " + Global.curEvt.token;//市医保token
  475. //string headstr = @"bearer " + Global.curEvt.token;
  476. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  477. request.Headers.Add("Authorization", headstr);
  478. //MessageBox.Show("头部信息" + headstr);
  479. //内容类型
  480. request.ContentType = "application/json";
  481. //设置参数,并进行URL编码
  482. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  483. byte[] payload;
  484. //将Json字符串转化为字节
  485. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  486. //设置请求的ContentLength
  487. request.ContentLength = payload.Length;
  488. //发送请求,获得请求流
  489. Stream writer;
  490. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  491. //将请求参数写入流
  492. writer.Write(payload, 0, payload.Length);
  493. writer.Close();//关闭请求流
  494. // String strValue = "";//strValue为http响应所返回的字符流
  495. HttpWebResponse response;
  496. try
  497. {
  498. //获得响应流
  499. response = (HttpWebResponse)request.GetResponse();
  500. }
  501. catch (WebException ex)
  502. {
  503. response = ex.Response as HttpWebResponse;
  504. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  505. }
  506. Stream s = response.GetResponseStream();
  507. StreamReader sRead = new StreamReader(s);
  508. postContent = sRead.ReadToEnd();
  509. sRead.Close();
  510. joRtn = JObject.Parse(postContent);//返回Json数据
  511. return joRtn;
  512. }
  513. catch (Exception ex)
  514. {
  515. postContent = "调用中心服务异常" + ex.Message;
  516. joRtn.Add("infcode", -1);
  517. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  518. return joRtn;
  519. }
  520. }
  521. /// <summary>
  522. /// 这个是调用业务服务的invokeCenterService
  523. /// </summary>
  524. /// <param name="funNO"></param>
  525. /// <param name="data"></param>
  526. /// <returns></returns>
  527. public JObject invokeCenterService(string funNO, JObject data)
  528. {
  529. JObject joRtn = new JObject();
  530. string outPar = "";
  531. string input = "";
  532. try
  533. {
  534. Global.curEvt.URL = Global.inf.centerURL;
  535. input = JsonHelper.setCenterInpar(funNO, data.ToString());
  536. joRtn = invokeCenterService(data.ToString());
  537. outPar = JsonHelper.Compress(joRtn);
  538. return joRtn;
  539. }
  540. catch (Exception ex)
  541. {
  542. if (joRtn["infcode"] == null)
  543. { joRtn.Add("infcode", -1); }
  544. if (joRtn["err_msg"] == null)
  545. { joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message); }
  546. outPar = JsonHelper.Compress(joRtn);
  547. return joRtn;
  548. }
  549. finally
  550. {
  551. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  552. //this.saveCenterLog(JsonHelper.Compress(data), outPar);
  553. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  554. }
  555. }
  556. /// <summary>
  557. /// 这个是下载目录用的invokeCenterService
  558. /// </summary>
  559. /// <param name="funNO"></param>
  560. /// <param name="data"></param>
  561. /// <returns></returns>
  562. public JObject invokeCenterService(string funNO, string data)
  563. {
  564. JObject joRtn = new JObject();
  565. int iInt = 0;
  566. String outPar = "";
  567. string input = "";
  568. try
  569. {
  570. Global.curEvt.URL = Global.inf.centerURL ;
  571. // Global.curEvt.URL="http://ddjk.jlhs.gov.cn:20215/mbs/fmi/fsi/api/callFsiService/callService";
  572. //MessageBox.Show("调用前url:"+ Global.curEvt.URL);
  573. //input = JsonHelper.setCenterInpar(funNO, data.ToString());
  574. joRtn = invokeCenterService(data);
  575. outPar = JsonHelper.Compress(joRtn);
  576. return joRtn;
  577. }
  578. catch (Exception ex)
  579. {
  580. if (joRtn["infcode"] == null)
  581. { joRtn.Add("infcode", -1); }
  582. if (joRtn["err_msg"] == null)
  583. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  584. outPar = JsonHelper.Compress(joRtn);
  585. return joRtn;
  586. }
  587. finally
  588. {
  589. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), outPar);
  590. //this.saveCenterLog(data, outPar);
  591. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  592. }
  593. }
  594. //长春上传专用
  595. public JObject UploadCenterService(string funNO, string data)
  596. {
  597. JObject joRtn = new JObject();
  598. int iInt = 0;
  599. String outPar = "";
  600. string input = "";
  601. try
  602. {
  603. // Global.curEvt.URL = Global.inf.centerURL;
  604. // Global.curEvt.URL="http://ddjk.jlhs.gov.cn:20215/mbs/fmi/fsi/api/callFsiService/callService";
  605. //MessageBox.Show("调用前url:"+ Global.curEvt.URL);
  606. //input = JsonHelper.setCenterInpar(funNO, data.ToString());
  607. joRtn = invokeSCCenterService(data);
  608. outPar = JsonHelper.Compress(joRtn);
  609. return joRtn;
  610. }
  611. catch (Exception ex)
  612. {
  613. if (joRtn["infcode"] == null)
  614. { joRtn.Add("infcode", -1); }
  615. if (joRtn["err_msg"] == null)
  616. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  617. outPar = JsonHelper.Compress(joRtn);
  618. return joRtn;
  619. }
  620. finally
  621. {
  622. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), outPar);
  623. //this.saveCenterLog(data, outPar);
  624. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  625. }
  626. }
  627. /// <summary>
  628. /// 医保目录txt文件下载
  629. /// </summary>
  630. /// <param name="data"></param>
  631. /// <returns></returns>
  632. public JObject DownloadCenterFileByAPI(string data)
  633. {
  634. string error = string.Empty; int errorCode = 0;
  635. string sRtn = "";
  636. string durl = "http://ddjk.jlhs.gov.cn:20215/mbs/fsi/api/fileupload";//长春上传下载地址专用
  637. try
  638. {
  639. JObject jsonInParam = JObject.Parse(data);
  640. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  641. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  642. //MessageBox.Show("9102下载文件入参:"+jsonInParam.ToString());
  643. //如果不存在目录,则创建目录
  644. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  645. {
  646. //创建文件夹
  647. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  648. }
  649. if (File.Exists(filePath))
  650. {
  651. MessageBox.Show("文件存在");
  652. File.Delete(filePath);
  653. }
  654. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  655. //创建一个HTTP请求
  656. //Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";
  657. //正常下载
  658. // Global.curEvt.URL = Global.inf.centerURL;
  659. //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  660. //MessageBox.Show("9102下载"+ durl);
  661. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(durl);
  662. //长春增加头部信息
  663. string headstr = @"bearer " + Global.curEvt.token;
  664. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  665. request.Headers.Add("Authorization", headstr);
  666. // MessageBox.Show("头部信息" + headstr);
  667. //Post请求方式
  668. request.Method = "POST";
  669. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  670. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  671. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  672. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  673. string BusinessID = Global.inf.BusinessID; //服务商ID
  674. //内容类型
  675. request.ContentType = "application/json";
  676. request.Accept = "text/html,application/xhtml+xml, */*";
  677. /*
  678. //昆明增加头部信息
  679. string sTemp = timestamp + BusinessID + nonce;
  680. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  681. string signature = Encrypt.SHA256EncryptStr(sTemp);
  682. request.Headers.Add("hsf_signature", signature);
  683. request.Headers.Add("hsf_timestamp", timestamp);
  684. request.Headers.Add("hsf_nonce", nonce);
  685. request.Headers.Add("fixmedins_code", InsuHosID);
  686. request.Headers.Add("infosyscode", CreditID);
  687. */
  688. //设置参数,并进行URL编码
  689. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  690. byte[] payload;
  691. //将Json字符串转化为字节
  692. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  693. //设置请求的ContentLength
  694. request.ContentLength = payload.Length;
  695. Stream writer;
  696. try
  697. {
  698. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  699. }
  700. catch (Exception)
  701. {
  702. writer = null;
  703. errorCode = -100;
  704. error = "连接服务器失败!";
  705. }
  706. //将请求参数写入流
  707. writer.Write(payload, 0, payload.Length);
  708. writer.Close();//关闭请求流
  709. // String strValue = "";//strValue为http响应所返回的字符流
  710. //发送请求并获取相应回应数据
  711. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  712. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  713. Stream responseStream = response.GetResponseStream();
  714. //创建本地文件写入流
  715. byte[] bArr = new byte[1024];
  716. int iTotalSize = 0;
  717. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  718. //MessageBox.Show("文件大小:" + size.ToString());
  719. while (size > 0)
  720. {
  721. iTotalSize += size;
  722. fs.Write(bArr, 0, size);
  723. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  724. }
  725. //byte[] array = Encoding.UTF8.GetBytes(responseStream.ToString());
  726. //16进制完整写入
  727. //byte[] bArr = new byte[responseStream.Length];
  728. //for (int i = 0; i < responseStream.Length / 2; i = i + 2)
  729. //{
  730. // bArr[i]= Convert.ToByte(responseStream.ToString().Substring(i * 2, 2), 16);
  731. //}
  732. //fs.Write(bArr, 0, bArr.Length);
  733. fs.Close();
  734. responseStream.Close();
  735. dynamic joReturn = new JObject();
  736. joReturn.errorCode = errorCode;
  737. joReturn.errorMessage = error;
  738. joReturn.filePath = filePath;
  739. sRtn = joReturn.ToString();
  740. return joReturn;
  741. }
  742. catch (Exception ex)
  743. {
  744. errorCode = -100;
  745. error = ex.Message;
  746. dynamic joReturn = new JObject();
  747. joReturn.errorCode = errorCode;
  748. joReturn.errorMessage = error;
  749. sRtn = joReturn.ToString();
  750. return joReturn;
  751. }
  752. finally
  753. {
  754. //Global.writeLog("DownloadCenterFile" +"(" + Global.curEvt.URL + ")", data, sRtn);
  755. Global.writeLog("DownloadCenterFile" + "(" + durl + ")", data, sRtn);
  756. }
  757. }
  758. /// <summary>
  759. /// 保存中心交易日志到数据库
  760. /// </summary>
  761. /// <param name="inParam"></param>
  762. /// <param name="outParam"></param>
  763. /* private void saveCenterLog(string inParam, string outParam)
  764. {
  765. dynamic joIris = new JObject();
  766. string sRtn = "";
  767. try
  768. {
  769. //解析postContent,插入医保交易日志表
  770. JObject joIn = new JObject(JObject.Parse(inParam));
  771. JObject joOut = new JObject(JObject.Parse(outParam));
  772. JArray jaParams = new JArray();
  773. JObject joParam = new JObject();
  774. joParam.Add("inParam", JObject.FromObject(joIn));
  775. joParam.Add("outParam", JObject.FromObject(joOut));
  776. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  777. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  778. joParam.Add("updateUserID", Global.user.ID);
  779. joParam.Add("psn_no", Global.pat.psn_no);
  780. jaParams.Add(joParam);
  781. joIris.code = "09010021";
  782. joIris.Add("params", jaParams);
  783. //InvokeHelper invoker = new InvokeHelper();
  784. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  785. }
  786. catch (Exception ex)
  787. {
  788. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  789. }
  790. }*/
  791. /// <summary>
  792. /// 保存中心交易日志到数据库
  793. /// </summary>
  794. /// <param name="inParam"></param>
  795. /// <param name="outParam"></param>
  796. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  797. {
  798. dynamic joIris = new JObject();
  799. string sRtn = "";
  800. try
  801. {
  802. //解析postContent,插入医保交易日志表
  803. JObject joIn = new JObject(JObject.Parse(inParam));
  804. JObject joOut = new JObject(JObject.Parse(outParam));
  805. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  806. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  807. JArray jaParams = new JArray();
  808. JObject joParam = new JObject();
  809. joParam.Add("inParam", JObject.FromObject(joIn));
  810. joParam.Add("outParam", JObject.FromObject(joOut));
  811. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  812. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  813. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  814. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  815. joParam.Add("updateUserID", Global.user.ID);
  816. joParam.Add("psn_no", Global.pat.psn_no);
  817. jaParams.Add(joParam);
  818. joIris.code = "09010021";
  819. joIris.Add("params", jaParams);
  820. //InvokeHelper invoker = new InvokeHelper();
  821. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  822. }
  823. catch (Exception ex)
  824. {
  825. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  826. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  827. }
  828. }
  829. /**********************************************************调用DLL方式**************************************************************/
  830. }
  831. }