JsonHelper.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. /******************************************************************************
  2. * 文件名称: JsonHelper.cs
  3. * 文件说明: Json业务的封装,处理JSON串的封装,解析等
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-14
  6. *
  7. * 2020-04-14: 增加 getIrisServiceInparamBaseJson 方法
  8. * 2020-04-14: 增加 getIrisServiceInparamBaseJson(重载) 方法
  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 Newtonsoft.Json;
  22. using SM2Crypto.Lib;
  23. namespace PTMedicalInsurance.Helper
  24. {
  25. public class JsonHelper
  26. {
  27. /// <summary>
  28. /// 根据JSonPath查找节点值,如果节点不存在则返回空值
  29. /// </summary>
  30. /// <param name="jo"></param>
  31. /// <param name="jsonPath"></param>
  32. /// <returns></returns>
  33. public static string getDestValue(JObject jo, string destPath)
  34. {
  35. JToken jt = jo.SelectToken("$." + destPath);
  36. if (jt != null)
  37. {
  38. return jt.ToString();
  39. }
  40. else
  41. {
  42. Global.writeLog(destPath + "的JToken属性值为空");
  43. return "";
  44. }
  45. }
  46. public static string toJsonString(object obj, bool missingNull)
  47. {
  48. JsonSerializerSettings settings = new JsonSerializerSettings();
  49. if (missingNull)
  50. {
  51. settings.NullValueHandling = NullValueHandling.Ignore;
  52. }
  53. return JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
  54. }
  55. public static object toObject(string json)
  56. {
  57. return JsonConvert.DeserializeObject(json);
  58. }
  59. public static T toObject<T>(JObject joObject)
  60. {
  61. return joObject.ToObject<T>();
  62. }
  63. public static T getResult<T>(JObject response)
  64. {
  65. Response resp = response.ToObject<Response>();
  66. if (resp.errorCode == "0")
  67. {
  68. if (resp.result?.GetType() == typeof(JObject))
  69. {
  70. JObject ret = (JObject)resp.result;
  71. JArray lists = ret.Value<JArray>("rows");
  72. if (lists?.Count > 0)
  73. {
  74. return lists.ToObject<T>();
  75. }
  76. else
  77. {
  78. return ret.ToObject<T>();
  79. }
  80. }
  81. if (resp.result?.GetType() == typeof(JArray))
  82. {
  83. JArray lists = (JArray)resp.result;
  84. if (lists?.Count > 0)
  85. {
  86. return lists[0].ToObject<T>();
  87. }
  88. }
  89. }
  90. return default;
  91. }
  92. class Response
  93. {
  94. public string errorCode { get; set; }
  95. public string errorMessage { get; set; }
  96. public object result { get; set; }
  97. }
  98. public static string toJsonString(object obj)
  99. {
  100. return toJsonString(obj, true);
  101. }
  102. public static string getDestProperty(JObject jo, string propertyName)
  103. {
  104. JProperty jp = jo.Property(propertyName);
  105. if (jp != null)
  106. {
  107. string jpStr = jp.ToString();
  108. string rtnResult = "{ " + jpStr + "}";
  109. return rtnResult;
  110. }
  111. else
  112. {
  113. Global.writeLog(propertyName + "的JProperty属性值为空");
  114. return "";
  115. }
  116. }
  117. /// <summary>
  118. /// 压缩JSON,占用体积减小(重载)
  119. /// </summary>
  120. /// <param name="json"></param>
  121. /// <returns></returns>
  122. public static string Compress(string json)
  123. {
  124. StringBuilder sb = new StringBuilder();
  125. using (StringReader reader = new StringReader(json))
  126. {
  127. int ch = -1;
  128. int lastch = -1;
  129. bool isQuoteStart = false;
  130. while ((ch = reader.Read()) > -1)
  131. {
  132. if ((char) lastch != '\\' && (char) ch == '\"')
  133. {
  134. if (!isQuoteStart)
  135. {
  136. isQuoteStart = true;
  137. }
  138. else
  139. {
  140. isQuoteStart = false;
  141. }
  142. }
  143. if (!Char.IsWhiteSpace((char) ch) || isQuoteStart)
  144. {
  145. sb.Append((char) ch);
  146. }
  147. lastch = ch;
  148. }
  149. }
  150. return sb.ToString();
  151. }
  152. public static string Compress(JObject jsonObj)
  153. {
  154. //https://blog.csdn.net/yangjiaosun/article/details/103717256
  155. return Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj);
  156. }
  157. /// <summary>
  158. /// 组织异常JSON串
  159. /// </summary>
  160. /// <param name="errorCode"></param>
  161. /// <param name="errorMessage"></param>
  162. /// <returns></returns>
  163. public static JObject setExceptionJson(int errorCode, string eventName, string errorMessage)
  164. {
  165. dynamic joRtn = new JObject();
  166. joRtn.errorCode = errorCode;
  167. joRtn.errorMessage = eventName + "提示:" + errorMessage;
  168. return joRtn;
  169. }
  170. /// <summary>
  171. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  172. /// </summary>
  173. /// <param name="infno"></param>
  174. /// <param name="input"></param>
  175. /// <returns></returns>
  176. public static string setCenterInpar_plain(string infno, string input)
  177. {
  178. dynamic Jo = new JObject();
  179. Jo.infno = infno;
  180. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  181. Jo.msgid = Global.curEvt.msgid;
  182. Jo.mdtrtarea_admvs = Global.inf.areaCode;
  183. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  184. Jo.recer_sys_code = Global.inf.recivedSystem;
  185. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  186. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  187. Jo.signtype = Global.inf.signatureType; ;
  188. Jo.infver = Global.inf.version; ;
  189. Jo.opter_type = Global.user.type; ;
  190. Jo.opter = Global.user.ID; ;
  191. Jo.opter_name = Global.user.name; ;
  192. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  193. Jo.fixmedins_code = Global.inf.hospitalNO;
  194. Jo.fixmedins_name = Global.inf.hospitalName;
  195. Jo.sign_no = Global.curEvt.signno;
  196. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  197. Jo.Add("input", JObject.FromObject(joInput));
  198. return Jo.ToString();
  199. }
  200. /// <summary>
  201. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  202. /// </summary>
  203. /// <param name="infno"></param>
  204. /// <param name="input"></param>
  205. /// <returns></returns>
  206. public static string setCenterInpar_plain(string infno, JObject joInput)
  207. {
  208. dynamic Jo = new JObject();
  209. Jo.infno = infno;
  210. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  211. Jo.msgid = Global.curEvt.msgid;
  212. Jo.mdtrtarea_admvs = Global.inf.areaCode;
  213. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  214. Jo.recer_sys_code = Global.inf.recivedSystem;
  215. Jo.dev_no = Global.inf.dev_no;
  216. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  217. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  218. Jo.signtype = Global.inf.signatureType; ;
  219. Jo.infver = Global.inf.version; ;
  220. Jo.opter_type = Global.user.type; ;
  221. Jo.opter = Global.user.ID; ;
  222. Jo.opter_name = Global.user.name; ;
  223. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  224. Jo.fixmedins_code = Global.inf.hospitalNO;
  225. Jo.fixmedins_name = Global.inf.hospitalName;
  226. Jo.sign_no = Global.curEvt.signno;
  227. Jo.Add("input", joInput);
  228. return Jo.ToString();
  229. }
  230. /// <summary>
  231. /// 组织中心入参
  232. /// </summary>
  233. /// <param name="infno"></param>
  234. /// <param name="input"></param>
  235. /// <returns></returns>
  236. public static string setCenterInpar(string infno, string input)
  237. {
  238. dynamic Jo = new JObject();
  239. Jo.infno = infno;
  240. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  241. Jo.msgid = Global.curEvt.msgid;
  242. Jo.mdtrtarea_admvs = Global.inf.areaCode;
  243. //哈尔滨参保地不能为空
  244. if (Global.pat.insuplc_admdvs == "")
  245. {
  246. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  247. }
  248. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  249. Jo.recer_sys_code = "heb";
  250. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  251. Jo.cainfo = Global.inf.cainfo;//
  252. Jo.signtype = "SM2"; ;
  253. Jo.infver = "v1.0";
  254. Jo.opter_type = Global.user.type; ;
  255. Jo.opter = Global.user.ID; ;
  256. Jo.opter_name = Global.user.name; ;
  257. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  258. Jo.fixmedins_code = Global.inf.hospitalNO;
  259. Jo.fixmedins_name = Global.inf.hospitalName;
  260. Jo.sign_no = Global.curEvt.signno;
  261. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  262. //Jo.Add("input", JObject.FromObject(joInput));
  263. if (!Global.IsNeedEncrypt(infno))
  264. {
  265. Jo.cainfo = "";
  266. Jo.Add("input", JObject.FromObject(joInput));
  267. }
  268. else
  269. {
  270. //加密
  271. HaErBinEncrypt hept = new HaErBinEncrypt();
  272. Global.inf.cainfo = hept.Signature(input);
  273. //Global.inf.cainfo = hept.SignatureNew(input);
  274. Jo.cainfo = Global.inf.cainfo;
  275. string encryptInput = hept.Encrypt(input);
  276. Jo.input = encryptInput.Replace("\r\n", "");
  277. }
  278. return Jo.ToString();
  279. }
  280. /// <summary>
  281. /// 组织中心入参
  282. /// </summary>
  283. /// <param name="infno"></param>
  284. /// <param name="input"></param>
  285. /// <returns></returns>
  286. public static string setCenterInpar(string infno, JObject joInput)
  287. {
  288. dynamic Jo = new JObject();
  289. Jo.infno = infno;
  290. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  291. Jo.msgid = Global.curEvt.msgid;
  292. Jo.mdtrtarea_admvs = Global.inf.areaCode;
  293. //哈尔滨参保地不能为空
  294. if (string.IsNullOrEmpty(Global.pat.insuplc_admdvs))
  295. {
  296. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  297. }
  298. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  299. Jo.recer_sys_code = "HEB";
  300. Jo.dev_no = Global.curEvt.mac;
  301. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  302. Jo.cainfo = Global.inf.cainfo;//
  303. Jo.signtype = ""; ;
  304. Jo.infver = "v1.0";
  305. Jo.opter_type = Global.user.type; ;
  306. Jo.opter = Global.user.ID; ;
  307. Jo.opter_name = Global.user.name; ;
  308. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  309. Jo.fixmedins_code = Global.inf.hospitalNO;
  310. Jo.fixmedins_name = Global.inf.hospitalName;
  311. Jo.sign_no = Global.curEvt.signno;
  312. //JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  313. //Jo.Add("input", JObject.FromObject(joInput));
  314. if (!Global.IsNeedEncrypt(infno))
  315. {
  316. Jo.cainfo = "";
  317. Jo.Add("input", JObject.FromObject(joInput));
  318. }
  319. else
  320. {
  321. //加密
  322. HaErBinEncrypt hept = new HaErBinEncrypt();
  323. string cipher = "";
  324. Global.inf.cainfo = hept.Signature(joInput.ToString());
  325. //Global.inf.cainfo = hept.SignatureNew(joInput.ToString());
  326. Jo.cainfo = Global.inf.cainfo;
  327. string encryptInput = hept.Encrypt(joInput.ToString());
  328. Jo.input = encryptInput.Replace("\r\n", "");
  329. }
  330. return Jo.ToString();
  331. }
  332. /// <summary>
  333. /// 组织中心入参-医保电子处方流转
  334. /// </summary>
  335. /// <param name="infno"></param>
  336. /// <param name="input"></param>
  337. /// <returns></returns>
  338. public static string setCenterInparPresCirNew(JObject data)
  339. {
  340. //测试密钥
  341. ////应用ID
  342. //Global.inf.appId = "813915FF19824632B0BA00C09BC6228E";
  343. ////应用秘钥
  344. //Global.inf.Secret = "35681857139049A3892969FAC640FBB4";
  345. ////应用私钥
  346. //Global.inf.privateKey = "OpYF92tMa2hxWK0e8rTM4rbiw1ZS7zlboygfkk12Xns="; //中心邮件下发
  347. ////应用公钥
  348. //Global.inf.publicKey = "BGENBjuP9EuyW6BB7tRDAeZBGyOQ/T0WeJQtbJ9BHNt1SaaoQzAy0bpATaAId+K2U2IMsv4eT689IJ2HqYcsCQo="; //中心Demo
  349. ////应用ID
  350. //Global.inf.appId = "ED2DD9A80D284799A75258C88B3980B3";
  351. ////应用秘钥
  352. //Global.inf.Secret = "81FCD21155434872BF1F9F4F080B371D";
  353. ////应用私钥
  354. //Global.inf.privateKey = "AIleEX2fsLbju1MRqYfhp0zQU5muWLAG41N3s/czA8X6"; //中心邮件下发
  355. ////应用公钥
  356. //Global.inf.publicKey = "BGENBjuP9EuyW6BB7tRDAeZBGyOQ/T0WeJQtbJ9BHNt1SaaoQzAy0bpATaAId+K2U2IMsv4eT689IJ2HqYcsCQo="; //中心Demo
  357. //Global.writeLog("密钥id:" + Global.inf.appId);
  358. //Global.writeLog("密钥key:" + Global.inf.Secret);
  359. //Global.writeLog("定点医药机构私钥:" + Global.inf.privateKey);
  360. //Global.writeLog("医保电子处方中心公钥:" + Global.inf.publicKey);
  361. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  362. //Global.inf.presCenterURL = "http://200.200.1.99:8888/epc/api"; //测试处方接口地址
  363. //Global.inf.presCenterURL = "http://200.200.1.99:8889/epc/api"; //正式处方接口地址
  364. //Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  365. string timestamp = ((long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).ToString();
  366. Global.curEvt.msgid = timestamp;
  367. JObject requestData = new JObject();
  368. requestData.Add("appId", Global.inf.PresCir.appid);
  369. //requestData.Add("version", "2.0.1");
  370. requestData.Add("encType", "SM4");
  371. requestData.Add("signType", "SM2");
  372. requestData.Add("timestamp", timestamp);
  373. //加密
  374. String encData = SMUtil.encrypt(JsonConvert.SerializeObject(data, Formatting.None), Global.inf.PresCir.appid, Global.inf.PresCir.secretKey);
  375. //Global.writeLog("入参加密前:" + "\r\n" + JsonConvert.DeserializeObject(data.ToString()) + "\r\n" + "入参加密后:" + "\r\n" + encData);
  376. JObject signDto = (JObject)JObject.Parse(JsonConvert.SerializeObject(requestData, Formatting.None));
  377. signDto.Add("data", data);
  378. //加签
  379. String signData = SMUtil.sign(signDto, Global.inf.PresCir.secretKey, Global.inf.PresCir.privateKey);
  380. Global.writeLog("签名结果:" + "\r\n" + signData);
  381. //报文
  382. requestData.Add("encData", encData);
  383. requestData.Add("signData", signData);
  384. dynamic Jo = new JObject();
  385. Jo.appId = Global.inf.PresCir.appid;
  386. //Jo.version = "2.0.1";
  387. Jo.timestamp = timestamp;
  388. Jo.encType = "SM4";
  389. Jo.signType = "SM2";
  390. Jo.signData = signDto.ToString();
  391. Jo.encData = data.ToString();
  392. Global.writeLog("加密前报文:" + "\r\n" + Jo.ToString() + "\r\n" + "加密后报文:" + "\r\n" + JsonConvert.SerializeObject(requestData, Formatting.None));
  393. //本地解密
  394. //String decData = SMUtil.decrypt(encData, Global.inf.appId, Global.inf.Secret);
  395. //Global.writeLog("解密:" + decData);
  396. //使用应用公钥(publicKey示例默认值)对本地自签名的数据进行验签示例
  397. //Boolean isVerify = SMUtil.verify(signDto, Global.inf.Secret, Global.inf.publicKey, signData);
  398. //Global.writeLog("验签:" + isVerify);
  399. return requestData.ToString();
  400. }
  401. /// <summary>
  402. /// 组织Iris入参
  403. /// </summary>
  404. /// <param name="code"></param>
  405. /// <param name="joParam"></param>
  406. /// <returns></returns>
  407. public static JObject setIrisInpar(string code, JObject joParam)
  408. {
  409. try
  410. {
  411. dynamic joInparam = new JObject();
  412. joInparam.code = code;
  413. dynamic joTmp = new JObject();
  414. JArray jaParam = new JArray();
  415. jaParam.Add(joParam);
  416. joInparam.Add("params", JArray.FromObject(jaParam));
  417. joInparam.Add("session", Global.curEvt.jaSession);
  418. return joInparam;
  419. }
  420. catch (Exception ex)
  421. {
  422. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  423. }
  424. }
  425. /// <summary>
  426. /// 组织Iris入参
  427. /// </summary>
  428. /// <param name="code"></param>
  429. /// <param name="joParam"></param>
  430. /// <returns></returns>
  431. public static JObject setIrisInpar(string code, JArray jaParams)
  432. {
  433. try
  434. {
  435. dynamic joInparam = new JObject();
  436. joInparam.code = code;
  437. dynamic joTmp = new JObject();
  438. joInparam.Add("params", jaParams);
  439. joInparam.Add("session", Global.curEvt.jaSession);
  440. return joInparam;
  441. }
  442. catch (Exception ex)
  443. {
  444. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  445. }
  446. }
  447. /// <summary>
  448. /// 解析中心返参
  449. /// </summary>
  450. /// <param name="joRtn"></param>
  451. /// <param name="errorMsg"></param>
  452. /// <returns></returns>
  453. public static int parseCenterRtnValuePresCir(JObject joRtn, out string errorMsg)
  454. {
  455. try
  456. {
  457. string errcode = getDestValue(joRtn, "errcode");
  458. string errorCode = getDestValue(joRtn, "errorCode");
  459. if (errcode != "")
  460. {
  461. errorMsg = getDestValue(joRtn, "message");
  462. return -1;
  463. }
  464. else if (errorCode != "")
  465. {
  466. errorMsg = getDestValue(joRtn, "errorMessage");
  467. return -2;
  468. }
  469. else
  470. {
  471. errorMsg = getDestValue(joRtn, "message");
  472. return int.Parse(getDestValue(joRtn, "code"));
  473. }
  474. }
  475. catch (Exception ex)
  476. {
  477. errorMsg = "解析中心返参发生异常:" + ex.Message;
  478. return -1;
  479. }
  480. }
  481. /// <summary>
  482. /// 解析中心返参
  483. /// </summary>
  484. /// <param name="joRtn"></param>
  485. /// <param name="errorMsg"></param>
  486. /// <returns></returns>
  487. public static int parseCenterRtnValue(JObject joRtn, out string errorMsg)
  488. {
  489. try
  490. {
  491. string errcode = "";
  492. string errorCode = "";
  493. string code = "";
  494. if (joRtn["code"] != null)
  495. {
  496. code = getDestValue(joRtn, "code");
  497. }
  498. if (joRtn["errcode"] != null)
  499. {
  500. errcode = getDestValue(joRtn, "errcode");
  501. }
  502. if (joRtn["errorCode"] != null)
  503. {
  504. errorCode = getDestValue(joRtn, "errorCode");
  505. }
  506. if (errcode != "")
  507. {
  508. errorMsg = getDestValue(joRtn, "errmsg");
  509. return -1;
  510. }
  511. else if (errorCode != "")
  512. {
  513. errorMsg = getDestValue(joRtn, "errorMessage");
  514. return -2;
  515. }
  516. else if (code != "")
  517. {
  518. errorMsg = getDestValue(joRtn, "message");
  519. return -3;
  520. }
  521. else
  522. {
  523. errorMsg = getDestValue(joRtn, "err_msg");
  524. return int.Parse(getDestValue(joRtn, "infcode"));
  525. }
  526. }
  527. catch (Exception ex)
  528. {
  529. errorMsg = "解析中心返参发生异常:" + ex.Message;
  530. return -1;
  531. }
  532. }
  533. /// <summary>
  534. /// 解析实名认证中心返参
  535. /// </summary>
  536. /// <param name="joRtn"></param>
  537. /// <param name="errorMsg"></param>
  538. /// <returns></returns>
  539. public static int parseRealNameRtnValue(JObject joRtn, out string errorMsg)
  540. {
  541. try
  542. {
  543. string code = "";
  544. errorMsg = "";
  545. if (joRtn["code"] != null)
  546. {
  547. code = getDestValue(joRtn, "code");
  548. }
  549. else
  550. {
  551. errorMsg = "未找到code节点";
  552. return -1;
  553. }
  554. errorMsg = getDestValue(joRtn, "msg");
  555. if (code == "0")
  556. {
  557. return -1;
  558. }
  559. else if (code == "1")
  560. {
  561. return 0;
  562. }
  563. else if (code == "2")
  564. {
  565. return 0;
  566. }
  567. else
  568. {
  569. return -1;
  570. }
  571. }
  572. catch (Exception ex)
  573. {
  574. errorMsg = "解析中心返参发生异常:" + ex.Message;
  575. return -1;
  576. }
  577. }
  578. /// <summary>
  579. /// 组织IRIS返参
  580. /// </summary>
  581. /// <param name="errorCode"></param>
  582. /// <param name="errorMessage"></param>
  583. /// <param name="joResult"></param>
  584. /// <returns></returns>
  585. public static JObject setIrisReturnValue(int errorCode, string errorMessage, JObject joResult)
  586. {
  587. try
  588. {
  589. dynamic joRtn = new JObject();
  590. joRtn.errorCode = errorCode;
  591. joRtn.errorMessage = errorMessage;
  592. joRtn.Add("result", joResult);
  593. return joRtn;
  594. }
  595. catch (Exception ex)
  596. {
  597. return setExceptionJson(-1, "setIrisReturnValue:", ex.Message);
  598. }
  599. }
  600. /// <summary>
  601. /// 解析IRIS返参
  602. /// </summary>
  603. /// <param name="joRtn"></param>
  604. /// <param name="errorMsg"></param>
  605. /// <returns></returns>
  606. public static int parseIrisRtnValue(JObject joRtn, out string errorMsg)
  607. {
  608. try
  609. {
  610. errorMsg = getDestValue(joRtn, "errorMessage");
  611. return int.Parse(getDestValue(joRtn, "errorCode"));
  612. }
  613. catch (Exception ex)
  614. {
  615. errorMsg = "解析Iris返参发生异常:" + ex.Message;
  616. return -1;
  617. }
  618. }
  619. /// <summary>
  620. /// 解析业务JSON串(业务串固定格式为{errorCode = ,errorMessage = ,result ={}})
  621. /// </summary>
  622. /// <param name="json"></param>
  623. /// <param name="errorMsg"></param>
  624. /// <returns></returns>
  625. public static int parseCenterReturnJson(JObject json, out string errorMsg)
  626. {
  627. try
  628. {
  629. errorMsg = "";
  630. if (int.Parse(json["infcode"].ToString()) != 0)
  631. {
  632. errorMsg = json["err_msg"].ToString();
  633. }
  634. return int.Parse(json["infcode"].ToString());
  635. }
  636. catch (Exception ex)
  637. {
  638. errorMsg = "parseCenterReturnJson" + ex.Message;
  639. return -1;
  640. }
  641. }
  642. }
  643. class Response
  644. {
  645. public string errorCode { get; set; }
  646. public string errorMessage { get; set; }
  647. public object result { get; set; }
  648. }
  649. }