InvokeHelper.cs 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442
  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. using PTMedicalInsurance.APIGATEWAY_SDK;
  36. namespace PTMedicalInsurance.Helper
  37. {
  38. class InvokeHelper
  39. {
  40. private string serviceURL;
  41. private string authorization;
  42. //广西南宁基线版医保接口调用COM
  43. //string progID1 = "YinHai.XJ.Actual.Interface.New";
  44. //System.Type YinHaiComType;
  45. //object YinHaiComInstance;
  46. public void Call(string infno, string input, out string output)
  47. {
  48. try
  49. {
  50. Type YinHaiComType = System.Type.GetTypeFromProgID("YinHai.XJ.Actual.Interface.New");
  51. if (YinHaiComType != null)
  52. {
  53. //创建实例,不能再次创建,否则会提示没有初始化
  54. object YinHaiComInstance = System.Activator.CreateInstance(YinHaiComType);
  55. if (YinHaiComInstance != null)
  56. {
  57. Global.writeLog("实例创建成功,准备调用Call服务");
  58. }
  59. else
  60. {
  61. output = "实例不存在!";
  62. Global.writeLog("实例不存在");
  63. return;
  64. }
  65. //GlobalVariables.writeLog("入参infno:" + infno);
  66. //GlobalVariables.writeLog("入参input:" + input);
  67. //设置需要设置的参数值
  68. object[] ParamArray = new object[3];
  69. ParamArray[0] = infno;
  70. ParamArray[1] = input;
  71. ParamArray[2] = "";
  72. ParameterModifier[] ParamMods = new ParameterModifier[1];
  73. ParamMods[0] = new ParameterModifier(3); // 初始化为接口参数的个数
  74. //ParamMods[0][0] = false;
  75. //ParamMods[0][1] = false;
  76. ParamMods[0][2] = true;
  77. YinHaiComType.InvokeMember("gxyb_call", // 接口函数名
  78. BindingFlags.Default | BindingFlags.InvokeMethod,
  79. null,
  80. YinHaiComInstance, // 调用的COM组件
  81. ParamArray, // 参数数组
  82. ParamMods, // 指定返回参数的ParameterModifier数组
  83. null,
  84. null);
  85. output = ParamArray[2].ToString();
  86. Global.writeLog("Com输出:" + output);
  87. }
  88. else
  89. {
  90. output = "COM加载失败!";
  91. Global.writeLog("COM加载失败!");
  92. }
  93. }
  94. catch (Exception ex)
  95. {
  96. output = ex.Message;
  97. Global.writeLog("COM加载失败!" + output);
  98. }
  99. }
  100. /// <summary>
  101. /// iris服务调用的封装
  102. /// </summary>
  103. /// <param name="data"></param>
  104. /// <returns></returns>
  105. public JObject invokeIrisService(string data, string serviceDesc)
  106. {
  107. string rtn = "", url = "";
  108. JObject joRtn = new JObject();
  109. try
  110. {
  111. //先根据用户请求的uri构造请求地址
  112. url = serviceURL;
  113. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  114. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  115. //创建Web访问对象
  116. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  117. //把用户传过来的数据转成“UTF-8”的字节流
  118. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  119. //添加头部信息
  120. myRequest.Method = "POST";
  121. myRequest.ContentLength = buf.Length;
  122. myRequest.ContentType = "application/json";
  123. myRequest.Headers.Add("Authorization", authorization);
  124. myRequest.MaximumAutomaticRedirections = 1;
  125. myRequest.AllowAutoRedirect = true;
  126. //发送请求
  127. Stream stream = myRequest.GetRequestStream();
  128. stream.Write(buf, 0, buf.Length);
  129. stream.Close();
  130. //获取接口返回值
  131. //通过Web访问对象获取响应内容
  132. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  133. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  134. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  135. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  136. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  137. reader.Close();
  138. myResponse.Close();
  139. joRtn = JObject.Parse(rtn);
  140. return joRtn;
  141. }
  142. catch (Exception ex)
  143. {
  144. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  145. rtn = JsonConvert.SerializeObject(joRtn);
  146. return joRtn;
  147. }
  148. }
  149. /// <summary>
  150. /// HIS服务调用的封装
  151. /// </summary>
  152. /// <param name="data"></param>
  153. /// <returns></returns>
  154. public JObject invokeHISService(string data, string serviceDesc)
  155. {
  156. JObject joRtn = new JObject();
  157. try
  158. {
  159. //先根据用户请求的uri构造请求地址
  160. serviceURL = string.Format("{0}/{1}", Global.hisConfig.ip, Global.hisConfig.url);
  161. authorization = Global.hisConfig.authorization;
  162. joRtn = invokeIrisService(data, serviceDesc);
  163. return joRtn;
  164. }
  165. catch (Exception ex)
  166. {
  167. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  168. return joRtn;
  169. }
  170. finally
  171. {
  172. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  173. }
  174. }
  175. //获取Token
  176. public string GetToken(string url,int ifbd )
  177. {
  178. string rtn = "";
  179. JObject joRtn = new JObject();
  180. url = url + "/auth/oauth/token";
  181. CardReader_JIL Cardreader= new CardReader_JIL();
  182. string ClID = "";
  183. string OutBar = "";
  184. //byte[] b = System.Text.Encoding.Default.GetBytes("90CC2C7FAA93A77C:22010402");
  185. // string Authorza= "Basic " + Convert.ToBase64String(b);
  186. string Authorza = "";
  187. if (Global.businessType != "M6Confirm")
  188. if (ifbd == 1)
  189. {
  190. Authorza = @"Basic OTBDQzJDN0ZBQTkzQTc3QzoyMjAxMDQwMg==";//本地
  191. }
  192. else
  193. {
  194. Authorza = @"Basic QTU4RTcwRjg3MTZDOEM4QzoyMjAxMDQwMg==";//省直异地
  195. }
  196. if (Global.inf.interfaceDr == 34)
  197. {
  198. Authorza = @"Basic QjczOEY5Mjc2MDVFMTkxMjoxMTExMTE=";//本地
  199. }
  200. //if (Global.pat.insuplc_admdvs.Substring(0, 4) != "2201")
  201. //{
  202. // Authorza = "QTU4RTcwRjg3MTZDOEM4QzoyMjAxMDQwMg==";
  203. //}
  204. Cardreader.getCid(out OutBar);
  205. ClID = OutBar;
  206. string data = "";
  207. if (ifbd == 1)
  208. {
  209. data = "username=ccxyb00004&password=111111&grant_type=password&scope=server";
  210. }
  211. else
  212. {
  213. data = "username=50004&password=111111&grant_type=password&scope=server";
  214. }
  215. if (Global.inf.interfaceDr == 34)
  216. {
  217. data = "username=cctest1&password=111111&grant_type=password&scope=server";
  218. }
  219. //if (Global.pat.insuplc_admdvs.Substring(0, 4) != "2201")
  220. //{
  221. //
  222. //}
  223. joRtn =invokeTokenService(data, Authorza, url);
  224. rtn = JsonHelper.getDestValue(joRtn, "access_token");
  225. return rtn;
  226. }
  227. //长春获取Token服务增加头部信息
  228. private JObject invokeTokenService(string data, string auto, string url)
  229. {
  230. string postContent = "";
  231. JObject joRtn = new JObject();
  232. try
  233. {
  234. //创建一个HTTP请求
  235. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  236. //Post请求方式
  237. request.Method = "POST";
  238. request.Headers.Add("Authorization", auto);
  239. /*
  240. //昆明增加头部信息
  241. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  242. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  243. string BusinessID = Global.inf.BusinessID; //服务商ID
  244. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  245. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  246. string sTemp = timestamp + BusinessID + nonce;
  247. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  248. string signature = Encrypt.SHA256EncryptStr(sTemp);
  249. request.Headers.Add("hsf_signature", signature);
  250. request.Headers.Add("hsf_timestamp", timestamp);
  251. request.Headers.Add("hsf_nonce", nonce);
  252. request.Headers.Add("fixmedins_code", InsuHosID);
  253. request.Headers.Add("infosyscode", CreditID);
  254. */
  255. //内容类型
  256. request.ContentType = "application/x-www-form-urlencoded";
  257. //设置参数,并进行URL编码
  258. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  259. byte[] payload;
  260. //将Json字符串转化为字节
  261. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  262. //设置请求的ContentLength
  263. request.ContentLength = payload.Length;
  264. //发送请求,获得请求流
  265. Stream writer;
  266. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  267. //将请求参数写入流
  268. writer.Write(payload, 0, payload.Length);
  269. writer.Close();//关闭请求流
  270. // String strValue = "";//strValue为http响应所返回的字符流
  271. HttpWebResponse response;
  272. try
  273. {
  274. //获得响应流
  275. response = (HttpWebResponse)request.GetResponse();
  276. }
  277. catch (WebException ex)
  278. {
  279. response = ex.Response as HttpWebResponse;
  280. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  281. }
  282. Stream s = response.GetResponseStream();
  283. StreamReader sRead = new StreamReader(s);
  284. postContent = sRead.ReadToEnd();
  285. sRead.Close();
  286. joRtn = JObject.Parse(postContent);//返回Json数据
  287. return joRtn;
  288. }
  289. catch (Exception ex)
  290. {
  291. postContent = "获取Token异常" + ex.Message;
  292. joRtn.Add("infcode", -1);
  293. joRtn.Add("err_msg", "invokeTokenService(1):" + ex.Message);
  294. return joRtn;
  295. }
  296. finally
  297. {
  298. Global.writeLog($"获取Token({url})", $"data:{data},auth:{auto}", joRtn.ToString());
  299. }
  300. }
  301. /// <summary>
  302. /// 医保平台服务调用的封装
  303. /// </summary>
  304. /// <param name="data"></param>
  305. /// <returns></returns>
  306. public JObject invokeInsuService(string data, string serviceDesc)
  307. {
  308. string rtn = "";
  309. JObject joRtn = new JObject();
  310. //try
  311. //{
  312. // //先根据用户请求的uri构造请求地址
  313. // serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  314. // authorization = Global.insuConfig.authorization;
  315. // joRtn = invokeIrisService(data, serviceDesc);
  316. // rtn = JsonConvert.SerializeObject(joRtn);
  317. // //if (serviceDesc == "插入签到信息")
  318. // //{
  319. // // MessageBox.Show("插入签到信息入参:" + data +"|返回值:"+ rtn.ToString()+"|"+ Global.insuConfig.url);
  320. // //}
  321. // return joRtn;
  322. //}
  323. //catch (Exception ex)
  324. //{
  325. // joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  326. // rtn = JsonConvert.SerializeObject(joRtn);
  327. // return joRtn;
  328. //}
  329. //finally
  330. //{
  331. // Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  332. //}
  333. try
  334. {
  335. //先根据用户请求的uri构造请求地址
  336. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  337. authorization = Global.insuConfig.authorization;
  338. joRtn = invokeIrisService(data, serviceDesc);
  339. rtn = JsonConvert.SerializeObject(joRtn);
  340. return joRtn;
  341. }
  342. catch (Exception ex)
  343. {
  344. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  345. rtn = JsonConvert.SerializeObject(joRtn);
  346. return joRtn;
  347. }
  348. finally
  349. {
  350. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  351. }
  352. }
  353. /// <summary>
  354. /// 医保中心Post服务调用封装
  355. /// </summary>
  356. /// <param name="data"></param>
  357. /// <returns></returns>
  358. private JObject invokeCenterService(string data)
  359. {
  360. string postContent = "";
  361. JObject joRtn = new JObject();
  362. try
  363. {
  364. //创建一个HTTP请求
  365. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  366. //Post请求方式
  367. request.Method = "POST";
  368. /*
  369. //昆明增加头部信息
  370. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  371. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  372. string BusinessID = Global.inf.BusinessID; //服务商ID
  373. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  374. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  375. string sTemp = timestamp + BusinessID + nonce;
  376. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  377. string signature = Encrypt.SHA256EncryptStr(sTemp);
  378. request.Headers.Add("hsf_signature", signature);
  379. request.Headers.Add("hsf_timestamp", timestamp);
  380. request.Headers.Add("hsf_nonce", nonce);
  381. request.Headers.Add("fixmedins_code", InsuHosID);
  382. request.Headers.Add("infosyscode", CreditID);
  383. */
  384. //长春增加头部信息
  385. string headstr = "";
  386. //if (Global.pat.insuplc_admdvs.Substring(0,4) =="2201")
  387. //{
  388. // headstr = @"bearer " + Global.curEvt.token;//市医保token
  389. // MessageBox.Show("参保地:"+ Global.pat.insuplc_admdvs + ",已赋值市医保token!!!");
  390. //}
  391. //else
  392. //{
  393. // headstr = @"bearer " + Global.curEvt.ydtoken;
  394. // MessageBox.Show("参保地:" + Global.pat.insuplc_admdvs + ",已赋值省医保token!!!");
  395. //}
  396. headstr = @"Bearer " + Global.curEvt.token;//市医保token
  397. //string headstr = @"bearer " + Global.curEvt.token;
  398. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  399. request.Headers.Add("Authorization", headstr);
  400. //MessageBox.Show("头部信息" + headstr);
  401. //内容类型
  402. request.ContentType = "application/json";
  403. Global.writeLog("header", "", request.Headers.ToString());
  404. //设置参数,并进行URL编码
  405. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  406. byte[] payload;
  407. //将Json字符串转化为字节
  408. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  409. //设置请求的ContentLength
  410. request.ContentLength = payload.Length;
  411. //发送请求,获得请求流
  412. Stream writer;
  413. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  414. //将请求参数写入流
  415. writer.Write(payload, 0, payload.Length);
  416. writer.Close();//关闭请求流
  417. // String strValue = "";//strValue为http响应所返回的字符流
  418. HttpWebResponse response;
  419. try
  420. {
  421. //获得响应流
  422. response = (HttpWebResponse)request.GetResponse();
  423. }
  424. catch (WebException ex)
  425. {
  426. response = ex.Response as HttpWebResponse;
  427. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  428. }
  429. Stream s = response.GetResponseStream();
  430. StreamReader sRead = new StreamReader(s);
  431. postContent = sRead.ReadToEnd();
  432. sRead.Close();
  433. joRtn = JObject.Parse(postContent);//返回Json数据
  434. return joRtn;
  435. }
  436. catch (Exception ex)
  437. {
  438. postContent = "调用中心服务异常" + ex.Message;
  439. joRtn.Add("infcode", -1);
  440. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  441. return joRtn;
  442. }
  443. finally
  444. {
  445. Global.writeLog("服务调用", data, joRtn.ToString());
  446. }
  447. }
  448. /// <summary>
  449. /// 医保中心Post服务调用封装9101上传
  450. /// </summary>
  451. /// <param name="data"></param>
  452. /// <returns></returns>
  453. private JObject invokeSCCenterService(string data)
  454. {
  455. string postContent = "";
  456. JObject joRtn = new JObject();
  457. try
  458. {
  459. //创建一个HTTP请求
  460. HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ddjk.jlhs.gov.cn:20215/mbs/fsi/api/fileupload");
  461. //Post请求方式
  462. request.Method = "POST";
  463. /*
  464. //昆明增加头部信息
  465. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  466. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  467. string BusinessID = Global.inf.BusinessID; //服务商ID
  468. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  469. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  470. string sTemp = timestamp + BusinessID + nonce;
  471. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  472. string signature = Encrypt.SHA256EncryptStr(sTemp);
  473. request.Headers.Add("hsf_signature", signature);
  474. request.Headers.Add("hsf_timestamp", timestamp);
  475. request.Headers.Add("hsf_nonce", nonce);
  476. request.Headers.Add("fixmedins_code", InsuHosID);
  477. request.Headers.Add("infosyscode", CreditID);
  478. */
  479. //长春增加头部信息
  480. string headstr = "";
  481. //if (Global.pat.insuplc_admdvs.Substring(0,4) =="2201")
  482. //{
  483. // headstr = @"bearer " + Global.curEvt.token;//市医保token
  484. // MessageBox.Show("参保地:"+ Global.pat.insuplc_admdvs + ",已赋值市医保token!!!");
  485. //}
  486. //else
  487. //{
  488. // headstr = @"bearer " + Global.curEvt.ydtoken;
  489. // MessageBox.Show("参保地:" + Global.pat.insuplc_admdvs + ",已赋值省医保token!!!");
  490. //}
  491. headstr = @"bearer " + Global.curEvt.token;//市医保token
  492. //string headstr = @"bearer " + Global.curEvt.token;
  493. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  494. request.Headers.Add("Authorization", headstr);
  495. //MessageBox.Show("头部信息" + headstr);
  496. //内容类型
  497. request.ContentType = "application/json";
  498. //设置参数,并进行URL编码
  499. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  500. byte[] payload;
  501. //将Json字符串转化为字节
  502. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  503. //设置请求的ContentLength
  504. request.ContentLength = payload.Length;
  505. //发送请求,获得请求流
  506. Stream writer;
  507. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  508. //将请求参数写入流
  509. writer.Write(payload, 0, payload.Length);
  510. writer.Close();//关闭请求流
  511. // String strValue = "";//strValue为http响应所返回的字符流
  512. HttpWebResponse response;
  513. try
  514. {
  515. //获得响应流
  516. response = (HttpWebResponse)request.GetResponse();
  517. }
  518. catch (WebException ex)
  519. {
  520. response = ex.Response as HttpWebResponse;
  521. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  522. }
  523. Stream s = response.GetResponseStream();
  524. StreamReader sRead = new StreamReader(s);
  525. postContent = sRead.ReadToEnd();
  526. sRead.Close();
  527. joRtn = JObject.Parse(postContent);//返回Json数据
  528. return joRtn;
  529. }
  530. catch (Exception ex)
  531. {
  532. postContent = "调用中心服务异常" + ex.Message;
  533. joRtn.Add("infcode", -1);
  534. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  535. return joRtn;
  536. }
  537. }
  538. /// <summary>
  539. /// 这个是调用业务服务的invokeCenterService
  540. /// </summary>
  541. /// <param name="funNO"></param>
  542. /// <param name="data"></param>
  543. /// <returns></returns>
  544. public JObject invokeCenterService(string funNO, JObject data)
  545. {
  546. JObject joRtn = new JObject();
  547. string outPar = "";
  548. try
  549. {
  550. Global.curEvt.URL = Global.inf.centerURL;
  551. joRtn = invokeCenterService(data.ToString());
  552. outPar = JsonHelper.Compress(joRtn);
  553. return joRtn;
  554. }
  555. catch (Exception ex)
  556. {
  557. if (joRtn["infcode"] == null)
  558. { joRtn.Add("infcode", -1); }
  559. if (joRtn["err_msg"] == null)
  560. { joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message); }
  561. outPar = JsonHelper.Compress(joRtn);
  562. return joRtn;
  563. }
  564. finally
  565. {
  566. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  567. //this.saveCenterLog(JsonHelper.Compress(data), outPar);
  568. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  569. }
  570. }
  571. /// <summary>
  572. /// 这个是下载目录用的invokeCenterService
  573. /// </summary>
  574. /// <param name="funNO"></param>
  575. /// <param name="data"></param>
  576. /// <returns></returns>
  577. public JObject invokeCenterService(string funNO, string data)
  578. {
  579. JObject joRtn = new JObject();
  580. int iInt = 0;
  581. String outPar = "";
  582. string input = "";
  583. try
  584. {
  585. Global.curEvt.URL = Global.inf.centerURL ;
  586. // Global.curEvt.URL="http://ddjk.jlhs.gov.cn:20215/mbs/fmi/fsi/api/callFsiService/callService";
  587. //MessageBox.Show("调用前url:"+ Global.curEvt.URL);
  588. joRtn = invokeCenterService(data);
  589. outPar = JsonHelper.Compress(joRtn);
  590. return joRtn;
  591. }
  592. catch (Exception ex)
  593. {
  594. if (joRtn["infcode"] == null)
  595. { joRtn.Add("infcode", -1); }
  596. if (joRtn["err_msg"] == null)
  597. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  598. outPar = JsonHelper.Compress(joRtn);
  599. return joRtn;
  600. }
  601. finally
  602. {
  603. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), outPar);
  604. //写入日志表
  605. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  606. }
  607. }
  608. //长春上传专用
  609. public JObject UploadCenterService(string funNO, string data)
  610. {
  611. JObject joRtn = new JObject();
  612. int iInt = 0;
  613. String outPar = "";
  614. string input = "";
  615. try
  616. {
  617. // Global.curEvt.URL = Global.inf.centerURL;
  618. // Global.curEvt.URL="http://ddjk.jlhs.gov.cn:20215/mbs/fmi/fsi/api/callFsiService/callService";
  619. //MessageBox.Show("调用前url:"+ Global.curEvt.URL);
  620. //input = JsonHelper.setCenterInpar(funNO, data.ToString());
  621. joRtn = invokeSCCenterService(data);
  622. outPar = JsonHelper.Compress(joRtn);
  623. return joRtn;
  624. }
  625. catch (Exception ex)
  626. {
  627. if (joRtn["infcode"] == null)
  628. { joRtn.Add("infcode", -1); }
  629. if (joRtn["err_msg"] == null)
  630. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  631. outPar = JsonHelper.Compress(joRtn);
  632. return joRtn;
  633. }
  634. finally
  635. {
  636. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), outPar);
  637. //this.saveCenterLog(data, outPar);
  638. this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  639. }
  640. }
  641. /// <summary>
  642. /// 医保目录txt文件下载
  643. /// </summary>
  644. /// <param name="data"></param>
  645. /// <returns></returns>
  646. public JObject DownloadCenterFileByAPI(string data)
  647. {
  648. string error = string.Empty; int errorCode = 0;
  649. string sRtn = "";
  650. string durl = "http://ddjk.jlhs.gov.cn:20215/mbs/fsi/api/fileupload";//长春上传下载地址专用
  651. try
  652. {
  653. JObject jsonInParam = JObject.Parse(data);
  654. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  655. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  656. //MessageBox.Show("9102下载文件入参:"+jsonInParam.ToString());
  657. //如果不存在目录,则创建目录
  658. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  659. {
  660. //创建文件夹
  661. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  662. }
  663. if (File.Exists(filePath))
  664. {
  665. File.Delete(filePath);
  666. }
  667. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  668. //创建一个HTTP请求
  669. //Global.curEvt.URL = Global.inf.centerURL + "/hsa-fsi-9102";
  670. //正常下载
  671. // Global.curEvt.URL = Global.inf.centerURL;
  672. //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  673. //MessageBox.Show("9102下载"+ durl);
  674. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(durl);
  675. //长春增加头部信息
  676. string headstr = @"bearer " + Global.curEvt.token;
  677. //string headstr = @"Bearer cHJpbnRlcmZhY2U6cFIyMEBP";
  678. request.Headers.Add("Authorization", headstr);
  679. // MessageBox.Show("头部信息" + headstr);
  680. //Post请求方式
  681. request.Method = "POST";
  682. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  683. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  684. string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  685. string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  686. string BusinessID = Global.inf.BusinessID; //服务商ID
  687. //内容类型
  688. request.ContentType = "application/json";
  689. request.Accept = "text/html,application/xhtml+xml, */*";
  690. /*
  691. //昆明增加头部信息
  692. string sTemp = timestamp + BusinessID + nonce;
  693. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  694. string signature = Encrypt.SHA256EncryptStr(sTemp);
  695. request.Headers.Add("hsf_signature", signature);
  696. request.Headers.Add("hsf_timestamp", timestamp);
  697. request.Headers.Add("hsf_nonce", nonce);
  698. request.Headers.Add("fixmedins_code", InsuHosID);
  699. request.Headers.Add("infosyscode", CreditID);
  700. */
  701. //设置参数,并进行URL编码
  702. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  703. byte[] payload;
  704. //将Json字符串转化为字节
  705. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  706. //设置请求的ContentLength
  707. request.ContentLength = payload.Length;
  708. Stream writer;
  709. try
  710. {
  711. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  712. }
  713. catch (Exception)
  714. {
  715. writer = null;
  716. errorCode = -100;
  717. error = "连接服务器失败!";
  718. }
  719. //将请求参数写入流
  720. writer.Write(payload, 0, payload.Length);
  721. writer.Close();//关闭请求流
  722. // String strValue = "";//strValue为http响应所返回的字符流
  723. //发送请求并获取相应回应数据
  724. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  725. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  726. Stream responseStream = response.GetResponseStream();
  727. //创建本地文件写入流
  728. byte[] bArr = new byte[1024];
  729. int iTotalSize = 0;
  730. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  731. //MessageBox.Show("文件大小:" + size.ToString());
  732. while (size > 0)
  733. {
  734. iTotalSize += size;
  735. fs.Write(bArr, 0, size);
  736. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  737. }
  738. //byte[] array = Encoding.UTF8.GetBytes(responseStream.ToString());
  739. //16进制完整写入
  740. //byte[] bArr = new byte[responseStream.Length];
  741. //for (int i = 0; i < responseStream.Length / 2; i = i + 2)
  742. //{
  743. // bArr[i]= Convert.ToByte(responseStream.ToString().Substring(i * 2, 2), 16);
  744. //}
  745. //fs.Write(bArr, 0, bArr.Length);
  746. fs.Close();
  747. responseStream.Close();
  748. dynamic joReturn = new JObject();
  749. joReturn.errorCode = errorCode;
  750. joReturn.errorMessage = error;
  751. joReturn.filePath = filePath;
  752. sRtn = joReturn.ToString();
  753. return joReturn;
  754. }
  755. catch (Exception ex)
  756. {
  757. errorCode = -100;
  758. error = ex.Message;
  759. dynamic joReturn = new JObject();
  760. joReturn.errorCode = errorCode;
  761. joReturn.errorMessage = error;
  762. sRtn = joReturn.ToString();
  763. return joReturn;
  764. }
  765. finally
  766. {
  767. //Global.writeLog("DownloadCenterFile" +"(" + Global.curEvt.URL + ")", data, sRtn);
  768. Global.writeLog("DownloadCenterFile" + "(" + durl + ")", data, sRtn);
  769. }
  770. }
  771. /// <summary>
  772. /// 保存中心交易日志到数据库
  773. /// </summary>
  774. /// <param name="inParam"></param>
  775. /// <param name="outParam"></param>
  776. /* private void saveCenterLog(string inParam, string outParam)
  777. {
  778. dynamic joIris = new JObject();
  779. string sRtn = "";
  780. try
  781. {
  782. //解析postContent,插入医保交易日志表
  783. JObject joIn = new JObject(JObject.Parse(inParam));
  784. JObject joOut = new JObject(JObject.Parse(outParam));
  785. JArray jaParams = new JArray();
  786. JObject joParam = new JObject();
  787. joParam.Add("inParam", JObject.FromObject(joIn));
  788. joParam.Add("outParam", JObject.FromObject(joOut));
  789. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  790. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  791. joParam.Add("updateUserID", Global.user.ID);
  792. joParam.Add("psn_no", Global.pat.psn_no);
  793. jaParams.Add(joParam);
  794. joIris.code = "09010021";
  795. joIris.Add("params", jaParams);
  796. //InvokeHelper invoker = new InvokeHelper();
  797. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  798. }
  799. catch (Exception ex)
  800. {
  801. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  802. }
  803. }*/
  804. /// <summary>
  805. /// 保存中心交易日志到数据库
  806. /// </summary>
  807. /// <param name="inParam"></param>
  808. /// <param name="outParam"></param>
  809. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  810. {
  811. dynamic joIris = new JObject();
  812. string sRtn = "";
  813. try
  814. {
  815. //解析postContent,插入医保交易日志表
  816. JObject joIn = new JObject(JObject.Parse(inParam));
  817. JObject joOut = new JObject(JObject.Parse(outParam));
  818. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  819. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  820. JArray jaParams = new JArray();
  821. JObject joParam = new JObject();
  822. joParam.Add("inParam", JObject.FromObject(joIn));
  823. joParam.Add("outParam", JObject.FromObject(joOut));
  824. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  825. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  826. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  827. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  828. joParam.Add("updateUserID", Global.user.ID);
  829. joParam.Add("psn_no", Global.pat.psn_no);
  830. jaParams.Add(joParam);
  831. joIris.code = "09010021";
  832. joIris.Add("params", jaParams);
  833. //InvokeHelper invoker = new InvokeHelper();
  834. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  835. }
  836. catch (Exception ex)
  837. {
  838. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  839. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  840. }
  841. }
  842. /**********************************************************调用DLL方式**************************************************************/
  843. #region 移动支付
  844. /// <summary>
  845. /// 移动
  846. /// </summary>
  847. /// <param name="funNO"></param>
  848. /// <param name="data"></param>
  849. /// <returns></returns>
  850. ///
  851. public JObject invokeMPService(string funNO, string data)
  852. {
  853. return invokeMPService(funNO, JObject.Parse(data));
  854. }
  855. public JObject invokeMPService(string funNO, JObject joInput)
  856. {
  857. JObject joRtn = new JObject();
  858. String outPar = "";
  859. try
  860. {
  861. string url = "";
  862. switch (funNO)
  863. {
  864. case "6201":
  865. url = "/org/local/api/hos/uldFeeInfo";
  866. break;
  867. case "6202":
  868. url = "/org/local/api/hos/pay_order";
  869. break;
  870. case "6203":
  871. url = "/org/local/api/hos/refund_Order";
  872. break;
  873. case "6301":
  874. url = "/org/local/api/hos/query_order_info";
  875. break;
  876. case "6401":
  877. url = "/org/local/api/hos/revoke_order";
  878. break;
  879. default:
  880. break;
  881. }
  882. EncryptHelper encrypt = new EncryptHelper(Global.inf.MobilePay.appid, Global.inf.MobilePay.secretKey, Global.inf.MobilePay.privateKey, Global.inf.MobilePay.publicKey);
  883. string data = JsonHelper.setMPCenterInpar(funNO, joInput);
  884. // 移动支付地址
  885. Global.curEvt.URL = Global.inf.MobilePay.url + url;
  886. try
  887. {
  888. joRtn = invokeCenterService(data);
  889. Global.writeLog(funNO + "【密文出参】:\r\n" + joRtn.ToString());
  890. string encData = JsonHelper.getDestValue(joRtn, "encData");
  891. string signData = JsonHelper.getDestValue(joRtn, "signData");
  892. if (!string.IsNullOrEmpty(encData) && !string.IsNullOrEmpty(signData))
  893. {
  894. joRtn.Remove("encData");
  895. joRtn.Remove("signData");
  896. joRtn.Remove("data");
  897. //解密
  898. string decData = encrypt.decrypt(encData);
  899. // 验签
  900. JsonConvert.DefaultSettings = () => new JsonSerializerSettings
  901. {
  902. FloatParseHandling = FloatParseHandling.Decimal
  903. };
  904. joRtn.Add("data", JToken.FromObject(JsonConvert.DeserializeObject(decData)));
  905. bool rtn = encrypt.verify(joRtn, signData);
  906. if (rtn)
  907. {
  908. Global.writeLog("验签通过!");
  909. }
  910. else
  911. {
  912. Global.writeLog("验签失败,请核查!");
  913. }
  914. if (!string.IsNullOrEmpty(decData))
  915. {
  916. Global.writeLog(funNO + "【明文出参】:\r\n" + decData);
  917. joRtn = JObject.Parse(decData);
  918. joRtn.Add("success", "True");
  919. }
  920. }
  921. return joRtn;
  922. }
  923. finally
  924. {
  925. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  926. }
  927. }
  928. catch (Exception ex)
  929. {
  930. if (joRtn["infcode"] == null)
  931. { joRtn.Add("infcode", -1); }
  932. if (joRtn["err_msg"] == null)
  933. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  934. outPar = JsonHelper.Compress(joRtn);
  935. return joRtn;
  936. }
  937. finally
  938. {
  939. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
  940. this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
  941. }
  942. }
  943. #endregion
  944. #region 处方流转
  945. /// <summary>
  946. /// 医保电子处方流转调用服务
  947. /// </summary>
  948. /// <param name="data"></param>
  949. /// <returns></returns>
  950. private JObject invokeCenterServicePresCir(string data)
  951. {
  952. string postContent = "";
  953. JObject joRtn = new JObject();
  954. try
  955. {
  956. //内容类型
  957. Signer signer = new Signer();
  958. signer.Key = Global.inf.privateKey; //应用编码
  959. signer.Secret = Global.inf.Secret; //secretKey 私钥
  960. string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  961. string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  962. HttpRequest Resquest = new HttpRequest("POST", new Uri(Global.curEvt.URL));
  963. Resquest.headers.Add("charset", "UTF-8");
  964. //Resquest.headers.Add("x-hw-id", signer.Key);
  965. //Resquest.headers.Add("x-tif-timestamp", timestamp);
  966. //Resquest.headers.Add("x-tif-passid", signer.Key);
  967. //Resquest.headers.Add("x-tif-nonce", nonce);
  968. Resquest.body = data;
  969. string RtnStr;
  970. HttpWebRequest req = signer.Sign(Resquest);
  971. req.ContentType = "application/json;charset=utf8";
  972. req.Timeout = 5 * 10000;
  973. try
  974. {
  975. var writer = new StreamWriter(req.GetRequestStream());
  976. writer.Write(Resquest.body);
  977. writer.Flush();
  978. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  979. StreamReader reader = new StreamReader(resp.GetResponseStream());
  980. RtnStr = reader.ReadToEnd();
  981. joRtn = JObject.Parse(RtnStr);//返回Json数据
  982. return joRtn;
  983. }
  984. catch (WebException e)
  985. {
  986. HttpWebResponse resp = (HttpWebResponse)e.Response;
  987. if (resp != null)
  988. {
  989. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(a)", new StreamReader(resp.GetResponseStream()).ReadToEnd() + "异常内容:" + e.Message);
  990. }
  991. else
  992. {
  993. RtnStr = "异常:" + e.Message;
  994. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常(b)", e.Message);
  995. }
  996. }
  997. }
  998. catch (Exception ex)
  999. {
  1000. postContent = "调用中心服务异常" + ex.Message;
  1001. joRtn.Add("infcode", -1);
  1002. joRtn.Add("err_msg", "invokeCenterService(Exception_Last):" + ex.Message);
  1003. return joRtn;
  1004. }
  1005. }
  1006. /// </summary>
  1007. /// <param name="funNO"></param>
  1008. /// <param name="data"></param>
  1009. /// <returns></returns>
  1010. public JObject invokeCenterServicePresCir(string funNO, string data)
  1011. {
  1012. JObject joRtn = new JObject();
  1013. string outPar = "";
  1014. try
  1015. {
  1016. if (funNO == "7101")
  1017. {
  1018. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/uploadChk";
  1019. }
  1020. else if (funNO == "7102")
  1021. {
  1022. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFixmedinsSign";
  1023. }
  1024. else if (funNO == "7103")
  1025. {
  1026. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxFileUpld";
  1027. }
  1028. else if (funNO == "7104")
  1029. {
  1030. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxUndo";
  1031. }
  1032. else if (funNO == "7105")
  1033. {
  1034. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/hospRxDetlQuery";
  1035. }
  1036. else if (funNO == "7106")
  1037. {
  1038. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoQuery";
  1039. }
  1040. else if (funNO == "7107")
  1041. {
  1042. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoQuery";
  1043. }
  1044. else if (funNO == "7108")
  1045. {
  1046. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxChkInfoCallback";
  1047. }
  1048. else if (funNO == "7109")
  1049. {
  1050. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/rxSetlInfoCallback";
  1051. }
  1052. else if (funNO == "7112") //电子处方药品目录查询
  1053. {
  1054. Global.curEvt.URL = Global.inf.presCenterURL + "/fixmedins/circDrugQuery";
  1055. }
  1056. else
  1057. {
  1058. Global.curEvt.URL = Global.inf.centerURL;
  1059. }
  1060. //Global.curEvt.URL = Global.inf.centerURL;
  1061. joRtn = invokeCenterServicePresCir(data);
  1062. outPar = JsonHelper.Compress(joRtn);
  1063. return joRtn;
  1064. }
  1065. catch (Exception ex)
  1066. {
  1067. if (joRtn["infcode"] == null)
  1068. { joRtn.Add("infcode", -1); }
  1069. if (joRtn["err_msg"] == null)
  1070. { joRtn.Add("err_msg", "invokeCenterServicePresCir(3):" + ex.Message); }
  1071. outPar = JsonHelper.Compress(joRtn);
  1072. return joRtn;
  1073. }
  1074. finally
  1075. {
  1076. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  1077. //this.saveCenterLog(JsonHelper.Compress(data), outPar, JsonHelper.Compress(data), outPar);
  1078. }
  1079. }
  1080. #endregion
  1081. #region 门户支付
  1082. public JObject invokePortalPayService(string funNO, string data)
  1083. {
  1084. return invokePortalPayService(funNO, JObject.Parse(data));
  1085. }
  1086. public JObject invokePortalPayService(string funNO, JObject joInput)
  1087. {
  1088. JObject joRtn = new JObject();
  1089. String outPar = "";
  1090. try
  1091. {
  1092. string url = "";
  1093. switch (funNO)
  1094. {
  1095. case "AMP_HOS_001":
  1096. url = "/api/amp/hos/pushMsg";
  1097. break;
  1098. case "AMP_HOS_002":
  1099. url = "/api/amp/hos/refund";
  1100. break;
  1101. case "AMP_HOS_003":
  1102. url = "/api/amp/hos/queryRefundResult";
  1103. break;
  1104. case "AMP_HOS_004":
  1105. url = "/api/amp/hos/getTradeFile";
  1106. break;
  1107. case "AMP_HOS_006":
  1108. url = "/api/amp/hos/queryRevsExpRecord";
  1109. break;
  1110. default:
  1111. break;
  1112. }
  1113. EncryptHelper encrypt = new EncryptHelper(Global.inf.PortalAmp.appid, Global.inf.PortalAmp.secretKey, Global.inf.PortalAmp.privateKey, Global.inf.PortalAmp.publicKey);
  1114. string data = JsonHelper.setPortalPayAmpCenterInpar(funNO, joInput);
  1115. // 移动支付地址
  1116. Global.curEvt.URL = Global.inf.PortalAmp.url + url;
  1117. try
  1118. {
  1119. joRtn = invokeCenterService(data);
  1120. string encData = JsonHelper.getDestValue(joRtn, "encData");
  1121. string signData = JsonHelper.getDestValue(joRtn, "signData");
  1122. if (!string.IsNullOrEmpty(encData) && !string.IsNullOrEmpty(signData))
  1123. {
  1124. joRtn.Remove("encData");
  1125. joRtn.Remove("signData");
  1126. joRtn.Remove("data");
  1127. //解密
  1128. string decData = encrypt.decrypt(encData);
  1129. // 验签
  1130. JsonConvert.DefaultSettings = () => new JsonSerializerSettings
  1131. {
  1132. FloatParseHandling = FloatParseHandling.Decimal
  1133. };
  1134. joRtn.Add("data", JToken.FromObject(JsonConvert.DeserializeObject(decData)));
  1135. bool rtn = encrypt.verify(joRtn, signData);
  1136. if (rtn)
  1137. {
  1138. Global.writeLog("验签通过!");
  1139. }
  1140. else
  1141. {
  1142. Global.writeLog("验签失败,请核查!");
  1143. }
  1144. if (!string.IsNullOrEmpty(decData))
  1145. {
  1146. joRtn = JObject.Parse(decData);
  1147. joRtn.Add("success", "True");
  1148. }
  1149. }
  1150. return joRtn;
  1151. }
  1152. finally
  1153. {
  1154. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  1155. }
  1156. }
  1157. catch (Exception ex)
  1158. {
  1159. if (joRtn["infcode"] == null)
  1160. { joRtn.Add("infcode", -1); }
  1161. if (joRtn["err_msg"] == null)
  1162. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  1163. outPar = JsonHelper.Compress(joRtn);
  1164. return joRtn;
  1165. }
  1166. finally
  1167. {
  1168. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
  1169. this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
  1170. }
  1171. }
  1172. #endregion
  1173. #region 兼容新版调用
  1174. /// <summary>
  1175. /// 通过枚举转换要调用的接口
  1176. /// </summary>
  1177. /// <param name="trade"></param>
  1178. /// <param name="data"></param>
  1179. /// <returns></returns>
  1180. public JObject invokeCenterService(TradeEnum trade, JObject joInput)
  1181. {
  1182. string funNo = trade.GetCode();
  1183. // 入参统一转换
  1184. JObject request = Utils.ConvertRequest<JObject>(trade, joInput);
  1185. string data = JsonHelper.toJsonString(request);
  1186. // 统一封装请求头
  1187. if (trade.GetMode() == ModeEnum.REST)
  1188. {
  1189. data = JsonHelper.setCenterInpar(funNo, request);
  1190. }
  1191. JObject joRtn = new JObject();
  1192. // 调试模式
  1193. if (Global.curEvt.enabledDebug)
  1194. {
  1195. CenterResult center = new CenterResult();
  1196. center.setTradeNo(trade.GetCode(), data);
  1197. if (center.ShowDialog() == DialogResult.OK)
  1198. {
  1199. // 接口实际返回数据
  1200. string outPar = center.returnData;
  1201. joRtn = JObject.Parse(outPar);
  1202. }
  1203. }
  1204. else
  1205. {
  1206. prepareCallURI(trade);
  1207. joRtn = invokeCenterService(data, trade.GetMode());
  1208. }
  1209. // 返回结果统一转换
  1210. joRtn = Utils.ConvertResponse<JObject>(trade, joRtn);
  1211. return joRtn;
  1212. }
  1213. /// <summary>
  1214. /// API密钥
  1215. /// </summary>
  1216. private void LoadAPIKey(string prefix)
  1217. {
  1218. //获取AK,SK(可配置)
  1219. if (prefix == "MOBILE")
  1220. {
  1221. }
  1222. else
  1223. {
  1224. }
  1225. }
  1226. /// <summary>
  1227. /// 核心接口密钥
  1228. /// </summary>
  1229. private void LoadCoreAPIKey()
  1230. {
  1231. LoadAPIKey("KEY");
  1232. }
  1233. private JObject invokeCenterService(string data, ModeEnum mode = ModeEnum.REST)
  1234. {
  1235. JObject joRtn = new JObject();
  1236. try
  1237. {
  1238. IInvokeCenter center = new InvokeCenterFactory().create(mode);
  1239. string outputData = "";
  1240. string errMsg = "";
  1241. int iInt = center.Init(ref errMsg);
  1242. if (iInt == 0)
  1243. {
  1244. LoadCoreAPIKey();
  1245. iInt = center.Business(data, ref outputData, ref errMsg);
  1246. if (iInt == 0 && !string.IsNullOrEmpty(outputData))
  1247. {
  1248. try
  1249. {
  1250. joRtn = JObject.Parse(outputData);
  1251. }
  1252. catch (Exception ex)
  1253. {
  1254. joRtn.Add("infcode", iInt);
  1255. joRtn.Add("err_msg", "返回参数异常:" + outputData);
  1256. }
  1257. }
  1258. else
  1259. {
  1260. joRtn.Add("infcode", iInt);
  1261. joRtn.Add("err_msg", outputData);
  1262. return joRtn;
  1263. }
  1264. return joRtn;
  1265. }
  1266. else
  1267. {
  1268. joRtn.Add("infcode", -1);
  1269. joRtn.Add("err_msg", "医保动态库初始化失败invokeInitByDLL:" + errMsg);
  1270. return joRtn;
  1271. }
  1272. }
  1273. finally
  1274. {
  1275. Global.writeLog(Global.curEvt.URL, JsonHelper.Compress(data), joRtn.ToString());
  1276. // 保存到服务器
  1277. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  1278. }
  1279. }
  1280. private void prepareCallURI(TradeEnum trade)
  1281. {
  1282. string funNo = trade.GetCode();
  1283. Global.curEvt.funNo = funNo;
  1284. if (Global.curEvt.testMode)
  1285. {
  1286. // 医保测试环境
  1287. //LoadCenterURL(true);
  1288. }
  1289. string prefix = Global.inf.centerURL;
  1290. switch (trade)
  1291. {
  1292. case TradeEnum.FileUpload:
  1293. prefix = Global.inf.uploadURL ?? Global.inf.centerURL;
  1294. break;
  1295. case TradeEnum.FileDownload:
  1296. prefix = Global.inf.centerURL;
  1297. break;
  1298. default:
  1299. prefix = Global.inf.centerURL;
  1300. break;
  1301. }
  1302. // 根据情况确实是否需要加funNo
  1303. //Global.curEvt.URL = prefix + Global.curEvt.funNo;
  1304. }
  1305. /// <summary>
  1306. /// 医保目录txt文件下载
  1307. /// </summary>
  1308. /// <param name="data"></param>
  1309. /// <returns></returns>
  1310. public JObject DownloadCenterFile(string data, ModeEnum mode = ModeEnum.REST)
  1311. {
  1312. //download file
  1313. IInvokeCenter center = new InvokeCenterFactory().create(mode);
  1314. string outputMsg = "";
  1315. JObject joRtn = new JObject();
  1316. prepareCallURI(TradeEnum.FileDownload);
  1317. int rtnCode = center.DownloadFile(data, ref outputMsg);
  1318. if (rtnCode == 0)
  1319. {
  1320. joRtn = JObject.Parse(outputMsg);
  1321. }
  1322. else
  1323. {
  1324. //joRtn.Add("err_msg", "下载文件失败DownloadFile:" + outputMsg);
  1325. joRtn = JObject.Parse(outputMsg);
  1326. }
  1327. return joRtn;
  1328. }
  1329. #endregion
  1330. }
  1331. }