JsonHelper.cs 27 KB

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