JsonHelper.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  1. /******************************************************************************
  2. * 文件名称: JsonHelper.cs
  3. * 文件说明: Json业务的封装,处理JSON串的封装,解析等
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-14
  6. *
  7. * 2020-04-14: 增加 setIrisInpar 方法
  8. * 2020-04-14: 增加 setIrisInpar(重载) 方法
  9. * 2020-04-14: 增加 getIrisExceptionJson 方法
  10. * 2020-04-14: 增加 parseBusinessJson 方法
  11. ******************************************************************************/
  12. using Newtonsoft.Json.Linq;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. using PTMedicalInsurance.Common;
  19. using System.IO;
  20. using PTMedicalInsurance.Variables;
  21. using System.Windows.Forms;
  22. using SM2Crypto.Lib;
  23. using Newtonsoft.Json;
  24. using System.Net;
  25. namespace PTMedicalInsurance.Helper
  26. {
  27. class JsonHelper
  28. {
  29. private string serviceURL;
  30. private string authorization;
  31. public static string toJsonString(object obj, bool missingNull)
  32. {
  33. JsonSerializerSettings settings = new JsonSerializerSettings();
  34. if (missingNull)
  35. {
  36. settings.NullValueHandling = NullValueHandling.Ignore;
  37. }
  38. return JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
  39. }
  40. public static string toJsonString(object obj)
  41. {
  42. return toJsonString(obj, true);
  43. }
  44. /// <summary>
  45. /// iris服务调用的封装
  46. /// </summary>
  47. /// <param name="data"></param>
  48. /// <returns></returns>
  49. public JObject invokeIrisService(string data, string serviceDesc)
  50. {
  51. string rtn = "", url = "";
  52. JObject joRtn = new JObject();
  53. try
  54. {
  55. //先根据用户请求的uri构造请求地址
  56. url = serviceURL;
  57. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  58. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  59. //创建Web访问对象
  60. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  61. //把用户传过来的数据转成“UTF-8”的字节流
  62. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  63. //添加头部信息
  64. myRequest.Method = "POST";
  65. myRequest.ContentLength = buf.Length;
  66. myRequest.ContentType = "application/json";
  67. myRequest.Headers.Add("Authorization", authorization);
  68. myRequest.MaximumAutomaticRedirections = 1;
  69. myRequest.AllowAutoRedirect = true;
  70. //发送请求
  71. Stream stream = myRequest.GetRequestStream();
  72. stream.Write(buf, 0, buf.Length);
  73. stream.Close();
  74. //获取接口返回值
  75. //通过Web访问对象获取响应内容
  76. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  77. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  78. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  79. //string rtn = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  80. rtn = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  81. reader.Close();
  82. myResponse.Close();
  83. joRtn = JObject.Parse(rtn);
  84. return joRtn;
  85. }
  86. catch (Exception ex)
  87. {
  88. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  89. rtn = JsonConvert.SerializeObject(joRtn);
  90. return joRtn;
  91. }
  92. }
  93. /// <summary>
  94. /// 根据JSonPath查找节点值,如果节点不存在则返回空值
  95. /// </summary>
  96. /// <param name="jo"></param>
  97. /// <param name="jsonPath"></param>
  98. /// <returns></returns>
  99. public static string getDestValue(JObject jo, string destPath)
  100. {
  101. JToken jt = jo.SelectToken("$." + destPath);
  102. if (jt != null)
  103. {
  104. return jt.ToString();
  105. }
  106. else
  107. {
  108. Global.writeLog(destPath + "的JToken属性值为空");
  109. return "";
  110. }
  111. }
  112. /// <summary>
  113. /// 解析医保平台返回对象
  114. /// </summary>
  115. /// <typeparam name="T"></typeparam>
  116. /// <param name="response"></param>
  117. /// <returns></returns>
  118. public static T getOutput<T>(JObject response)
  119. {
  120. if (response.ContainsKey("output"))
  121. {
  122. return response["output"].ToObject<T>();
  123. }
  124. return response.ToObject<T>();
  125. }
  126. /// <summary>
  127. /// 医保平台服务调用的封装
  128. /// </summary>
  129. /// <param name="data"></param>
  130. /// <returns></returns>
  131. public JObject invokeInsuService(string data, string serviceDesc)
  132. {
  133. string rtn = "";
  134. JObject joRtn = new JObject();
  135. try
  136. {
  137. //先根据用户请求的uri构造请求地址
  138. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  139. authorization = Global.insuConfig.authorization;
  140. joRtn = invokeIrisService(data, serviceDesc);
  141. rtn = JsonConvert.SerializeObject(joRtn);
  142. return joRtn;
  143. }
  144. catch (Exception ex)
  145. {
  146. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  147. rtn = JsonConvert.SerializeObject(joRtn);
  148. return joRtn;
  149. }
  150. finally
  151. {
  152. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  153. }
  154. }
  155. public static string getDestProperty(JObject jo, string propertyName)
  156. {
  157. JProperty jp = jo.Property(propertyName);
  158. if (jp != null)
  159. {
  160. string jpStr = jp.ToString();
  161. string rtnResult = "{ " + jpStr + "}";
  162. return rtnResult;
  163. }
  164. else
  165. {
  166. Global.writeLog(propertyName + "的JProperty属性值为空");
  167. return "";
  168. }
  169. }
  170. /// <summary>
  171. /// 压缩JSON,占用体积减小(重载)
  172. /// </summary>
  173. /// <param name="json"></param>
  174. /// <returns></returns>
  175. public static string Compress(string json)
  176. {
  177. StringBuilder sb = new StringBuilder();
  178. using (StringReader reader = new StringReader(json))
  179. {
  180. int ch = -1;
  181. int lastch = -1;
  182. bool isQuoteStart = false;
  183. while ((ch = reader.Read()) > -1)
  184. {
  185. if ((char) lastch != '\\' && (char) ch == '\"')
  186. {
  187. if (!isQuoteStart)
  188. {
  189. isQuoteStart = true;
  190. }
  191. else
  192. {
  193. isQuoteStart = false;
  194. }
  195. }
  196. if (!Char.IsWhiteSpace((char) ch) || isQuoteStart)
  197. {
  198. sb.Append((char) ch);
  199. }
  200. lastch = ch;
  201. }
  202. }
  203. return sb.ToString();
  204. }
  205. public static string Compress(JObject jsonObj)
  206. {
  207. //https://blog.csdn.net/yangjiaosun/article/details/103717256
  208. return Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj);
  209. }
  210. /// <summary>
  211. /// 组织异常JSON串
  212. /// </summary>
  213. /// <param name="errorCode"></param>
  214. /// <param name="errorMessage"></param>
  215. /// <returns></returns>
  216. public static JObject setExceptionJson(int errorCode, string eventName, string errorMessage)
  217. {
  218. dynamic joRtn = new JObject();
  219. joRtn.errorCode = errorCode;
  220. joRtn.errorMessage = eventName + "提示:" + errorMessage;
  221. return joRtn;
  222. }
  223. /// <summary>
  224. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  225. /// </summary>
  226. /// <param name="infno"></param>
  227. /// <param name="input"></param>
  228. /// <returns></returns>
  229. public static string setCenterInpar_plain(string infno, string input)
  230. {
  231. dynamic Jo = new JObject();
  232. Jo.infno = infno;
  233. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  234. Jo.msgid = Global.curEvt.msgid;
  235. //Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  236. //Global.pat.mdtrtarea_admvs = "419900";
  237. if (Global.pat.insuplc_admdvs == "419900")
  238. {
  239. Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  240. Global.pat.mdtrtarea_admvs = "419900";
  241. }
  242. else
  243. {
  244. Jo.mdtrtarea_admvs = "410100";
  245. Global.pat.mdtrtarea_admvs = "410100";
  246. }
  247. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  248. Jo.recer_sys_code = Global.inf.recivedSystem;
  249. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  250. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  251. Jo.signtype = Global.inf.signatureType; ;
  252. Jo.infver = Global.inf.version; ;
  253. Jo.opter_type = Global.user.type; ;
  254. Jo.opter = Global.user.ID; ;
  255. Jo.opter_name = Global.user.name; ;
  256. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  257. Jo.fixmedins_code = Global.inf.hospitalNO;
  258. Jo.fixmedins_name = Global.inf.hospitalName;
  259. Jo.sign_no = Global.curEvt.signno;
  260. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  261. Jo.Add("input", JObject.FromObject(joInput));
  262. return Jo.ToString();
  263. }
  264. /// <summary>
  265. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  266. /// </summary>
  267. /// <param name="infno"></param>
  268. /// <param name="input"></param>
  269. /// <returns></returns>
  270. public static string setCenterInpar_plain(string infno, JObject joInput)
  271. {
  272. dynamic Jo = new JObject();
  273. Jo.infno = infno;
  274. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  275. Jo.msgid = Global.curEvt.msgid;
  276. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  277. //Jo.mdtrtarea_admvs = "419900";
  278. //Global.pat.mdtrtarea_admvs = "419900";
  279. if (Global.pat.insuplc_admdvs == "419900")
  280. {
  281. Jo.mdtrtarea_admvs = "419900";
  282. Global.pat.mdtrtarea_admvs = "419900";
  283. }
  284. else
  285. {
  286. Jo.mdtrtarea_admvs = "410100";
  287. Global.pat.mdtrtarea_admvs = "410100";
  288. }
  289. Jo.recer_sys_code = Global.inf.recivedSystem;
  290. Jo.dev_no = Global.inf.dev_no;
  291. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  292. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  293. Jo.signtype = Global.inf.signatureType; ;
  294. Jo.infver = Global.inf.version; ;
  295. Jo.opter_type = Global.user.type; ;
  296. Jo.opter = Global.user.ID; ;
  297. Jo.opter_name = Global.user.name; ;
  298. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  299. Jo.fixmedins_code = Global.inf.hospitalNO;
  300. Jo.fixmedins_name = Global.inf.hospitalName;
  301. Jo.sign_no = Global.curEvt.signno;
  302. Jo.Add("input", joInput);
  303. return Jo.ToString();
  304. }
  305. /// <summary>
  306. /// 组织中心入参--签到
  307. /// </summary>
  308. /// <param name="infno"></param>
  309. /// <param name="input"></param>
  310. /// <returns></returns>
  311. public static string setCenterInpar(string infno, string input)
  312. {
  313. dynamic Jo = new JObject();
  314. Jo.infno = infno;
  315. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  316. Jo.msgid = Global.curEvt.msgid;
  317. if (Global.inf.areaCode == "")
  318. {
  319. //Global.inf.areaCode = "419900";
  320. Global.inf.areaCode = "410100";
  321. }
  322. if (Global.pat.insuplc_admdvs == "")
  323. {
  324. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  325. }
  326. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  327. //Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  328. //Global.pat.mdtrtarea_admvs = "419900";
  329. if (Global.pat.insuplc_admdvs == "419900")
  330. {
  331. Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  332. Global.pat.mdtrtarea_admvs = "419900";
  333. }
  334. else
  335. {
  336. Jo.mdtrtarea_admvs = "410100"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  337. Global.pat.mdtrtarea_admvs = "410100";
  338. }
  339. Jo.recer_sys_code = "HeNan";
  340. Jo.dev_no = Global.curEvt.mac;
  341. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  342. Jo.cainfo = Global.inf.cainfo ;//
  343. Jo.signtype = "SM3"; ;
  344. Jo.infver = "v1.0";
  345. Jo.opter_type = Global.user.type; ;
  346. Jo.opter = Global.user.ID; ;
  347. Jo.opter_name = Global.user.name; ;
  348. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  349. Jo.fixmedins_code = Global.inf.hospitalNO;
  350. Jo.fixmedins_name = Global.inf.hospitalName;
  351. Jo.sign_no = Global.curEvt.signno;
  352. if (input != "")
  353. {
  354. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  355. Jo.cainfo = "";
  356. Jo.Add("input", JObject.FromObject(joInput));
  357. }
  358. else
  359. {
  360. Jo.cainfo = "";
  361. Jo.Add("input", "");
  362. }
  363. return Jo.ToString();
  364. }
  365. /// <summary>
  366. /// 组织中心入参
  367. /// </summary>
  368. /// <param name="infno"></param>
  369. /// <param name="input"></param>
  370. /// <returns></returns>
  371. public static string setCenterInpar(string infno, JObject joInput)
  372. {
  373. dynamic Jo = new JObject();
  374. Jo.infno = infno;
  375. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  376. Jo.msgid = Global.curEvt.msgid;
  377. if (Global.pat.insuplc_admdvs == "")
  378. {
  379. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  380. }
  381. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  382. //Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  383. //Global.pat.mdtrtarea_admvs = "419900";
  384. if (Global.pat.insuplc_admdvs == "419900")
  385. {
  386. Jo.mdtrtarea_admvs = "419900"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  387. Global.pat.mdtrtarea_admvs = "419900";
  388. }
  389. else
  390. {
  391. Jo.mdtrtarea_admvs = "410100"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  392. Global.pat.mdtrtarea_admvs = "410100";
  393. }
  394. Jo.recer_sys_code = "HeNan";
  395. Jo.dev_no = Global.curEvt.mac;
  396. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  397. Jo.cainfo = Global.inf.cainfo;//
  398. Jo.signtype = "asn1"; ;
  399. Jo.infver = "v1.0";
  400. Jo.opter_type = Global.user.type; ;
  401. Jo.opter = Global.user.ID;
  402. Jo.opter_name = Global.user.name; ;
  403. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  404. Jo.fixmedins_code = Global.inf.hospitalNO;
  405. Jo.fixmedins_name = Global.inf.hospitalName;
  406. Jo.sign_no = Global.curEvt.signno;
  407. Jo.cainfo = "";
  408. Jo.Add("input", JObject.FromObject(joInput));
  409. return Jo.ToString();
  410. }
  411. /// <summary>
  412. /// 组织中心入参-医保电子处方流转
  413. /// </summary>
  414. /// <param name="infno"></param>
  415. /// <param name="input"></param>
  416. /// <returns></returns>
  417. public static string setCenterInparPresCirNew(string infno, JObject data)
  418. {
  419. #region【测试环境】
  420. //应用ID
  421. Global.inf.appId = "FEC5EF000EBD47BA9B638C648D81388B";
  422. //Global.inf.appId = "57E2D561E97141A3871DEFB410ADD920";
  423. //应用秘钥
  424. Global.inf.Secret = "433A9350CAFF4C6CB0EBDDBCDEE9BA59";
  425. //Global.inf.Secret = "F30D0D261BA04063A0BCAEF19F8ADBCC";
  426. //应用私钥
  427. Global.inf.privateKey = "ALWdNy5FNoRU9tdw9lDySEZXPXvdiWQ/DACMm4fd4Ozi"; //中心邮件下发
  428. //Global.inf.privateKey = "AKyhfvPbT+tIJHJkZSDILrw7t+FOG1U58UcupYYTzCOj"; //中心Demo
  429. //应用公钥
  430. //Global.inf.publicKey = "BKRejz4MwM8G8Krc4hyIIvhphvwrQpnHIsGWTd0sn0TJYr2eKJGAv87AKnrT8pL50H6hdVHdU0FFaL18GApDEbU"; //中心邮件下发
  431. Global.inf.publicKey = "BJVX/49gz0XfPJsPkk+QCXBYF/SPpjOnFsTDz0bQvBllDR2NbOOQ2HvzjqpHMke1HRjkrhvO/EtVaY/sqcxbqgc="; //中心Demo
  432. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  433. Global.inf.presCenterURL = "http://10.85.254.46:8000/hss-callEncService";
  434. #endregion
  435. #region【正式环境】
  436. /*
  437. if (Global.inf.interfaceDr == 21) //兰2
  438. {
  439. //应用ID
  440. Global.inf.appId = "4D967CAB5DA44E3583F4246D7FE897F0";
  441. //应用秘钥
  442. Global.inf.Secret = "586BD24D03E5481C8AE4FE9DD8424FFE";
  443. //应用私钥
  444. Global.inf.privateKey = "XTbX+Tt1np5Fma0+twhYi+vtM4J0UJ8VX5fFEZ7t/ro=";
  445. //应用公钥
  446. Global.inf.publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w=";
  447. }
  448. else if (Global.inf.interfaceDr == 25) //兰1
  449. {
  450. //应用ID
  451. Global.inf.appId = "6C9B786AF7E848B29B0EF5783D630263";
  452. //应用秘钥
  453. Global.inf.Secret = "6055AE5A9CAD4D9BA8A98EB20431364E";
  454. //应用私钥
  455. Global.inf.privateKey = "AKReZmOYcTOdbrnlZZFIXn8LQSHPzdAK1Q0CXDnE4Jhk";
  456. //应用公钥
  457. Global.inf.publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w=";
  458. }
  459. Global.inf.presCenterURL = "http://10.126.34.36:8080/epc/api";
  460. */
  461. #endregion
  462. Global.writeLog("密钥id:" + Global.inf.appId);
  463. Global.writeLog("密钥key:" + Global.inf.Secret);
  464. Global.writeLog("定点医药机构私钥:" + Global.inf.privateKey);
  465. Global.writeLog("医保电子处方中心公钥:" + Global.inf.publicKey);
  466. //加密
  467. String encData = SMUtil.encrypt(JsonConvert.SerializeObject(data, Formatting.None), Global.inf.appId, Global.inf.Secret);
  468. //Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  469. string timestamp = ((long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).ToString();
  470. Global.curEvt.msgid = timestamp;
  471. JObject requestData = new JObject();
  472. requestData.Add("appId", Global.inf.appId);
  473. requestData.Add("version", "2.0.1");
  474. requestData.Add("encType", "SM4");
  475. requestData.Add("signType", "SM2");
  476. requestData.Add("timestamp", timestamp);
  477. JObject signDto = (JObject)JObject.Parse(JsonConvert.SerializeObject(requestData, Formatting.None));
  478. signDto.Add("data", data);
  479. //加签
  480. //String signData = "";
  481. //SignUtils.encryptMsg(Global.inf.appId, Global.inf.Secret, Global.inf.privateKey, signDto.ToString(), ref signData);
  482. String signData = SMUtil.sign(signDto, Global.inf.Secret, Global.inf.privateKey);
  483. Global.writeLog("签名结果:" + "\r\n" + signData);
  484. //报文
  485. requestData.Add("encData", encData);
  486. requestData.Add("signData", signData);
  487. requestData.Add("infno", infno);
  488. dynamic Jo = new JObject();
  489. Jo.infno = infno;
  490. Jo.appId = Global.inf.appId;
  491. Jo.version = "2.0.1";
  492. Jo.timestamp = timestamp;
  493. Jo.encType = "SM4";
  494. Jo.signType = "SM2";
  495. Jo.signData = signDto;
  496. Jo.encData = data;
  497. Global.writeLog("加密前报文:" + "\r\n" + Jo + "\r\n" + "加密后报文:" + "\r\n" + JsonConvert.SerializeObject(requestData, Formatting.None));
  498. return requestData.ToString();
  499. }
  500. /// <summary>
  501. /// 组织Iris入参
  502. /// </summary>
  503. /// <param name="code"></param>
  504. /// <param name="joParam"></param>
  505. /// <returns></returns>
  506. public static JObject setIrisInpar(string code, JObject joParam)
  507. {
  508. try
  509. {
  510. dynamic joInparam = new JObject();
  511. joInparam.code = code;
  512. dynamic joTmp = new JObject();
  513. JArray jaParam = new JArray();
  514. jaParam.Add(joParam);
  515. joInparam.Add("params", JArray.FromObject(jaParam));
  516. joInparam.Add("session", Global.curEvt.jaSession);
  517. return joInparam;
  518. }
  519. catch (Exception ex)
  520. {
  521. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  522. }
  523. }
  524. /// <summary>
  525. /// 组织Iris入参
  526. /// </summary>
  527. /// <param name="code"></param>
  528. /// <param name="joParam"></param>
  529. /// <returns></returns>
  530. public static JObject setIrisInpar(string code, JArray jaParams)
  531. {
  532. try
  533. {
  534. dynamic joInparam = new JObject();
  535. joInparam.code = code;
  536. dynamic joTmp = new JObject();
  537. joInparam.Add("params", jaParams);
  538. joInparam.Add("session", Global.curEvt.jaSession);
  539. return joInparam;
  540. }
  541. catch (Exception ex)
  542. {
  543. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  544. }
  545. }
  546. /// <summary>
  547. /// 解析中心返参
  548. /// </summary>
  549. /// <param name="joRtn"></param>
  550. /// <param name="errorMsg"></param>
  551. /// <returns></returns>
  552. public static int parseCenterRtnValue(JObject joRtn, out string errorMsg)
  553. {
  554. try
  555. {
  556. string errcode = getDestValue(joRtn, "errcode");
  557. string errorCode = getDestValue(joRtn, "errorCode");
  558. if (errcode != "")
  559. {
  560. errorMsg = getDestValue(joRtn, "errmsg");
  561. return -1;
  562. }
  563. else if (errorCode != "")
  564. {
  565. errorMsg = getDestValue(joRtn, "errorMessage");
  566. return -2;
  567. }
  568. else
  569. {
  570. errorMsg = getDestValue(joRtn, "err_msg");
  571. return int.Parse(getDestValue(joRtn, "infcode"));
  572. }
  573. }
  574. catch (Exception ex)
  575. {
  576. errorMsg = "解析中心返参发生异常:" + ex.Message;
  577. return -1;
  578. }
  579. }
  580. /// <summary>
  581. /// 组织IRIS返参
  582. /// </summary>
  583. /// <param name="errorCode"></param>
  584. /// <param name="errorMessage"></param>
  585. /// <param name="joResult"></param>
  586. /// <returns></returns>
  587. public static JObject setIrisReturnValue(int errorCode, string errorMessage, JObject joResult)
  588. {
  589. try
  590. {
  591. dynamic joRtn = new JObject();
  592. joRtn.errorCode = errorCode;
  593. joRtn.errorMessage = errorMessage;
  594. joRtn.Add("result", joResult);
  595. return joRtn;
  596. }
  597. catch (Exception ex)
  598. {
  599. return setExceptionJson(-1, "setIrisReturnValue:", ex.Message);
  600. }
  601. }
  602. /// <summary>
  603. /// 解析中心返参
  604. /// </summary>
  605. /// <param name="joRtn"></param>
  606. /// <param name="errorMsg"></param>
  607. /// <returns></returns>
  608. public static int parseCenterRtnValuePresCir(JObject joRtn, out string errorMsg)
  609. {
  610. try
  611. {
  612. string errcode = getDestValue(joRtn, "errcode");
  613. string errorCode = getDestValue(joRtn, "errorCode");
  614. if (errcode != "")
  615. {
  616. errorMsg = getDestValue(joRtn, "message");
  617. return -1;
  618. }
  619. else if (errorCode != "")
  620. {
  621. errorMsg = getDestValue(joRtn, "errorMessage");
  622. return -2;
  623. }
  624. else
  625. {
  626. errorMsg = getDestValue(joRtn, "message");
  627. return int.Parse(getDestValue(joRtn, "code"));
  628. }
  629. }
  630. catch (Exception ex)
  631. {
  632. errorMsg = "解析中心返参发生异常:" + ex.Message;
  633. return -1;
  634. }
  635. }
  636. /// <summary>
  637. /// 解析IRIS返参
  638. /// </summary>
  639. /// <param name="joRtn"></param>
  640. /// <param name="errorMsg"></param>
  641. /// <returns></returns>
  642. public static int parseIrisRtnValue(JObject joRtn, out string errorMsg)
  643. {
  644. try
  645. {
  646. errorMsg = getDestValue(joRtn, "errorMessage");
  647. return int.Parse(getDestValue(joRtn, "errorCode"));
  648. }
  649. catch (Exception ex)
  650. {
  651. errorMsg = "解析Iris返参发生异常:" + ex.Message;
  652. return -1;
  653. }
  654. }
  655. /// <summary>
  656. /// 解析业务JSON串(业务串固定格式为{errorCode = ,errorMessage = ,result ={}})
  657. /// </summary>
  658. /// <param name="json"></param>
  659. /// <param name="errorMsg"></param>
  660. /// <returns></returns>
  661. public static int parseCenterReturnJson(JObject json, out string errorMsg)
  662. {
  663. try
  664. {
  665. errorMsg = "";
  666. if (int.Parse(json["infcode"].ToString()) != 0)
  667. {
  668. errorMsg = json["err_msg"].ToString();
  669. }
  670. return int.Parse(json["infcode"].ToString());
  671. }
  672. catch (Exception ex)
  673. {
  674. errorMsg = "parseCenterReturnJson" + ex.Message;
  675. return -1;
  676. }
  677. }
  678. /// <summary>
  679. /// 保存中心交易日志到数据库
  680. /// </summary>
  681. /// <param name="inParam"></param>
  682. /// <param name="outParam"></param>
  683. /// <param name="inParamPlain"></param>
  684. /// <param name="outParamPlain"></param>
  685. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  686. {
  687. dynamic joIris = new JObject();
  688. string sRtn = "";
  689. try
  690. {
  691. //解析postContent,插入医保交易日志表
  692. JObject joIn = new JObject(JObject.Parse(inParam));
  693. JObject joOut = new JObject(JObject.Parse(outParam));
  694. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  695. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  696. JArray jaParams = new JArray();
  697. JObject joParam = new JObject();
  698. joParam.Add("inParam", JObject.FromObject(joIn));
  699. joParam.Add("outParam", JObject.FromObject(joOut));
  700. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  701. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  702. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  703. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  704. joParam.Add("updateUserID", Global.user.ID);
  705. joParam.Add("psn_no", Global.pat.psn_no);
  706. jaParams.Add(joParam);
  707. joIris.code = "09010021";
  708. joIris.Add("params", jaParams);
  709. //InvokeHelper invoker = new InvokeHelper();
  710. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  711. }
  712. catch (Exception ex)
  713. {
  714. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  715. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  716. }
  717. }
  718. /// <summary>
  719. /// 移动支付组织中心入参
  720. /// </summary>
  721. /// <param name="infno"></param>
  722. /// <param name="input"></param>
  723. /// <returns></returns>
  724. public static string setMPCenterInpar(string infno, string txtData)
  725. {
  726. EncryptHelper encrypt = new EncryptHelper();
  727. string plainText = SignUtil.SortInput(JObject.Parse(txtData));
  728. string signData = "";
  729. string output = encrypt.encrypt(txtData, ref signData);
  730. return output;
  731. }
  732. public static string setMPCenterInpar(string infno, JObject joInput)
  733. {
  734. return setMPCenterInpar(infno, joInput.ToString());
  735. }
  736. /// <summary>
  737. /// 解析移动返参
  738. /// </summary>
  739. /// <param name="joRtn"></param>
  740. /// <param name="errorMsg"></param>
  741. /// <returns></returns>
  742. public static int parseMPRtnValue(JObject joRtn, out string errorMsg)
  743. {
  744. try
  745. {
  746. string success = getDestValue(joRtn, "success");
  747. string message = getDestValue(joRtn, "message");
  748. string encData = getDestValue(joRtn, "encData");
  749. //Global.writeLog("success:" + success);
  750. if (success != "True")
  751. {
  752. errorMsg = message;
  753. return -1;
  754. }
  755. else
  756. {
  757. errorMsg = joRtn.ToString();
  758. return 0;
  759. }
  760. }
  761. catch (Exception ex)
  762. {
  763. errorMsg = "解析中心返参发生异常:" + ex.Message;
  764. return -1;
  765. }
  766. }
  767. }
  768. }