JsonHelper.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  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. /// 组织医保调用异常JSON串
  144. /// </summary>
  145. /// <param name="infcode"></param>
  146. /// <param name="err_msg"></param>
  147. /// <returns></returns>
  148. public static JObject InsusetExceptionJson(int infcode, string eventName, string err_msg)
  149. {
  150. dynamic joRtn = new JObject();
  151. joRtn.infcode = infcode;
  152. joRtn.err_msg = eventName + "提示:" + err_msg;
  153. return joRtn;
  154. }
  155. /// <summary>
  156. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  157. /// </summary>
  158. /// <param name="infno"></param>
  159. /// <param name="input"></param>
  160. /// <returns></returns>
  161. public static string setCenterInpar_plain(string infno, string input)
  162. {
  163. dynamic Jo = new JObject();
  164. Jo.infno = infno;
  165. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  166. Jo.msgid = Global.curEvt.msgid;
  167. Jo.mdtrtarea_admvs = "620100";
  168. Global.pat.mdtrtarea_admvs = "620100";
  169. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  170. Jo.recer_sys_code = Global.inf.recivedSystem;
  171. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  172. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  173. Jo.signtype = Global.inf.signatureType; ;
  174. Jo.infver = Global.inf.version; ;
  175. Jo.opter_type = Global.user.type; ;
  176. Jo.opter = Global.user.ID; ;
  177. Jo.opter_name = Global.user.name; ;
  178. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  179. Jo.fixmedins_code = Global.inf.hospitalNO;
  180. Jo.fixmedins_name = Global.inf.hospitalName;
  181. Jo.sign_no = Global.curEvt.signno;
  182. //测试环境
  183. //Global.inf.privateKey = "2af5cca6-de33-461d-a086-6423b92abbd6";
  184. //Global.inf.Secret = "d82e88f67505b976a5781b725e9eed6da9b43601f21e7daae730a0d72c724126";
  185. //Global.inf.centerURL = "http://10.126.40.47/tst/hsa/hgs/";
  186. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  187. //正式环境
  188. Global.inf.privateKey = "0d2caf81-3c1b-4a7f-8955-d807eee0720e";
  189. Global.inf.Secret = "dc80fc02f4feac82bb0c4a6e778292c0c33e8e0389a41f5c3865963b569841ec";
  190. Global.inf.cardURL = "http://10.126.34.69/hsa-hgs-adapt/api/card/initDll";
  191. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  192. Jo.Add("input", JObject.FromObject(joInput));
  193. return Jo.ToString();
  194. }
  195. /// <summary>
  196. /// 组织中心入参(明文)。部分代码是需要解析明文入参的,为了方便增加该方法
  197. /// </summary>
  198. /// <param name="infno"></param>
  199. /// <param name="input"></param>
  200. /// <returns></returns>
  201. public static string setCenterInpar_plain(string infno, JObject joInput)
  202. {
  203. dynamic Jo = new JObject();
  204. Jo.infno = infno;
  205. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  206. Jo.msgid = Global.curEvt.msgid;
  207. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  208. Jo.mdtrtarea_admvs = "620100";
  209. Global.pat.mdtrtarea_admvs = "620100";
  210. Jo.recer_sys_code = Global.inf.recivedSystem;
  211. Jo.dev_no = Global.inf.dev_no;
  212. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  213. Jo.cainfo = Global.inf.cainfo;//设备安全信息
  214. Jo.signtype = Global.inf.signatureType; ;
  215. Jo.infver = Global.inf.version; ;
  216. Jo.opter_type = Global.user.type; ;
  217. Jo.opter = Global.user.ID; ;
  218. Jo.opter_name = Global.user.name; ;
  219. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  220. Jo.fixmedins_code = Global.inf.hospitalNO;
  221. Jo.fixmedins_name = Global.inf.hospitalName;
  222. Jo.sign_no = Global.curEvt.signno;
  223. //测试环境
  224. //Global.inf.privateKey = "2af5cca6-de33-461d-a086-6423b92abbd6";
  225. //Global.inf.Secret = "d82e88f67505b976a5781b725e9eed6da9b43601f21e7daae730a0d72c724126";
  226. //Global.inf.centerURL = "http://10.126.40.47/tst/hsa/hgs/";
  227. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  228. //正式环境
  229. Global.inf.privateKey = "0d2caf81-3c1b-4a7f-8955-d807eee0720e";
  230. Global.inf.Secret = "dc80fc02f4feac82bb0c4a6e778292c0c33e8e0389a41f5c3865963b569841ec";
  231. Global.inf.cardURL = "http://10.126.34.69/hsa-hgs-adapt/api/card/initDll";
  232. Jo.Add("input", joInput);
  233. return Jo.ToString();
  234. }
  235. /// <summary>
  236. /// 组织中心入参--签到
  237. /// </summary>
  238. /// <param name="infno"></param>
  239. /// <param name="input"></param>
  240. /// <returns></returns>
  241. public static string setCenterInpar(string infno, string input)
  242. {
  243. dynamic Jo = new JObject();
  244. Jo.infno = infno;
  245. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  246. Jo.msgid = Global.curEvt.msgid;
  247. if (Global.inf.areaCode == "")
  248. {
  249. Global.inf.areaCode = "620100";
  250. }
  251. if (Global.pat.insuplc_admdvs == "")
  252. {
  253. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  254. }
  255. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  256. Jo.mdtrtarea_admvs = "620100";
  257. Global.pat.mdtrtarea_admvs = "620100";
  258. Jo.recer_sys_code = "GanSu";
  259. Jo.dev_no = Global.curEvt.mac;
  260. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  261. Jo.cainfo = Global.inf.cainfo;
  262. Jo.signtype = "asn1"; ;
  263. Jo.infver = "v1.0";
  264. Jo.opter_type = Global.user.type; ;
  265. Jo.opter = Global.user.ID; ;
  266. Jo.opter_name = Global.user.name; ;
  267. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  268. Jo.fixmedins_code = Global.inf.hospitalNO;
  269. Jo.fixmedins_name = Global.inf.hospitalName;
  270. Jo.sign_no = Global.curEvt.signno;
  271. //测试环境
  272. //Global.inf.privateKey = "2af5cca6-de33-461d-a086-6423b92abbd6";
  273. //Global.inf.Secret = "d82e88f67505b976a5781b725e9eed6da9b43601f21e7daae730a0d72c724126";
  274. //Global.inf.centerURL = "http://10.126.40.47/tst/hsa/hgs/";
  275. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  276. //正式环境
  277. Global.inf.privateKey = "0d2caf81-3c1b-4a7f-8955-d807eee0720e";
  278. Global.inf.Secret = "dc80fc02f4feac82bb0c4a6e778292c0c33e8e0389a41f5c3865963b569841ec";
  279. Global.inf.cardURL = "http://10.126.34.69/hsa-hgs-adapt/api/card/initDll";
  280. if (input != "")
  281. {
  282. JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
  283. Jo.cainfo = "";
  284. Jo.Add("input", JObject.FromObject(joInput));
  285. }
  286. else
  287. {
  288. Jo.cainfo = "";
  289. Jo.Add("input", "");
  290. }
  291. return Jo.ToString();
  292. }
  293. /// <summary>
  294. /// 组织中心入参
  295. /// </summary>
  296. /// <param name="infno"></param>
  297. /// <param name="input"></param>
  298. /// <returns></returns>
  299. public static string setCenterInpar(string infno, JObject joInput)
  300. {
  301. dynamic Jo = new JObject();
  302. Jo.infno = infno;
  303. Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  304. Jo.msgid = Global.curEvt.msgid;
  305. if (Global.pat.insuplc_admdvs == "")
  306. {
  307. Global.pat.insuplc_admdvs = Global.inf.areaCode;
  308. }
  309. Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
  310. Jo.mdtrtarea_admvs = "620100"; //郑州 市医保、省内异地、跨省异地就医地都传419900
  311. Global.pat.mdtrtarea_admvs = "620100";
  312. Jo.recer_sys_code = "GanSu";
  313. Jo.dev_no = Global.curEvt.mac;
  314. Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
  315. Jo.cainfo = Global.inf.cainfo;//
  316. Jo.signtype = "asn1"; ;
  317. Jo.infver = "v1.0";
  318. Jo.opter_type = Global.user.type; ;
  319. Jo.opter = Global.user.ID;
  320. Jo.opter_name = Global.user.name; ;
  321. Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  322. Jo.fixmedins_code = Global.inf.hospitalNO;
  323. Jo.fixmedins_name = Global.inf.hospitalName;
  324. Jo.sign_no = Global.curEvt.signno;
  325. Jo.cainfo = "";
  326. Jo.Add("input", JObject.FromObject(joInput));
  327. //测试环境
  328. //Global.inf.privateKey = "2af5cca6-de33-461d-a086-6423b92abbd6";
  329. //Global.inf.Secret = "d82e88f67505b976a5781b725e9eed6da9b43601f21e7daae730a0d72c724126";
  330. //Global.inf.centerURL = "http://10.126.40.47/tst/hsa/hgs/";
  331. //Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  332. //正式环境
  333. Global.inf.privateKey = "0d2caf81-3c1b-4a7f-8955-d807eee0720e";
  334. Global.inf.Secret = "dc80fc02f4feac82bb0c4a6e778292c0c33e8e0389a41f5c3865963b569841ec";
  335. Global.inf.cardURL = "http://10.126.34.69/hsa-hgs-adapt/api/card/initDll";
  336. return Jo.ToString();
  337. }
  338. /// <summary>
  339. /// 组织中心入参-医保电子处方流转
  340. /// </summary>
  341. /// <param name="infno"></param>
  342. /// <param name="input"></param>
  343. /// <returns></returns>
  344. public static string setCenterInparPresCirNew(JObject data)
  345. {
  346. #region【测试环境】
  347. /*
  348. //应用ID
  349. Global.inf.appId = "6582E8493AFE477BB7C6F3A46B5CEB1A";
  350. //Global.inf.appId = "57E2D561E97141A3871DEFB410ADD920";
  351. //应用秘钥
  352. Global.inf.Secret = "AD3731D4509A4186A177B8701DB4069F";
  353. //Global.inf.Secret = "F30D0D261BA04063A0BCAEF19F8ADBCC";
  354. //应用私钥
  355. Global.inf.privateKey = "ANxsfa0qU4Oc4WBG/oA41Z4+goGfJW/ovzz47VQcunKd"; //中心邮件下发
  356. //Global.inf.privateKey = "AKyhfvPbT+tIJHJkZSDILrw7t+FOG1U58UcupYYTzCOj"; //中心Demo
  357. //应用公钥
  358. //Global.inf.publicKey = "BKRejz4MwM8G8Krc4hyIIvhphvwrQpnHIsGWTd0sn0TJYr2eKJGAv87AKnrT8pL50H6hdVHdU0FFaL18GApDEbU"; //中心邮件下发
  359. Global.inf.publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w="; //中心Demo
  360. Global.inf.cardURL = "http://10.126.105.66/hsa-hgs-adapt/api/card/initDll"; //测试环境
  361. Global.inf.presCenterURL = "http://10.126.40.12:8080/epc/api";
  362. */
  363. #endregion
  364. #region【正式环境】
  365. if (Global.inf.interfaceDr == 21) //兰2
  366. {
  367. //应用ID
  368. Global.inf.appId = "4D967CAB5DA44E3583F4246D7FE897F0";
  369. //应用秘钥
  370. Global.inf.Secret = "586BD24D03E5481C8AE4FE9DD8424FFE";
  371. //应用私钥
  372. Global.inf.privateKey = "XTbX+Tt1np5Fma0+twhYi+vtM4J0UJ8VX5fFEZ7t/ro=";
  373. //应用公钥
  374. Global.inf.publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w=";
  375. }
  376. else if (Global.inf.interfaceDr == 25) //兰1
  377. {
  378. //应用ID
  379. Global.inf.appId = "6C9B786AF7E848B29B0EF5783D630263";
  380. //应用秘钥
  381. Global.inf.Secret = "6055AE5A9CAD4D9BA8A98EB20431364E";
  382. //应用私钥
  383. Global.inf.privateKey = "AKReZmOYcTOdbrnlZZFIXn8LQSHPzdAK1Q0CXDnE4Jhk";
  384. //应用公钥
  385. Global.inf.publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w=";
  386. }
  387. Global.inf.presCenterURL = "http://10.126.34.36:8080/epc/api";
  388. #endregion
  389. Global.writeLog("密钥id:" + Global.inf.appId);
  390. Global.writeLog("密钥key:" + Global.inf.Secret);
  391. Global.writeLog("定点医药机构私钥:" + Global.inf.privateKey);
  392. Global.writeLog("医保电子处方中心公钥:" + Global.inf.publicKey);
  393. //Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
  394. string timestamp = ((long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).ToString();
  395. Global.curEvt.msgid = timestamp;
  396. JObject requestData = new JObject();
  397. requestData.Add("appId", Global.inf.appId);
  398. //requestData.Add("version", "2.0.1");
  399. requestData.Add("encType", "SM4");
  400. requestData.Add("signType", "SM2");
  401. requestData.Add("timestamp", timestamp);
  402. //加密
  403. String encData = SMUtil.encrypt(JsonConvert.SerializeObject(data, Formatting.None), Global.inf.appId, Global.inf.Secret);
  404. //Global.writeLog("入参加密前:" + "\r\n" + JsonConvert.DeserializeObject(data.ToString()) + "\r\n" + "入参加密后:" + "\r\n" + encData);
  405. JObject signDto = (JObject)JObject.Parse(JsonConvert.SerializeObject(requestData, Formatting.None));
  406. signDto.Add("data", data);
  407. //加签
  408. String signData = SMUtil.sign(signDto, Global.inf.Secret, Global.inf.privateKey);
  409. Global.writeLog("签名结果:" + "\r\n" + signData);
  410. //报文
  411. requestData.Add("encData", encData);
  412. requestData.Add("signData", signData);
  413. dynamic Jo = new JObject();
  414. Jo.appId = Global.inf.appId;
  415. //Jo.version = "2.0.1";
  416. Jo.timestamp = timestamp;
  417. Jo.encType = "SM4";
  418. Jo.signType = "SM2";
  419. Jo.signData = signDto.ToString();
  420. Jo.encData = data.ToString();
  421. Global.writeLog("加密前报文:" + "\r\n" + Jo.ToString() + "\r\n" + "加密后报文:" + "\r\n" + JsonConvert.SerializeObject(requestData, Formatting.None));
  422. //本地解密
  423. //String decData = SMUtil.decrypt(encData, Global.inf.appId, Global.inf.Secret);
  424. //Global.writeLog("解密:" + decData);
  425. //使用应用公钥(publicKey示例默认值)对本地自签名的数据进行验签示例
  426. //Boolean isVerify = SMUtil.verify(signDto, Global.inf.Secret, Global.inf.publicKey, signData);
  427. //Global.writeLog("验签:" + isVerify);
  428. return requestData.ToString();
  429. }
  430. /// <summary>
  431. /// 组织Iris入参
  432. /// </summary>
  433. /// <param name="code"></param>
  434. /// <param name="joParam"></param>
  435. /// <returns></returns>
  436. public static JObject setIrisInpar(string code, JObject joParam)
  437. {
  438. try
  439. {
  440. dynamic joInparam = new JObject();
  441. joInparam.code = code;
  442. dynamic joTmp = new JObject();
  443. JArray jaParam = new JArray();
  444. jaParam.Add(joParam);
  445. joInparam.Add("params", JArray.FromObject(jaParam));
  446. joInparam.Add("session", Global.curEvt.jaSession);
  447. return joInparam;
  448. }
  449. catch (Exception ex)
  450. {
  451. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  452. }
  453. }
  454. /// <summary>
  455. /// 组织Iris入参
  456. /// </summary>
  457. /// <param name="code"></param>
  458. /// <param name="joParam"></param>
  459. /// <returns></returns>
  460. public static JObject setIrisInpar(string code, JArray jaParams)
  461. {
  462. try
  463. {
  464. dynamic joInparam = new JObject();
  465. joInparam.code = code;
  466. dynamic joTmp = new JObject();
  467. joInparam.Add("params", jaParams);
  468. joInparam.Add("session", Global.curEvt.jaSession);
  469. return joInparam;
  470. }
  471. catch (Exception ex)
  472. {
  473. return setExceptionJson(-1, "setIrisInpar:", ex.Message);
  474. }
  475. }
  476. /// <summary>
  477. /// 解析中心返参
  478. /// </summary>
  479. /// <param name="joRtn"></param>
  480. /// <param name="errorMsg"></param>
  481. /// <returns></returns>
  482. public static int parseCenterRtnValuePresCir(JObject joRtn, out string errorMsg)
  483. {
  484. try
  485. {
  486. string errcode = getDestValue(joRtn, "errcode");
  487. string errorCode = getDestValue(joRtn, "errorCode");
  488. if (errcode != "")
  489. {
  490. errorMsg = getDestValue(joRtn, "message");
  491. return -1;
  492. }
  493. else if (errorCode != "")
  494. {
  495. errorMsg = getDestValue(joRtn, "errorMessage");
  496. return -2;
  497. }
  498. else
  499. {
  500. errorMsg = getDestValue(joRtn, "message");
  501. return int.Parse(getDestValue(joRtn, "code"));
  502. }
  503. }
  504. catch (Exception ex)
  505. {
  506. errorMsg = "解析中心返参发生异常:" + ex.Message;
  507. return -1;
  508. }
  509. }
  510. /// <summary>
  511. /// 解析中心返参
  512. /// </summary>
  513. /// <param name="joRtn"></param>
  514. /// <param name="errorMsg"></param>
  515. /// <returns></returns>
  516. public static int parseCenterRtnValue(JObject joRtn, out string errorMsg)
  517. {
  518. try
  519. {
  520. string errcode = getDestValue(joRtn, "errcode");
  521. string errorCode = getDestValue(joRtn, "errorCode");
  522. if (errcode != "")
  523. {
  524. errorMsg = getDestValue(joRtn, "errmsg");
  525. return -1;
  526. }
  527. else if (errorCode != "")
  528. {
  529. errorMsg = getDestValue(joRtn, "errorMessage");
  530. return -2;
  531. }
  532. else
  533. {
  534. errorMsg = getDestValue(joRtn, "err_msg");
  535. return int.Parse(getDestValue(joRtn, "infcode"));
  536. }
  537. }
  538. catch (Exception ex)
  539. {
  540. errorMsg = "解析中心返参发生异常:" + ex.Message;
  541. return -1;
  542. }
  543. }
  544. /// <summary>
  545. /// 组织IRIS返参
  546. /// </summary>
  547. /// <param name="errorCode"></param>
  548. /// <param name="errorMessage"></param>
  549. /// <param name="joResult"></param>
  550. /// <returns></returns>
  551. public static JObject setIrisReturnValue(int errorCode, string errorMessage, JObject joResult)
  552. {
  553. try
  554. {
  555. dynamic joRtn = new JObject();
  556. joRtn.errorCode = errorCode;
  557. joRtn.errorMessage = errorMessage;
  558. joRtn.Add("result", joResult);
  559. return joRtn;
  560. }
  561. catch (Exception ex)
  562. {
  563. return setExceptionJson(-1, "setIrisReturnValue:", ex.Message);
  564. }
  565. }
  566. /// <summary>
  567. /// 解析IRIS返参
  568. /// </summary>
  569. /// <param name="joRtn"></param>
  570. /// <param name="errorMsg"></param>
  571. /// <returns></returns>
  572. public static int parseIrisRtnValue(JObject joRtn, out string errorMsg)
  573. {
  574. try
  575. {
  576. errorMsg = getDestValue(joRtn, "errorMessage");
  577. return int.Parse(getDestValue(joRtn, "errorCode"));
  578. }
  579. catch (Exception ex)
  580. {
  581. errorMsg = "解析Iris返参发生异常:" + ex.Message;
  582. return -1;
  583. }
  584. }
  585. /// <summary>
  586. /// 解析业务JSON串(业务串固定格式为{errorCode = ,errorMessage = ,result ={}})
  587. /// </summary>
  588. /// <param name="json"></param>
  589. /// <param name="errorMsg"></param>
  590. /// <returns></returns>
  591. public static int parseCenterReturnJson(JObject json, out string errorMsg)
  592. {
  593. try
  594. {
  595. errorMsg = "";
  596. if (int.Parse(json["infcode"].ToString()) != 0)
  597. {
  598. errorMsg = json["err_msg"].ToString();
  599. }
  600. return int.Parse(json["infcode"].ToString());
  601. }
  602. catch (Exception ex)
  603. {
  604. errorMsg = "parseCenterReturnJson" + ex.Message;
  605. return -1;
  606. }
  607. }
  608. /// <summary>
  609. /// 移动支付组织中心入参
  610. /// </summary>
  611. /// <param name="infno"></param>
  612. /// <param name="input"></param>
  613. /// <returns></returns>
  614. public static string setMPCenterInpar(string infno, string txtData)
  615. {
  616. EncryptHelper encrypt = new EncryptHelper();
  617. string plainText = SignUtil.SortInput(JObject.Parse(txtData));
  618. string signData = "";
  619. string output = encrypt.encrypt(txtData, ref signData);
  620. return output;
  621. }
  622. public static string setMPCenterInpar(string infno, JObject joInput)
  623. {
  624. return setMPCenterInpar(infno, joInput.ToString());
  625. }
  626. /// <summary>
  627. /// 解析移动返参
  628. /// </summary>
  629. /// <param name="joRtn"></param>
  630. /// <param name="errorMsg"></param>
  631. /// <returns></returns>
  632. public static int parseMPRtnValue(JObject joRtn, out string errorMsg)
  633. {
  634. try
  635. {
  636. string success = getDestValue(joRtn, "success");
  637. string message = getDestValue(joRtn, "message");
  638. string encData = getDestValue(joRtn, "encData");
  639. //Global.writeLog("success:" + success);
  640. if (success != "True")
  641. {
  642. errorMsg = message;
  643. return -1;
  644. }
  645. else
  646. {
  647. errorMsg = joRtn.ToString();
  648. return 0;
  649. }
  650. }
  651. catch (Exception ex)
  652. {
  653. errorMsg = "解析中心返参发生异常:" + ex.Message;
  654. return -1;
  655. }
  656. }
  657. }
  658. }