PublicImportDataService.cs 78 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Security.Cryptography;
  5. using System.Web;
  6. using System.Linq;
  7. using System.Text.RegularExpressions;
  8. using MySystem.Models;
  9. using Library;
  10. using LitJson;
  11. using System.Security.Cryptography.X509Certificates;
  12. using Org.BouncyCastle.Security;
  13. using Org.BouncyCastle.Crypto.Parameters;
  14. using System.Text;
  15. using Org.BouncyCastle.Crypto;
  16. using Org.BouncyCastle.Math;
  17. using System.Net.Http;
  18. using System.Threading.Tasks;
  19. using System.Threading;
  20. namespace MySystem
  21. {
  22. public class PublicImportDataService
  23. {
  24. public readonly static PublicImportDataService Instance = new PublicImportDataService();
  25. private PublicImportDataService()
  26. { }
  27. public void Start(JobMqMsg jobInfo)
  28. {
  29. string data = "";
  30. try
  31. {
  32. string orderString = jobInfo.OrderString;
  33. if (!string.IsNullOrEmpty(orderString))
  34. {
  35. string key = orderString.Split(':')[1];
  36. int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
  37. bool op = true;
  38. while (op)
  39. {
  40. try
  41. {
  42. data = RedisDbconn.Instance.RPop<string>(key);
  43. if (data != null)
  44. {
  45. string content = "";
  46. if (data.Contains("#cut#"))
  47. {
  48. string[] dataList = data.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
  49. JsonData jsonData = JsonMapper.ToObject(dataList[1]);
  50. if (BrandId == 1)
  51. {
  52. content = Decrypt(jsonData["param"].ToString());
  53. AppendLog(dataList[0], content, BrandId);
  54. InsertData(key, content, jobInfo, BrandId);
  55. }
  56. else if (BrandId == 27)
  57. {
  58. content = LkbDecrypt(jsonData["param"].ToString());
  59. AppendLog(dataList[0], content, BrandId);
  60. InsertData(key, content, jobInfo, BrandId);
  61. }
  62. else if (BrandId == 2)
  63. {
  64. content = KDBDecrypt(jsonData["content"].ToString());
  65. AppendLog(dataList[0], content, BrandId);
  66. if (content.StartsWith("[") && content.EndsWith("]"))
  67. {
  68. content = content.Replace("null", "\"\"");
  69. content = content.Replace("NULL", "\"\"");
  70. JsonData list = JsonMapper.ToObject(content);
  71. for (int i = 0; i < list.Count; i++)
  72. {
  73. InsertData(key, list[i].ToJson(), jobInfo, BrandId);
  74. }
  75. }
  76. else
  77. {
  78. InsertData(key, content, jobInfo, BrandId);
  79. }
  80. }
  81. else if (BrandId == 4)
  82. {
  83. content = LSDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString());
  84. AppendLog(dataList[0], content, BrandId);
  85. InsertData(key, content, jobInfo, BrandId);
  86. }
  87. else if (BrandId == 8 || BrandId == 9)
  88. {
  89. content = HKDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString(), BrandId);
  90. AppendLog(dataList[0], content, BrandId);
  91. InsertData(key, content, jobInfo, BrandId);
  92. }
  93. else if (BrandId == 10)
  94. {
  95. content = LDDecrypt(jsonData["data"].ToString());
  96. AppendLog(dataList[0], content, BrandId);
  97. InsertData(key, content, jobInfo, BrandId);
  98. }
  99. else if (BrandId == 34)
  100. {
  101. string aesKey = jsonData["encryptKey"].ToString();
  102. aesKey = LDZZBDecrypt(aesKey);
  103. content = AesDecrypt(jsonData["data"].ToString(), aesKey);
  104. AppendLog(dataList[0], content, BrandId);
  105. InsertData(key, content, jobInfo, BrandId);
  106. }
  107. else if (BrandId == 12)
  108. {
  109. content = dataList[1];
  110. JsonData header = JsonMapper.ToObject(dataList[0]);
  111. string signstr = header["X-Sign"][0].ToString();
  112. SortedList<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string>>(content);
  113. string sign = function.BuildQueryString(dic);
  114. bool checkSign = BoxVerifySign(sign, signstr);
  115. if(checkSign)
  116. {
  117. AppendLog(dataList[0], content, BrandId);
  118. InsertData(key, content, jobInfo, BrandId);
  119. }
  120. }
  121. else if (BrandId == 15 || BrandId == 17)
  122. {
  123. content = PosPDecrypt(jsonData["content"].ToString(), jsonData["sign"].ToString());
  124. if(!string.IsNullOrEmpty(content))
  125. {
  126. AppendLog(dataList[0], content, BrandId);
  127. InsertData(key, content, jobInfo, BrandId);
  128. }
  129. }
  130. else if (BrandId == 30)
  131. {
  132. content = LklDecrypt(jsonData["data"].ToString());
  133. if(!string.IsNullOrEmpty(content))
  134. {
  135. AppendLog(dataList[0], content, BrandId);
  136. InsertData(key, content, jobInfo, BrandId);
  137. }
  138. }
  139. else if (BrandId == 38)
  140. {
  141. content = dataList[1];
  142. if(key.Contains("merchantinfo"))
  143. {
  144. JsonData jsonContent = JsonMapper.ToObject(content);
  145. string sign = jsonContent["sign"].ToString();
  146. sign = XyfSM2Decrypt(sign);
  147. string reqdata = jsonContent["reqdatajson"]["reqdata"].ToString();
  148. string reqdatajson = XyfSM4Decrypt(reqdata, sign);
  149. content = content.Replace("\"" + reqdata + "\"", reqdatajson);
  150. }
  151. InsertData(key, content, jobInfo, BrandId);
  152. }
  153. else
  154. {
  155. content = dataList[1];
  156. InsertData(key, content, jobInfo, BrandId);
  157. }
  158. if (dataList.Length > 2)
  159. {
  160. string fileName = dataList[2];
  161. if (System.IO.File.Exists(function.getPath("/redis/" + key + "/" + fileName + ".txt")))
  162. {
  163. System.IO.File.Delete(function.getPath("/redis/" + key + "/" + fileName + ".txt"));
  164. }
  165. }
  166. }
  167. }
  168. else
  169. {
  170. // op = false;
  171. Thread.Sleep(function.get_Random(3000, 5000));
  172. }
  173. }
  174. catch (Exception ex)
  175. {
  176. Utils.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), key + "队列异常");
  177. Start(jobInfo);
  178. Thread.Sleep(60000);
  179. }
  180. }
  181. }
  182. }
  183. catch (Exception ex)
  184. {
  185. LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), "public_import_service");
  186. Start(jobInfo);
  187. }
  188. }
  189. private void AppendLog(string header, string content, int BrandId)
  190. {
  191. string BrandName = "";
  192. if (BrandId == 1)
  193. {
  194. BrandName = "金控";
  195. }
  196. else if (BrandId == 2)
  197. {
  198. BrandName = "开店宝";
  199. }
  200. else if (BrandId == 4)
  201. {
  202. BrandName = "乐刷";
  203. }
  204. else if (BrandId == 6)
  205. {
  206. BrandName = "立刷";
  207. }
  208. else if (BrandId == 22)
  209. {
  210. BrandName = "立刷微电签";
  211. }
  212. else if (BrandId == 8)
  213. {
  214. BrandName = "海科电签";
  215. }
  216. else if (BrandId == 9)
  217. {
  218. BrandName = "海科大POS";
  219. }
  220. else if (BrandId == 10)
  221. {
  222. BrandName = "联动电签";
  223. }
  224. else if (BrandId == 12)
  225. {
  226. BrandName = "盒易付";
  227. }
  228. else if (BrandId == 15)
  229. {
  230. BrandName = "联客宝";
  231. }
  232. else if (BrandId == 30)
  233. {
  234. BrandName = "拉卡拉";
  235. }
  236. else if (BrandId == 34)
  237. {
  238. BrandName = "联动掌中宝";
  239. }
  240. LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + header + "\r\n" + content, BrandName + "推送消息");
  241. }
  242. public void InsertData(string key, string content, JobMqMsg jobInfo, int BrandId)
  243. {
  244. string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
  245. // 商户入库
  246. if (key.Contains("_changebind_"))
  247. {
  248. int IdNum = int.Parse(Id);
  249. WebCMSEntities db = new WebCMSEntities();
  250. BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
  251. if (bind != null)
  252. {
  253. // string ProductType = BrandId.ToString();
  254. // bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
  255. // if (!check)
  256. // {
  257. db.Merchants.Add(new Merchants()
  258. {
  259. CreateDate = DateTime.Now,
  260. UpdateDate = DateTime.Now,
  261. MerNo = bind.MerNo, //商户编号
  262. MerName = bind.MerName, //商户名称
  263. AgentName = bind.AgentName, //机构名称
  264. ProductType = BrandId.ToString(), //产品类型
  265. Remark = "商户入库", //注释
  266. CreateTime = DateTime.Now, //创建时间
  267. UpdateTime = DateTime.Now, //更新时间
  268. SnNo = bind.MerSnNo, //SN号
  269. MerMobile = bind.MerNewSnNo,
  270. MerIdcardNo = bind.SeoKeyword,
  271. SeoTitle = bind.SeoTitle,
  272. Field1 = bind.MerOperateType,
  273. Field2 = bind.Field1,
  274. Status = 1,
  275. });
  276. db.SaveChanges();
  277. // }
  278. }
  279. db.Dispose();
  280. }
  281. try
  282. {
  283. // PublicImportDataServiceRds.Instance.DoQueue(content, jobInfo.BrandInfo, BrandId);
  284. }
  285. catch{}
  286. }
  287. public void Test(JobMqMsg jobInfo, string date, int kind)
  288. {
  289. try
  290. {
  291. string orderString = jobInfo.OrderString;
  292. if (!string.IsNullOrEmpty(orderString))
  293. {
  294. string key = orderString.Split(':')[1];
  295. int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
  296. string source = function.ReadInstance("/log/金控推送消息/" + date.Replace("-", "/") + "/content.log");
  297. string patten = "";
  298. if (kind == 1)
  299. {
  300. patten = "{.*?绑定.*?}]\"}";
  301. }
  302. else if (kind == 2)
  303. {
  304. patten = "{.*?2022年飞天系列-小宝电签.*?}";
  305. }
  306. else if (kind == 3)
  307. {
  308. patten = "{.*?otherFee.*?}";
  309. }
  310. if (!string.IsNullOrEmpty(patten))
  311. {
  312. MatchCollection mc = Regex.Matches(source, patten); //交易
  313. foreach (Match sub in mc)
  314. {
  315. string content = sub.Value;
  316. string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
  317. // 商户入库
  318. if (key.Contains("_bind_"))
  319. {
  320. int IdNum = int.Parse(Id);
  321. WebCMSEntities db = new WebCMSEntities();
  322. BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
  323. if (bind != null)
  324. {
  325. string ProductType = BrandId.ToString();
  326. bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
  327. if (!check)
  328. {
  329. db.Merchants.Add(new Merchants()
  330. {
  331. CreateDate = DateTime.Now,
  332. UpdateDate = DateTime.Now,
  333. MerNo = bind.MerNo, //商户编号
  334. MerName = bind.MerName, //商户名称
  335. AgentName = bind.AgentName, //机构名称
  336. ProductType = BrandId.ToString(), //产品类型
  337. Remark = "商户入库", //注释
  338. CreateTime = DateTime.Now, //创建时间
  339. UpdateTime = DateTime.Now, //更新时间
  340. SnNo = bind.MerSnNo, //SN号
  341. MerMobile = bind.MerNewSnNo,
  342. MerIdcardNo = bind.SeoKeyword,
  343. Status = 1,
  344. });
  345. db.SaveChanges();
  346. }
  347. }
  348. db.Dispose();
  349. }
  350. }
  351. }
  352. }
  353. }
  354. catch (Exception ex)
  355. {
  356. LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_import_service");
  357. }
  358. }
  359. public string DoQueue(string data, Brand brand, int BrandId = 1)
  360. {
  361. if (string.IsNullOrEmpty(data))
  362. {
  363. return "0";
  364. }
  365. //数据开始入库
  366. data = data.Replace("null", "\"\"");
  367. JsonData jsonObj = JsonMapper.ToObject(data);
  368. string fields = "ProductType,";
  369. string fieldvals = BrandId + ",";
  370. fields += "SeoDescription,";
  371. fieldvals += "'" + HttpUtility.UrlEncode(data) + "',";
  372. if (!brand.IsCheck)
  373. {
  374. fields += "Status,";
  375. fieldvals += "1,";
  376. }
  377. string sourceCheckKey = "";
  378. foreach (FieldRelationTable field in brand.FieldRelation)
  379. {
  380. string fType = field.TargetFieldType;
  381. string fName = field.TargetFieldName;
  382. string sName = field.SourceFieldName;
  383. string val = "";
  384. if(sName == "#{now}#")
  385. {
  386. val = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  387. }
  388. else if (sName.Contains(",") && sName.Contains("|"))
  389. {
  390. string[] dlist = sName.Split('|');
  391. foreach(string subd in dlist)
  392. {
  393. string[] flist = subd.Split(',');
  394. if (flist.Length == 2)
  395. {
  396. if (data.Contains("\"" + flist[1] + "\"") && jsonObj[flist[0]].ToJson().Contains("\"" + flist[1] + "\""))
  397. {
  398. val += jsonObj[flist[0]][flist[1]].ToString();
  399. }
  400. }
  401. else if (flist.Length == 3)
  402. {
  403. if (data.Contains("\"" + flist[2] + "\"") && jsonObj[flist[0]].ToJson().Contains("\"" + flist[1] + "\"") && jsonObj[flist[0]][flist[1]].ToJson().Contains("\"" + flist[2] + "\""))
  404. {
  405. val += jsonObj[flist[0]][flist[1]][flist[2]].ToString();
  406. }
  407. }
  408. }
  409. }
  410. else if (sName.Contains(","))
  411. {
  412. string[] flist = sName.Split(',');
  413. if (flist.Length == 2)
  414. {
  415. if (data.Contains("\"" + flist[1] + "\"") && jsonObj[flist[0]].ToJson().Contains("\"" + flist[1] + "\""))
  416. {
  417. val = jsonObj[flist[0]][flist[1]].ToString();
  418. }
  419. }
  420. else if (flist.Length == 3)
  421. {
  422. if (data.Contains("\"" + flist[2] + "\"") && jsonObj[flist[0]].ToJson().Contains("\"" + flist[1] + "\"") && jsonObj[flist[0]][flist[1]].ToJson().Contains("\"" + flist[2] + "\""))
  423. {
  424. val = jsonObj[flist[0]][flist[1]][flist[2]].ToString();
  425. }
  426. }
  427. }
  428. else
  429. {
  430. if (data.Contains("\"" + sName + "\""))
  431. {
  432. val = jsonObj[sName].ToString();
  433. }
  434. }
  435. string checkFields = "," + brand.CheckKey + ",";
  436. // if (fName == brand.CheckKey)
  437. if (checkFields.Contains("," + fName + ","))
  438. {
  439. if (fType == "number")
  440. {
  441. sourceCheckKey += " and " + fName + "=" + decimal.Parse(function.CheckNum(val)) + "";
  442. }
  443. else if (fType == "date")
  444. {
  445. sourceCheckKey += " and " + fName + "='" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "'";
  446. }
  447. else if (fType == "timestempms")
  448. {
  449. sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
  450. }
  451. else if (fType == "timestemps")
  452. {
  453. sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
  454. }
  455. else if (fType == "timestring")
  456. {
  457. string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
  458. sourceCheckKey += " and " + fName + "='" + datetime + "'";
  459. }
  460. else
  461. {
  462. sourceCheckKey += " and " + fName + "='" + val + "'";
  463. }
  464. }
  465. fields += fName + ",";
  466. if (fType == "number")
  467. {
  468. fieldvals += decimal.Parse(function.CheckNum(val)) + ",";
  469. }
  470. else if (fType == "date")
  471. {
  472. fieldvals += "'" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "',";
  473. }
  474. else if (fType == "timestempms")
  475. {
  476. fieldvals += "'" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
  477. }
  478. else if (fType == "timestemps")
  479. {
  480. fieldvals += "'" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
  481. }
  482. else if (fType == "timestring")
  483. {
  484. string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
  485. fieldvals += "'" + datetime + "',";
  486. }
  487. else
  488. {
  489. fieldvals += "'" + val + "',";
  490. }
  491. }
  492. string checksql = "select Id from " + brand.TargetTableName + " where ProductType='" + BrandId + "'" + sourceCheckKey;
  493. if(brand.TargetTableName == "BindRecord")
  494. {
  495. string Id = RedisDbconn.Instance.Get<string>("BindRecordIdLimit");
  496. if(string.IsNullOrEmpty(Id)) Id = "700000";
  497. checksql += " and Id>" + Id;
  498. }
  499. else if(brand.TargetTableName == "ActivateRecord")
  500. {
  501. string Id = RedisDbconn.Instance.Get<string>("ActivateRecordIdLimit");
  502. if(string.IsNullOrEmpty(Id)) Id = "500000";
  503. checksql += " and Id>" + Id;
  504. }
  505. else if(brand.TargetTableName == "TradeFluxRecord")
  506. {
  507. string Id = RedisDbconn.Instance.Get<string>("TradeFluxRecordIdLimit");
  508. if(string.IsNullOrEmpty(Id)) Id = "400000";
  509. checksql += " and Id>" + Id;
  510. }
  511. if(brand.TargetTableName == "TradeRecord")
  512. {
  513. // checksql = "select Id from " + brand.TargetTableName + " where Id>1520000 and ProductType='" + BrandId + "'" + sourceCheckKey;
  514. checksql = "select Id from TradeRecord where Id=0";
  515. }
  516. DataTable dt = dbconn.dtable(checksql);
  517. if (dt.Rows.Count < 1)
  518. {
  519. fields = fields.TrimEnd(',');
  520. fieldvals = fieldvals.TrimEnd(',');
  521. if(!fields.Contains("CreateDate"))
  522. {
  523. fields += ",CreateDate";
  524. fieldvals += ",'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
  525. }
  526. string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ");select @@IDENTITY";
  527. dbconn.op(sql);
  528. PushData(brand.TargetTableName, fields, fieldvals);
  529. if(brand.TargetTableName == "BindRecord")
  530. {
  531. string[] fieldList = fields.Split(',');
  532. string[] fieldValList = fieldvals.Split(',');
  533. string mer_field = "CreateDate,UpdateDate,Remark,CreateTime,UpdateTime,Status";
  534. string mer_val = "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','商户入库','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',1";
  535. int index = 0;
  536. foreach(string field in fieldList)
  537. {
  538. if(field == "MerNo")
  539. {
  540. mer_field += ",MerNo";
  541. mer_val += "," + fieldValList[index];
  542. }
  543. if(field == "MerName")
  544. {
  545. mer_field += ",MerName";
  546. mer_val += "," + fieldValList[index];
  547. }
  548. if(field == "AgentName")
  549. {
  550. mer_field += ",AgentName";
  551. mer_val += "," + fieldValList[index];
  552. }
  553. if(field == "ProductType")
  554. {
  555. mer_field += ",ProductType";
  556. mer_val += "," + fieldValList[index];
  557. }
  558. if(field == "MerSnNo")
  559. {
  560. mer_field += ",SnNo";
  561. mer_val += "," + fieldValList[index];
  562. }
  563. if(field == "MerNewSnNo")
  564. {
  565. mer_field += ",MerMobile";
  566. mer_val += "," + fieldValList[index];
  567. }
  568. if(field == "SeoKeyword")
  569. {
  570. mer_field += ",MerIdcardNo";
  571. mer_val += "," + fieldValList[index];
  572. }
  573. if(field == "SeoTitle")
  574. {
  575. mer_field += ",SeoTitle";
  576. mer_val += "," + fieldValList[index];
  577. }
  578. if(field == "MerOperateType")
  579. {
  580. mer_field += ",Field1";
  581. mer_val += "," + fieldValList[index];
  582. }
  583. if(field == "Field1")
  584. {
  585. mer_field += ",Field2";
  586. mer_val += "," + fieldValList[index];
  587. }
  588. index += 1;
  589. }
  590. sql = "insert into Merchants (" + mer_field + ") values (" + mer_val + ");";
  591. dbconn.op(sql);
  592. PushData("Merchants", mer_field, mer_val);
  593. }
  594. DataTable result = dbconn.dtable("select Id from " + brand.TargetTableName + " order by Id desc limit 1");
  595. if (result.Rows.Count > 0)
  596. {
  597. return result.Rows[0][0].ToString();
  598. }
  599. }
  600. else
  601. {
  602. if(brand.TargetTableName == "BindRecord" && BrandId == 30)
  603. {
  604. function.WriteLog(checksql, "拉卡拉重复绑定日志");
  605. }
  606. }
  607. return "0";
  608. }
  609. public void PushData(string tableName, string fields, string fieldvals)
  610. {
  611. try
  612. {
  613. Dictionary<string, string> spData = new Dictionary<string, string>();
  614. Dictionary<string, string> mainData = new Dictionary<string, string>();
  615. string[] fieldList = fields.Split(',');
  616. if(fieldList.Length > 0)
  617. {
  618. string[] fieldValList = fieldvals.Split(',');
  619. for (int i = 0; i < fieldList.Length; i++)
  620. {
  621. string fieldItem = fieldList[i];
  622. string fieldValItem = fieldValList[i].Trim('\'');
  623. mainData.Add(fieldItem, fieldValItem);
  624. if(fieldItem == "CreateDate" && !fields.Contains("CreateTime")) fieldItem = "createTime";
  625. if(fieldItem == "UpdateDate" && !fields.Contains("UpdateTime")) fieldItem = "updateTime";
  626. spData.Add(fieldItem.Substring(0, 1).ToLower() + fieldItem.Substring(1), fieldValItem);
  627. }
  628. }
  629. RabbitMQClient2.Instance.Push("SpDataQueue", tableName + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(spData));
  630. RabbitMQClient2.Instance.Push("MainDataQueue", tableName + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(mainData));
  631. }
  632. catch(Exception ex)
  633. {
  634. Utils.WriteLog(ex.ToString(), "通过MQ发送SP原始数据异常");
  635. }
  636. }
  637. #region 金控
  638. // 开发环境
  639. // string clientId = "1243966544896";
  640. // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
  641. // string mfe88PrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALLxyDr+1dtKPaLW3KLtXO3AnDu42apzdtLqxUhmQNiFOZxeGlXXuOriPbPP+1RHBfxvcx0rUDUdNHVdF3uGXTDZQX2IWTpR7MHInm100Oh98wIYm1VJOGr4wJX5ZAjbq0n+5vpubsY+vNNHv1+e036dOeJEzi2uM403ZbMSEcRzAgMBAAECgYAeRbb4/AmTypB4zt6OlZdGBXKoy9HO+y+b6OmtINdRieBAKs9LvG3lFpcXp1S+YjGKDhSsV5p/EczBGhmR5R44j52886h6OoU0HskifeEJs152gMXLEFya/1QWnf1Ev+ugzuto+CxuHlGHE0T43uFkuATZp4sfXX/03um99FIKmQJBAOrYJX+VmKdNbmwNKMXkFBAw6FM4wrtr6vT3ne0pBWgbUDIH8cs83wq/SQHuvy/Cafqr8qWC9fFX2m+hllzxzA0CQQDDEIDNXdRxEmRVQ90lnn6ppnERvLhTY3RyuyOj3aqM1lxWEU2vvylimCpccTEqgY/PqMwfqChSf2v3S2CFjzJ/AkAPw2ho8vKnMDRcPlnhRpjuKUo+4812ZR0FSmWoWJuLTGIKqavaN4DFKOfOoGbm3sbcU5Ra9bpqc7ouygrcvEI1AkB8uqbBqsfW7X2+j8Bu96Picw1F3Di5CZVCb6tgcrNFjyRH3JSiVkfuRYKAzdg0Z9g/Xp33eB0gc13kKQy1GlWdAkB6Emn94YesoHda26HWbrgBy18KSfcLH57EuXquX/pOma1TXjaXw1E7kkFz1EPde9WzuSWUmGN2AdJT0ruTOb4C";
  642. // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB";
  643. // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
  644. // 生产环境
  645. string clientId = "4487378308096";
  646. string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2HxPVZ5ZIxIWfr24qB45PAz9WfjN9CiF1x9Lz3P/tVvIXFdBaUw+9zxCAPRDGQxJId7anjEjCOuAIKpFOiTPhVqHTHd3075FFsW5fL7lFCOFJELTj+mVamAIbKalAuRzIX0m0VQUXd+madB+yRQSBjkOIboAMYQ9amf99SqI9KwIDAQAB";
  647. string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrSrNKkBt/X8Fkd7viGpTMk+GdJgE+SvoA4PSjccpZoLWnwxXsC8K/7pfm9uGxPjte9e4RznXE5nuhSrcfls4lDWhTrGd/lj3Id8OCM+yEG+xilJs1lvXJjHDhL6/wa+TE5NSzWoKgXnyeHF3TSHMbUefLLtoKqL3j4h4lPqrjiQIDAQAB";
  648. string clientPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKtKs0qQG39fwWR3u+IalMyT4Z0mAT5K+gDg9KNxylmgtafDFewLwr/ul+b24bE+O1717hHOdcTme6FKtx+WziUNaFOsZ3+WPch3w4Iz7IQb7GKUmzWW9cmMcOEvr/Br5MTk1LNagqBefJ4cXdNIcxtR58su2gqovePiHiU+quOJAgMBAAECgYBQIIyIR6slRWTRG5V/KlIK9O5oNbwFKMuUF6c4weUXUi9Hv+GEXugGIpVaTIi9AdCCFmb8W2kJ54tTowDQvRnGxVpr7repYwJv2jHh5ug3oreBghfbfbaOaRMXisp2x1CLi+8Q5BNjpe9KdurRtg7jt8bqgWels5aV2PbjPHHwBQJBANjqYXbapz6xUPdI0kyEQhdxHt7jOmysTY3vT+/UcgU2sf37hWh8JlTtVlFZns3JBocc9rMtBEAh0Cy5faMQXKMCQQDKJ9eYWQvb1GyB5IdDlkOuByyuwFfosZ0Qp+QNtnz1VAHHgQRM7RGNv3nYDJNEJ+qIhIzZppG5yDbAN7PYyTXjAkEAq8a4VkIDbZ9HyfxOJbAbEqtPUhzJ+KNea0cXm4o2nTBaNhLH7B1c0aZ908BQBRDr7XWfW/cLRapBTBm8h7R+VwJBAJAKrZMPN+TuSlaPaFYfNqBE2nC1+q2CCQE6L8QZmJYRwqbN5iuN7CkNGxt3cmNo8bNOhzH6fvFamLCDwDEixbMCQEgaxfAxpJdMoR6LrklSkigHiKfA6SaRWxxShFtBfjk5XcakmLkU/U5lgD/Blu7h4x6bRf4VPTYWdbxtiOK11rY=";
  649. string reqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE";
  650. string reqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE";
  651. public bool Verify()
  652. {
  653. string data = "ZV0BBQ2hNgeZKKAPZ3XXEJGhp/h3+Mq5ejxuCI9SRbrDRls0XtfJRWboT5+J1sfHkb/J3eI4ThkTI/DjRNLK4x7fFYD62coClL7zDXeES42RXrpBik7VHHllUIS5nZFT23QME8kxRdo/6FH7Sv0J7IP5Qtqe70b3syv1jXmv8JozoP6DQjqHnlggpRM+4Ppks5PXorvHW7yI3uOgJL06t0GWDZIh7FRQ6UU41ayDsY0Z8j9o5quD8DSGJ1po6YPdmr2FpbFL5hs+buYhfEwsOwbvU5Aawbt+XuNXlU21wjeyC/8h2/yiPJSpCGjNXzzY4BBIhWDIbyxrbV+7SGIC+gNK2oQV0Ldtq9dXmljqA8e2dWsa8IaGaXmfo/85Ef2W5qIByrn42K+rA1nzhbR+L0WPGd4ugyzx6eiUl6T0oXVMaTIIoM6fndrm7RubsfNRZizrkQ+ocnAraMnGPZq84NpRp0Qs+pg8mlAIrqQ0avDutY1jGkzFXAljYGhiPvN7ntydmn2P2jgiPfh65VWumcXU+cp8d/nTD8eT/HmVbXUNMp/1ckP+VoK2wdowvgmgAruD3Fjfo8EghAfWEfuAVIsErxGxKCF17AUI8ZIqa+JYxxaA9vjxklavLmB9MAovx3JQSGXqXNNTy3LBljb1dZr3yk0ER9Qv8K4Bqc7Ti6gHHBFc7uu+wnqD7kTieMn++TpNo44MR8tGSmN6lzZKrio1czTyLLANLzzH4lBipTalGjgFnKcaNdVloW63DKkpz3qugCeBotRDdkH3T7DtYVz41lmJyLlxToeyFxXzqV0yqopR62QIghRO/vI9DpMDJclQMKEaCs9Py4qgMz2BmTqnESU42XDyNCMY5JVGpClZJgXNPmWLU0xrOu7B/tMEfThj9pNPBqNkbWQkLZ1MaSiMrfoHfQ7krt6TV6B2rhyfwrjKysXex4IHUX0nRTT55HcqQc38FlpeC4+kaTTSRs0HGMteiq+3BfDY0vHxH84x22WeN7oE7JbD/Ttd6Tn4";
  654. string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw=";
  655. // var signer = SignerUtilities.GetSigner("SHA256withRSA");
  656. // var pubkey = Convert.FromBase64String(mfe88PublicKey);
  657. // // var pubkey = StrToToHexByte(mfe88PublicKey);
  658. // var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(pubkey);
  659. // signer.Init(false, publicKeyParam);
  660. // var signBytes = Convert.FromBase64String(signString);
  661. // var plainBytes = Convert.FromBase64String(data);
  662. // signer.BlockUpdate(plainBytes, 0, plainBytes.Length);
  663. // return signer.VerifySignature(signBytes);
  664. var toDecryptArray = Convert.FromBase64String(data);
  665. var toSignArray = Convert.FromBase64String(signString);
  666. // var pubkey = Encoding.UTF8.GetBytes(mfe88PublicKey);
  667. // using (var x509 = new X509Certificate2(pubkey))
  668. // {
  669. // using (var rsa = x509.GetRSAPublicKey())
  670. // {
  671. // return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  672. // }
  673. // }
  674. var rsa = RSA.Create();
  675. rsa.ImportRSAPublicKey(Convert.FromBase64String(mfe88PublicKey), out _);
  676. return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  677. }
  678. private byte[] StrToToHexByte(string hexString)
  679. {
  680. hexString = hexString.Replace(" ", "");
  681. if ((hexString.Length % 2) != 0)
  682. hexString += " ";
  683. byte[] returnBytes = new byte[hexString.Length / 2];
  684. for (int i = 0; i < returnBytes.Length; i++)
  685. returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
  686. return returnBytes;
  687. }
  688. public string Decrypt(string data)
  689. {
  690. var toDecryptArray = Convert.FromBase64String(data);
  691. var rsa2 = RSA.Create();
  692. rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
  693. string result = "";
  694. List<byte> cache = new List<byte>();
  695. for (int i = 0; i < toDecryptArray.Length; i++)
  696. {
  697. cache.Add(toDecryptArray[i]);
  698. if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
  699. {
  700. var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
  701. result += System.Text.Encoding.UTF8.GetString(ContentArray);
  702. cache.Clear();
  703. }
  704. }
  705. return result;
  706. }
  707. public string SetDeposit(string sn, decimal serviceFee)
  708. {
  709. serviceFee = serviceFee * 100;
  710. Dictionary<string, string> headers = new Dictionary<string, string>();
  711. headers.Add("X-Client-ID", clientId);
  712. headers.Add("X-Security", "RSA");
  713. string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}";
  714. content = Encrypt(content);
  715. string signstr = Sign(content);
  716. headers.Add("X-Sign", signstr);
  717. string req = "{\"param\":\"" + content + "\"}";
  718. string result = function.PostWebRequest(reqUrl, req, headers, "application/json");
  719. return result;
  720. }
  721. public string SetFee(string merNo, string sn, decimal fee = 0.6M)
  722. {
  723. List<SetDepositList> rateDOs = new List<SetDepositList>();
  724. rateDOs.Add(new SetDepositList()
  725. {
  726. productSubType = "2020032007vz7Ux6",
  727. updateValue = fee,
  728. updateType = 0
  729. });
  730. Dictionary<string, string> headers = new Dictionary<string, string>();
  731. headers.Add("X-Client-ID", clientId);
  732. headers.Add("X-Security", "RSA");
  733. Dictionary<string, object> obj = new Dictionary<string, object>();
  734. obj.Add("merNo", merNo);
  735. obj.Add("sn", sn);
  736. obj.Add("batchUpdateType", 2);
  737. obj.Add("rateDOs", rateDOs);
  738. string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  739. LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率");
  740. LogHelper.Instance.WriteLog(content, "设置金控机具费率");
  741. content = Encrypt2(content);
  742. string signstr = Sign(content);
  743. headers.Add("X-Sign", signstr);
  744. string req = "{\"param\":\"" + content + "\"}";
  745. string result = function.PostWebRequest(reqUrl2, req, headers, "application/json");
  746. LogHelper.Instance.WriteLog(result, "设置金控机具费率");
  747. return result;
  748. }
  749. public Dictionary<string, object> CallBack()
  750. {
  751. string trace = function.MD5_32(Guid.NewGuid().ToString()) + function.get_Random(8);
  752. Dictionary<string, object> obj = new Dictionary<string, object>();
  753. // Dictionary<string, string> headers = new Dictionary<string, string>();
  754. // headers.Add("X-Client-ID", clientId);
  755. // headers.Add("X-Security", "RSA");
  756. string content = "{\"code\":\"0000\",\"msg\":\"OK\"}";
  757. content = Encrypt(content);
  758. // string signstr = Sign(content);
  759. // headers.Add("X-Sign", signstr);
  760. obj.Add("code", "000000");
  761. obj.Add("message", "OK");
  762. obj.Add("trace", "");
  763. obj.Add("data", content);
  764. return obj;
  765. }
  766. public string Encrypt(string data)
  767. {
  768. return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt(data);
  769. }
  770. public string Encrypt2(string data)
  771. {
  772. return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt2(data);
  773. }
  774. public string Sign(string data)
  775. {
  776. var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data);
  777. var rsa = RSA.Create();
  778. rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
  779. string result = "";
  780. var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  781. result = Convert.ToBase64String(buffer);
  782. return result;
  783. // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data);
  784. }
  785. #endregion
  786. #region 开店宝
  787. string KdbApiUrl = "https://kzy.kdb-tj.com:5055/api";
  788. string KDBAESKEY = "gvB%UOF3eBqKf!$k";
  789. // string Kdb_Rsa_PinlicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJzLZwTVqTU10mnPaxhTCQa89uR9hk/1MGJcKS6lpNDZaJFrXI48tTsk46jJgkXnDMqJoNIk+iLWXhKK/n8azQMCAwEAAQ==";
  790. string Kdb_Rsa_PrivateKey = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAl2x9dSSCfNDik6VM2dn/SK1ONSbb7AKyXM1gHw8PMbzWN1pK7YGaPqHlIRbAeFeIvLKVeMxrji+63W6LpB0yDQIDAQABAkAfpHUnCIUYDhJ65f0EPTDCgCyqoL8uN3YMPIKMmvoC22/i7AC6zf/bWk4JdratN+gvvnjGgHQff6HH5dOQ6sbFAiEAxPYSLADzIv374J8O+LluXIcgI5zXm4r4dMtKbCmmWSsCIQDE0BRKsBcBZ9NvJ9Km+m/d1hN9v5hFT842zrkUFJmVpwIgBdYc17z3d3P7QL613NzxzkAazbNaGDvX/O4BOI9LZJ0CICrZElHgXGHV9NYyWU45H7mwLbYmzEPqx/5uqySQB4/pAiBgKYv3RGnsZ8Zm1EKAJjUX7ehdteBgPSA/UgIDZQ4oyw==";
  791. // 查询机构政策列表
  792. public string GetPolicyList()
  793. {
  794. string url = KdbApiUrl + "/marketing/plan/query/list";
  795. //[{"id":100014,"name":"韩测试营销方案(韩测试营销方案)"}]
  796. return PostKDB(url, "");
  797. }
  798. // 查询政策下的押金
  799. public string GetDepositList(string planId)
  800. {
  801. string url = KdbApiUrl + "/marketing/deposit/query/planId";
  802. string content = "{\"planId\":\"" + planId + "\"}";
  803. //[{"depositId":26,"depositName":"押0返0","amount":0.00},{"depositId":28,"depositName":"押199返199","amount":199.00},{"depositId":29,"depositName":"押299返299","amount":299.00},{"depositId":27,"depositName":"押99返99","amount":99.00}]
  804. return PostKDB(url, content);
  805. }
  806. // 修改押金接口
  807. public string ModifyDeposit(string PosSn, string depositId)
  808. {
  809. string url = KdbApiUrl + "/marketing/deposit/query/planId";
  810. string content = "{\"posSnStart\":\"" + PosSn + "\",\"posSnEnd\":\"" + PosSn + "\",\"depositId\":" + depositId + "}";
  811. return PostKDB(url, content);
  812. }
  813. public string KDBDecrypt(string data)
  814. {
  815. string result = AesDecrypt(data, KDBAESKEY);
  816. return result;
  817. }
  818. public string AesDecrypt(string str, string key)
  819. {
  820. if (string.IsNullOrEmpty(str)) return null;
  821. byte[] toEncryptArray = Convert.FromBase64String(str);
  822. System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
  823. {
  824. Key = Encoding.UTF8.GetBytes(key),
  825. Mode = System.Security.Cryptography.CipherMode.ECB,
  826. Padding = System.Security.Cryptography.PaddingMode.PKCS7,
  827. };
  828. System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
  829. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  830. return Encoding.UTF8.GetString(resultArray);
  831. }
  832. public string AesEncrypt(string str)
  833. {
  834. // if (string.IsNullOrEmpty(str)) return null;
  835. Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
  836. System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
  837. {
  838. Key = Encoding.UTF8.GetBytes(KDBAESKEY),
  839. Mode = System.Security.Cryptography.CipherMode.ECB,
  840. Padding = System.Security.Cryptography.PaddingMode.PKCS7
  841. };
  842. System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
  843. Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  844. return Convert.ToBase64String(resultArray);
  845. }
  846. public string PostKDB(string path, string content)
  847. {
  848. string url = KdbApiUrl + path;
  849. content = PublicImportDataService.Instance.AesEncrypt(content);
  850. string timestamp = function.GetCurTimestamp().ToString();
  851. string sign = PublicImportDataService.Instance.KDBSign(content + timestamp);
  852. string req = "{\"agencyId\":\"3013890129\",\"content\":\"" + content + "\",\"timestamp\":\"" + timestamp + "\",\"sign\":\"" + sign + "\"}";
  853. string result = PostWebRequest(url, req, new Dictionary<string, string>());
  854. return result;
  855. }
  856. private string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
  857. {
  858. string ret = string.Empty;
  859. try
  860. {
  861. byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
  862. // 设置提交的相关参数
  863. System.Net.HttpWebRequest request = System.Net.WebRequest.Create(postUrl) as System.Net.HttpWebRequest;
  864. System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
  865. request.Method = "POST";
  866. request.KeepAlive = false;
  867. request.AllowAutoRedirect = true;
  868. request.ContentType = "application/json";
  869. foreach (string key in headers.Keys)
  870. {
  871. request.Headers.Add(key, headers[key]);
  872. }
  873. request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
  874. request.ContentLength = postData.Length;
  875. // 提交请求数据
  876. System.IO.Stream outputStream = request.GetRequestStream();
  877. outputStream.Write(postData, 0, postData.Length);
  878. outputStream.Close();
  879. System.Net.HttpWebResponse response;
  880. System.IO.Stream responseStream;
  881. System.IO.StreamReader reader;
  882. string srcString;
  883. response = request.GetResponse() as System.Net.HttpWebResponse;
  884. responseStream = response.GetResponseStream();
  885. reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.UTF8);
  886. srcString = reader.ReadToEnd();
  887. ret = srcString; //返回值赋值
  888. reader.Close();
  889. }
  890. // catch (System.Net.WebException ex)
  891. // {
  892. // System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)ex.Response;
  893. // System.IO.Stream myResponseStream = response.GetResponseStream();
  894. // //获取响应内容
  895. // System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream);
  896. // ret = myStreamReader.ReadToEnd();
  897. // myResponseStream.Close();
  898. // }
  899. catch (Exception ex)
  900. {
  901. ret = "fail";
  902. LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "请求开店宝API异常");
  903. }
  904. return ret;
  905. }
  906. public string KDBSign(string data)
  907. {
  908. var rsa = RSA.Create();
  909. var key = Convert.FromBase64String(Kdb_Rsa_PrivateKey);
  910. var content = Encoding.UTF8.GetBytes(data);
  911. rsa.ImportPkcs8PrivateKey(key, out _);
  912. var result = rsa.SignData(content, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  913. return Convert.ToBase64String(result);
  914. // return CSRSAHelper.Sign(data, Kdb_Rsa_PrivateKey, "utf-8");
  915. }
  916. #endregion
  917. #region 乐刷
  918. string LSPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMjld3flY+R+9WTR2MvcR9qWISdmpayL3GNGg9gvzwkXkhDI/E7rX6ndLvVuaBbLWXB+UOh+8Pfw3Gvfv3D2GHZCTzPHOKrs2tyzqC8EmMUDQaoVOI2BY4vtB7IjNe9FlLGZx62JEJrMkHKnOSQxsi+flCoexKc2t1q7kQsO2F+3AgMBAAECgYBmQ7EB/mpQOXSPYucaN0L4eW3dEbqKUBPbEV0yInwgo7f+BWGyhsyGuooZ857W46Leyd5Dy8K8ZAbAfwCD7zJZsSzWsuvWQE991f+n0V7AAnKc3h4OsHa4oITUNo2nD3PvOpWfQx8vSuQuSFQgx0ExdnywS3So16mG2X6J2k87wQJBAPTfV10MNpA1e5oRdX4D4lQ2tVyg5GW72NMhUGWct/FvgcEW3V7xZ0z/gSLfFcGI8c4LGYWRVPIsBnWFx0LSZ6ECQQDSBoqXuF/LobfFFT3D47ixL8d+qDbOJ+ro3p4+iCkdxxJ/ncaqouxsr3fBbkSWh4t+UkbbihO/isPdBwLPZihXAkAc2jwHAKtlLogTzT7UzExcs92GvoZq3klcBy7b6i1aS1M0lycaSsNrNSfYHgUIOsSTDIfDTy59ImbYbhzeaMBBAkEAyfz6i4IJt3jXmZadKWk4NkhiT6CN3OUtGjsH69Hd4UKUuuFNsMwyHzD+NqzLEA5aDOoqNXftGDjnuAnHHRn9zwJAHqPHR5ZOKDN/ujeAIUTwmFFJh8vx6ujv7UTesBbtTsFYW6bZln+X6aS2G3Kdvz3e2cxQyH8ncc0yIh64a1fqyg==";
  919. public string LSDecrypt(string data, string sign)
  920. {
  921. var toDecryptArray = Convert.FromBase64String(sign);
  922. var rsa2 = RSA.Create();
  923. rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(LSPrivateKey), out _);
  924. var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
  925. string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
  926. return AesDecrypt(data, aeskey);
  927. }
  928. #endregion
  929. #region 海科
  930. string HKPrivateKey1 = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAK5iJ2q2nF+9jEnof9VYhMdbAgI0ZS4cYmgWTMW2JR61lJhR0GH+A/m6mjN9FsTS6Bq03u/+e6BKdE6VqMGk0q7asi2VZIgD59zj4HubS8EFrcb5ZprwmGLnG71cBga7V5EWnHxSB9BlbFt6rGeQiit8NSbv62NxGh1U+rAVE/a3AgMBAAECgYEApQGxpJNowls8bQ74LytUcMMX0ng7qXcoUq+PM6IX28gb9EmuMZtHrb05fjEGI3YiNGsjbNpTpqftCBMrHRjWVRgb0PDf/zD9YYrxmcP9DWKQjG5f1ygYtQBlnOPEX963Y2SXrsTKr4+szTpI8r6YqFfVbbooKVMesCBtshgg16kCQQDYHGDuCuOzULP84QvGi8z+wHNv0arFpYYxvwitntD7K3iolAh8gTDWeaC03MHruGM43ybCUi9EHhCrcVKjgpK1AkEAzpIUajdmAAwtwGg4G0v7tP/ulmpGhnALVN84gSMAc5f8D6aCnoUyle+GylwRBw9WblHBLxsOtARQIvvdphDrOwJBAIFvXc60zvQTHfoTf84G5VyfP4R1e2atYNZiqHv0Zw5IVxgAsaSAbBPI/SvWHH9mDGd/n+M6/fw6VZmZYfl0txECQQCQB3yifpPpDpTL5h7QsY8EKbqyN9GKpQ7Rk35zU/NZpawDQYcrfhXCQytJZx4cPQ53hxtae9QpoiQ58EEgLAXHAkABzJ/QDS1QfYrkP9t9X+Pny2iEuWGeIHyfsfSKQKr5pv16k1WqiIvlFRyDPl+aw5IOedkYb0vSkcU1KzjMW+Ra";
  931. string HKPrivateKey2 = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIyARvyTYvGledv+4E3D8FxsS07pmzZYJkIdWxov/xApB6Mb2BVP6BkhsRyoySWbEyiYlZpx1A3b7D4yc7vD3WfB0i0cGPwMdJP/vGuzWfF2mLY0v4mJrxdXuGeWpfWnl4DP0aQS6qkUlei6f0vWS76wdpHvKUGb17Nz/f9ezr5tAgMBAAECgYBoLhn04Qil67BvKw+BOj+5GGfC7L81TamYrpHF2j8D6ZiLHnNcYjLUp8HfYVw9MT7EhFex/KNjX2ZOPDTKzpIVXofs9or1fqPYwUewBFHD9rwTrThKySdwbKrRAFNw7YXaJvMEdpPaxBBsMvfC5EdvrFejZ80TpGGfXyIXaxuC1QJBAP/6XsinJ4ZgoJj2PRPc5pWRqUssERV2w07LCPEGxxyECoyEzrTIoj7KcwSXYTSx2GGeEiSpijye9rFCHoHUNF8CQQCMg14KaLi3RjddGYatmO4SHr/IFlwpjL16rw+poOHN1WwMmex1qd3JfNab0vi5GEkFg1fAbIMRiwksvXS0ReCzAkB5/dcoJ0lV6D0BSPDIw5D8nQOieKjXotbneSmUvJctxtvEJhLg43E3HYJ9IKvJ0iv+MbgR0t63j0agKZOiagBfAkAuU3ViyynzStQf/rV3cI81LCwgpLaYAE3MMAFi9KbdvPqVoP3jwTBdKKp8z26vX8FbbvU0fNItq4BH3uKmOM+fAkAnBwxmorni7Y6Zs24pevDVqMpcF9SkOigRKsO9Lc1HuAJuxHEoPW5KeascBVe3HfYqgt4HWIxNy/d2MvpvNaWo";
  932. public string HKDecrypt(string data, string sign, int BrandId)
  933. {
  934. var toDecryptArray = Convert.FromBase64String(sign);
  935. var rsa2 = RSA.Create();
  936. string HKPrivateKey = "";
  937. if(BrandId == 8)
  938. {
  939. HKPrivateKey = HKPrivateKey1;
  940. }
  941. else if(BrandId == 9)
  942. {
  943. HKPrivateKey = HKPrivateKey2;
  944. }
  945. rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(HKPrivateKey), out _);
  946. var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
  947. string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
  948. return AesDecrypt(data, aeskey);
  949. }
  950. #endregion
  951. #region 联动
  952. //测试环境
  953. // string LDRequestUrl = "http://111.14.221.188:18066/CloudTerminalServiceAction/";
  954. // string AgentNo = "LD110014";
  955. // string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3WG04QXTzWBg2rj4BbSmnXVTqQiCk2lZ7yi2vur2LxsSc+KN0o1W9y2AkCHcFIAk2aAfMEMQYTO3HQ+F/Vcb27BNBSjnaOLfGv0PXNHKyVzC4EQLe4M5Pqd1wMl6NaZK+HnyrPBTnfsGeywhGJc1Ke96ANrydhk7UbwezydC7nQIDAQAB";
  956. // string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
  957. //生产环境
  958. string LDRequestUrl = "http://ldys.umpay.com/service_exter/CloudTerminalServiceAction/";
  959. string AgentNo = "LD112692";
  960. string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGtWShTeFEgSSFx3PJXcjCOmS+OgtcUvPOHhpALY3Orm6t7rl1E0n3j7XlM049YwwtGRJI4OWhgrtR4/AnOMBXdyMBoKxF23uay1WQiNekzfUrTwil7/CRrQ+VlGgPe6dr3WQT2/HLbzMnJHeoIZ4KSIj/7pgAwTF4ciL1UC3awwIDAQAB";
  961. string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
  962. public string LDEncrypt(string data)
  963. {
  964. return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", LDPublicKey).Encrypt(data);
  965. }
  966. public string LDDecrypt(string data)
  967. {
  968. var toDecryptArray = Convert.FromBase64String(data);
  969. var toKey = Convert.FromBase64String(LDPrivateKey);
  970. var rsa = RSA.Create();
  971. rsa.ImportPkcs8PrivateKey(toKey, out _);
  972. string result = "";
  973. List<byte> cache = new List<byte>();
  974. for (int i = 0; i < toDecryptArray.Length; i++)
  975. {
  976. cache.Add(toDecryptArray[i]);
  977. if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
  978. {
  979. var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
  980. result += System.Text.Encoding.UTF8.GetString(ContentArray);
  981. cache.Clear();
  982. }
  983. }
  984. return result;
  985. }
  986. #endregion
  987. #region 联动掌中宝
  988. //测试环境
  989. // string LDZZBPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtINYRcRSTpDwvG3rpSTwqqGXAz6/KGXNckoHQthooeie7If3vq2Ec/qdndAQu6p0V2LOwRrVhoznJ0Z+xCkf6CgpYflUQY8GJHedDoCgZEe3gKeMAdbNqcyJDb4FQWRJuy9W9vlnTQaKAGYDwNFsO3s4R0vmJvGl8Nix8s1Sd1SJy5IJioY+Vb2JTG9Ke2ZoDDl3rJl6FKdoIDnad28g/xAzioc84wNACLkeA/6pZfqsoqvjR7nr7FADypX3s9hxwGt6Zf4hxwb5RNYBLsy+EBOF13QsfoBetnYAghH6ppFm8GC9CRgnHOnOa1DnicXLn1Aah6L4zx94rAo8k6A9FAgMBAAECggEBAIk7pxRKS6JApEg/Ay3alGvH8mhk+JY9mFk/9NDpGFEPi2Dlr/GEKsWeAjqaFxrNdFk13jGTywErLoqQtIHUgXts7Ah7k5gbSvUSlBfh4wcEVEfFTCA4LFDsFLPZtmpnQJo8zx/JvFAeDd522OMOzUM7T6OHVbBdfkwscRUj3aYBUaK4XqhbWFP1otLEQqINUpYKa7BhxJ8JyLmxyEVa2kQqAomGnrD2So17F/lVeTtj8gL/cpShknUwhVb7aZiMbJPO77dR6s1aFlIKZYq8jMO88u60P7HhHnDQECRWmST4c/jecWkYTrKk3tsZ1DzGox15vuFOeQtcOSWhu0tAT+ECgYEA/s5KWNjUB7PI+7ul0JuLwtkbMkU2U+RLryE64YaE9syKJo66FLSQCKgJ07Au1O5BNdu4hySf54ePCT4+UUuvVahG2FedFlMdvFF6V5w/jtcDO1AhXFHgNwnNNoCdX8dqIWNvt2oHqCFbJsPevYysG0893Q/o3mk8hL1ko3+j8akCgYEArfCNFi7Mk4oUyrwR64e96vASUPQVC5DOR/qZhZynPRSb40PPUxJdoovzVWxUGwBtP0GnqkOHUgeMi0sKZMsnXEXDa3NjILCIL7q1DihjFkx10jlt2XWFaUQ7/L9LfWxAFGVIBcuhLp/llzO1a9LU/SOGVkz6OuEm+ubYFH476j0CgYEArvBtBPDhKeSacZKUtlOEsiMi0/HG6fQMrlFvPpV/xn4Jv40wXrTVSswr6wXEMXbemJ6g41AW5PwiDSOJ34DKAVJGSZRlioVIHhoGmA3zaRtf4aITNXIVMVRuayQEaFTeHcxKUC/gz+MO1N+XlqX1J87Q12xr4f94iF4LsWEZ6vkCgYA9n/Msf8olH4+8QCONMdt8iC/FFKT8IwKih8uqhdTOlCWiwByNDv2zoCfHBQlLQ7xw4972ONSRoHEPzLdS/JLmYyUYRZpCM6kcV+bbrD1m4hIAOC6OE8//ephSNKgXOKn/T97ThtCFR0s9ZamKGPky8koe+0jQYYLA89ZsdEjf9QKBgQCp6kM6yZCGknLbg8+iRCmum3iuav0Dm4Bnemvv9rawqwodmOgxReQtRQo596Yc+nkAPVOmNKYK9hetvLau29JJELKvWngZcASVs8QEMcaNRoKtqOx2Wb10Sp41G+FoCaNGY+aIWp7jvbP4AhbTuKii+e0j9OthrSAOyZFDVCzvUQ==";
  990. //生产环境
  991. string LDZZBPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDWEttbrR7VQ+07SRl1HlbWMfW2ao52Ycu4CVcJZdC5HwRDPJpTyJulf8CaaJ5hv2UCx218uj5Yo2WKiHGxPwU+Hj03VQX3Hn5K8TKIYyhD197QE+LHEdHcdIwB+GHyLR1U62HkEIcYyC0PdCLPkKkWsYhbJsCx5NbDzQPJnARg4g02Q/qP04VrnDSmY5piaKLXlGUXRhYcaKBw/PMYOt+4NCyMwM1VltgEQSKsN6Ta7PjhsQfj7TRStIBnpKbsolkp47acEEwEGK1w8ZyXND9vPVwkF4TzDQoSgk3+/4EydO3e8Afn8yseCy47GAdNZRQJeHF0FqyxMJbvHrKNfyabAgMBAAECggEAYVz8Nar8XgTh7dfmYzUkS5E3bvrxxnfePtrIojaTgs7PkoEKs9aGq/P5toCkoFJ7b5Migdr3JjtSoHpEM1g1WzZHo1XhO667w/wFfrCSjKCu7zZMKzw4larQTskYSxwnvgq8YA0AVM4eaGvqtTrXHMIsAUET3RT2dOFWuqhh+WmhM8nNthuKnfBoMi7mKd41OJcaoRUXoziEFyEMAd9AMWt285o7TvOFHDnBmhYYsBeTn3RSGEdG62khpteW4KW1aQi+nxHlMao9HdHxCsumPecmM+zF5DE3m1y8WlNaYi8aQrLkHbY8CwxGQ9tGxb+4CTGq4s3dy+RSNrWkcrRdIQKBgQD5pH+bvTJV8xph1PdWuNY5cM+fbqkmt+SGqeXaVRh3hOm7bPmpaTrcdQvm3gS0pYGHF93mgb1PsUBOBANT2Wd6uaIc1gBKjSwEG3Nd0cgQLyMQd4fNP/ET6jcfzg1qYBpLx0iKpyhCwmP1Or4Hy2no35hM2fbxv4WY2sVN7zweCwKBgQDbhnkYgj8zW3OkgNpBXwl3SEa/+K2gCj109zyVsUj8hP0FbDTGPvlx/VctXF5SOoTgs3x+G/96Px04PPzw/c4Tp9ToD2v6h1v64dAfEq35CwfNr/0LE/QEjAEUn1iLfjdQJoCroocYIkdaquHC1EOfr4if5U+A3rzY5jQ2MaTDsQKBgQDMaJNMVEiI8/ugK58y1Toj4mk+5H+AgoaOdUMN2SulgaFYpExxGQbnSLesHBLCT9qVYUeC3KzEOiCrQMHwwEzowmMpNVkbsiheXJPEOGeWSOJvM1BxEXA2nEryseduOK6PaefOEDz5HO5399dtznM0CRFNrBN1sxqTJF72B3O0LQKBgGHIXFhWa+Bsc+5qls1Xj9faEemg03XeGdHn7sye02vnsOyhbkB//IyR1CsYYcsu1dFhIarqvbmuM03BnMmbxBdtQqC7fdVyRb5Sp2mv4F52U1uDcKtmj+MWmcSd1csMxYamH9pT4ukVG8N/KmCmPBj9D1ZpxigZDvVuVQNuyX2BAoGBAI53c4yoq3M4zlIEmaWlEspfi13QmHqGJnzDM6glzj/WXybhfHDJprXXvzFdip6XTNEHeI1B5rpgQ1OfpBbPpwEzuUc7HIsgeLbMpHERXoYmuF0SG3lzQR0EnGrlWFDTpbXcCbANWx0i90e9Y47cuvGcpB4ZZSIKrjixpY8CMH2S";
  992. public string LDZZBDecrypt(string data)
  993. {
  994. var toDecryptArray = Convert.FromBase64String(data);
  995. var toKey = Convert.FromBase64String(LDZZBPrivateKey);
  996. var rsa = RSA.Create();
  997. rsa.ImportPkcs8PrivateKey(toKey, out _);
  998. var ContentArray = rsa.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
  999. string result = System.Text.Encoding.UTF8.GetString(ContentArray);
  1000. // List<byte> cache = new List<byte>();
  1001. // for (int i = 0; i < toDecryptArray.Length; i++)
  1002. // {
  1003. // cache.Add(toDecryptArray[i]);
  1004. // if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
  1005. // {
  1006. // var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
  1007. // result += System.Text.Encoding.UTF8.GetString(ContentArray);
  1008. // cache.Clear();
  1009. // }
  1010. // }
  1011. return result;
  1012. }
  1013. #endregion
  1014. #region 盒易付
  1015. //测试环境
  1016. // string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMQxp24mjxDTr13uPW0y+tiO1yXFGw7P/pPQ0oZKK7F6KstEaus7pLEywBZ5XRXE5jgkhR2TS7Ne7djJfbpn5yFc6pPlz3ZsOfBVeB88NEwhx6xzCGX2eqSSkO33n8w2G0xc2ss5HpYBarT00NBZWhrwOXpdRPYLOYHKVU3Rl+FA9xDw/wYfoWvrr+JSfHRGn/ENMmQFEdckAbPauKaQMrZD2kz+PRrhq56eWnCuVQPcaz/jroVT8qQEgkg2IsNy+DwfLOIqm8IySEpxnQ5wN/KvsQJc2wXDQNf9F5kvWwjoqSSP0qJS+oPRXET+zJb+WTk2y5M6AYoC9NodwsC4NwIDAQAB";
  1017. //生产环境
  1018. string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjmjoQirIYZBD9Qon2HkF4j/NAINXtJ7Lzq/WXxTF7t7mg7LNARt0+ZZaeWx8caq2fv5zdsGyyoInL23cBtDI5KmFfK69iA0ygQMK0WbiKqsUB1OpPbT3+9zLuadIJAznjA223lY6CIjTpdLZhaRjImNVqc60bdkx6YsQcA+xW+3r1JH4PPHb7yBEbkKIX8OhyX7U4p0TkbDkAobbjHr5YB9gmYLoSFJMOPfTtSExkv7/Y7IVR9poZAHcr3teFoAiXW3RzxelRtnXxIkl/6AUOKoL5fhr/UTUN+Q18uzNljYWr6SwnTI3EmtzgykaewWtZvV85Xdhe/BjiQ5Xor7YbwIDAQAB";
  1019. public bool BoxVerifySign(string toSignStr, string signStr)
  1020. {
  1021. byte[] toSignByte = Encoding.Default.GetBytes(toSignStr);
  1022. byte[] signByte = Convert.FromBase64String(signStr);
  1023. var toKey = Convert.FromBase64String(BoxPublicKey);
  1024. var rsaroot = RSA.Create();
  1025. rsaroot.ImportSubjectPublicKeyInfo(toKey, out _);
  1026. var publicKeyParameters = rsaroot.ExportParameters(false);
  1027. using (var rsa = RSA.Create())
  1028. {
  1029. rsa.ImportParameters(publicKeyParameters);
  1030. var sha256 = SHA256.Create();
  1031. var hash = sha256.ComputeHash(toSignByte);
  1032. return rsa.VerifyHash(hash, signByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  1033. }
  1034. }
  1035. #endregion
  1036. #region POSP
  1037. //测试环境
  1038. string PosPKey = "6v8cr0uyhtwtawda";
  1039. //生产环境
  1040. // string PosPKey = "6v8cr0uyhtwtawda";
  1041. public string PosPDecrypt(string toSignStr, string signStr)
  1042. {
  1043. string result = AesDecrypt(toSignStr, PosPKey);
  1044. SortedList<string, string> res = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string>>(result);
  1045. if(result.Contains("\"sign\""))
  1046. {
  1047. res.Remove("sign");
  1048. }
  1049. SortedList<string, string> newres = new SortedList<string, string>();
  1050. foreach(string key in res.Keys)
  1051. {
  1052. if(!string.IsNullOrEmpty(res[key]))
  1053. {
  1054. newres.Add(key, res[key]);
  1055. }
  1056. }
  1057. string signstr = function.BuildQueryString(newres) + PosPKey;
  1058. string sign = function.MD532(signstr).ToUpper();
  1059. if(signStr == sign)
  1060. {
  1061. return result;
  1062. }
  1063. return "";
  1064. }
  1065. #endregion
  1066. #region 来客吧L版
  1067. // 开发环境
  1068. // string clientId = "1243966544896";
  1069. // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
  1070. // string mfe88PrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALLxyDr+1dtKPaLW3KLtXO3AnDu42apzdtLqxUhmQNiFOZxeGlXXuOriPbPP+1RHBfxvcx0rUDUdNHVdF3uGXTDZQX2IWTpR7MHInm100Oh98wIYm1VJOGr4wJX5ZAjbq0n+5vpubsY+vNNHv1+e036dOeJEzi2uM403ZbMSEcRzAgMBAAECgYAeRbb4/AmTypB4zt6OlZdGBXKoy9HO+y+b6OmtINdRieBAKs9LvG3lFpcXp1S+YjGKDhSsV5p/EczBGhmR5R44j52886h6OoU0HskifeEJs152gMXLEFya/1QWnf1Ev+ugzuto+CxuHlGHE0T43uFkuATZp4sfXX/03um99FIKmQJBAOrYJX+VmKdNbmwNKMXkFBAw6FM4wrtr6vT3ne0pBWgbUDIH8cs83wq/SQHuvy/Cafqr8qWC9fFX2m+hllzxzA0CQQDDEIDNXdRxEmRVQ90lnn6ppnERvLhTY3RyuyOj3aqM1lxWEU2vvylimCpccTEqgY/PqMwfqChSf2v3S2CFjzJ/AkAPw2ho8vKnMDRcPlnhRpjuKUo+4812ZR0FSmWoWJuLTGIKqavaN4DFKOfOoGbm3sbcU5Ra9bpqc7ouygrcvEI1AkB8uqbBqsfW7X2+j8Bu96Picw1F3Di5CZVCb6tgcrNFjyRH3JSiVkfuRYKAzdg0Z9g/Xp33eB0gc13kKQy1GlWdAkB6Emn94YesoHda26HWbrgBy18KSfcLH57EuXquX/pOma1TXjaXw1E7kkFz1EPde9WzuSWUmGN2AdJT0ruTOb4C";
  1071. // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB";
  1072. // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
  1073. // 生产环境
  1074. string lkbClientId = "4487378308096";
  1075. string lkbMfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9w73juFDZe2n+D4Izav/B3VmkjP1b4wkc/4rv72DeK8uwGx1qWuEm+S5leG7v1YeyNXkTm/DW2I+iAJhvn+ILMErJCc8TK7hZlrzirhMTZtGB52Ai9IIi/SmpZtF9e2BV3S0feEvT83bi3ShnJDvsFsy6f0f/My63aNfjFcdaXwIDAQAB";
  1076. string lkbClientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3YYYwaQyl+poYl+CQEFiLjQi7R0LEG73360Wup4frAy0zPZYlch3MwUChA7gPXVND/bUY+6vzJ3mkeoFvFtOkhrV0Wm8PWWnBVzanq3P91rFqMljMQlNxz4nBNeH2yHX9lCf6HQCYfjsYtadrGyUQw3ZMs+b0sMI2nZe/oKZo1wIDAQAB";
  1077. string lkbClientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALdhhjBpDKX6mhiX4JAQWIuNCLtHQsQbvffrRa6nh+sDLTM9liVyHczBQKEDuA9dU0P9tRj7q/MneaR6gW8W06SGtXRabw9ZacFXNqerc/3WsWoyWMxCU3HPicE14fbIdf2UJ/odAJh+Oxi1p2sbJRDDdkyz5vSwwjadl7+gpmjXAgMBAAECgYA4+QKgvbJhSsdfRqhM+dcYnBuPW6dhmCDgCmdeyMvQdu8vET45qgeaGpxCqg4gL+VzpToDZgVZCPWg5TKbWeMsnjHJ4o3e/SYywRufHGDougTjYQcc4jZLjbefbGAbRIoSdZcYoJS9SOlFsSTyk5zkNmvFvxDH1mlw7ooYFmEi8QJBAO5vs6+wxuEwrYxm/y7tRuOUuIRuHv/HfRRPwTZUJMwR7YeQJ8HqWPZr8QukiE2YL+j7pEy/zscgW6tmAZzbNskCQQDE455wVPoWxFADaQvzrksWGF0qEce1ppnqf8DoHHQYQtUF3z8art/Kg8wJ/GbZxytR2REZzzaeqw3uGFyn21KfAkB44QZelqds+OmzGXBbkQ10SSx2bwGmOLNvvbM9YNE66AfcxzdwtucdHsIYXfSAKhx36EN2aXNiPkRbE57Tr8sJAkACPPgrHLwvEBI8x6/sGDogSSyd8s/LX9Z2FPeza8diEzhqtav4+K3wlmj2YBknNp1mc8o++d0MFrO01jAPdG3PAkBvAD3lZvd4m10Q92ikomH79IeQRh5mEBxfUsDXk+khHzjONmYgpo46TQBZ1okNW0amIemQhBbs/bEZZUGukPdn";
  1078. string lkbReqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE";
  1079. string lkbReqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE";
  1080. public bool LkbVerify()
  1081. {
  1082. string data = "ZV0BBQ2hNgeZKKAPZ3XXEJGhp/h3+Mq5ejxuCI9SRbrDRls0XtfJRWboT5+J1sfHkb/J3eI4ThkTI/DjRNLK4x7fFYD62coClL7zDXeES42RXrpBik7VHHllUIS5nZFT23QME8kxRdo/6FH7Sv0J7IP5Qtqe70b3syv1jXmv8JozoP6DQjqHnlggpRM+4Ppks5PXorvHW7yI3uOgJL06t0GWDZIh7FRQ6UU41ayDsY0Z8j9o5quD8DSGJ1po6YPdmr2FpbFL5hs+buYhfEwsOwbvU5Aawbt+XuNXlU21wjeyC/8h2/yiPJSpCGjNXzzY4BBIhWDIbyxrbV+7SGIC+gNK2oQV0Ldtq9dXmljqA8e2dWsa8IaGaXmfo/85Ef2W5qIByrn42K+rA1nzhbR+L0WPGd4ugyzx6eiUl6T0oXVMaTIIoM6fndrm7RubsfNRZizrkQ+ocnAraMnGPZq84NpRp0Qs+pg8mlAIrqQ0avDutY1jGkzFXAljYGhiPvN7ntydmn2P2jgiPfh65VWumcXU+cp8d/nTD8eT/HmVbXUNMp/1ckP+VoK2wdowvgmgAruD3Fjfo8EghAfWEfuAVIsErxGxKCF17AUI8ZIqa+JYxxaA9vjxklavLmB9MAovx3JQSGXqXNNTy3LBljb1dZr3yk0ER9Qv8K4Bqc7Ti6gHHBFc7uu+wnqD7kTieMn++TpNo44MR8tGSmN6lzZKrio1czTyLLANLzzH4lBipTalGjgFnKcaNdVloW63DKkpz3qugCeBotRDdkH3T7DtYVz41lmJyLlxToeyFxXzqV0yqopR62QIghRO/vI9DpMDJclQMKEaCs9Py4qgMz2BmTqnESU42XDyNCMY5JVGpClZJgXNPmWLU0xrOu7B/tMEfThj9pNPBqNkbWQkLZ1MaSiMrfoHfQ7krt6TV6B2rhyfwrjKysXex4IHUX0nRTT55HcqQc38FlpeC4+kaTTSRs0HGMteiq+3BfDY0vHxH84x22WeN7oE7JbD/Ttd6Tn4";
  1083. string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw=";
  1084. var toDecryptArray = Convert.FromBase64String(data);
  1085. var toSignArray = Convert.FromBase64String(signString);
  1086. var rsa = RSA.Create();
  1087. rsa.ImportRSAPublicKey(Convert.FromBase64String(lkbMfe88PublicKey), out _);
  1088. return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  1089. }
  1090. private byte[] LkbStrToToHexByte(string hexString)
  1091. {
  1092. hexString = hexString.Replace(" ", "");
  1093. if ((hexString.Length % 2) != 0)
  1094. hexString += " ";
  1095. byte[] returnBytes = new byte[hexString.Length / 2];
  1096. for (int i = 0; i < returnBytes.Length; i++)
  1097. returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
  1098. return returnBytes;
  1099. }
  1100. public string LkbDecrypt(string data)
  1101. {
  1102. var toDecryptArray = Convert.FromBase64String(data);
  1103. var rsa2 = RSA.Create();
  1104. rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _);
  1105. string result = "";
  1106. List<byte> cache = new List<byte>();
  1107. for (int i = 0; i < toDecryptArray.Length; i++)
  1108. {
  1109. cache.Add(toDecryptArray[i]);
  1110. if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
  1111. {
  1112. var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
  1113. result += System.Text.Encoding.UTF8.GetString(ContentArray);
  1114. cache.Clear();
  1115. }
  1116. }
  1117. return result;
  1118. }
  1119. public string LkbSetDeposit(string sn, decimal serviceFee)
  1120. {
  1121. serviceFee = serviceFee * 100;
  1122. Dictionary<string, string> headers = new Dictionary<string, string>();
  1123. headers.Add("X-Client-ID", lkbClientId);
  1124. headers.Add("X-Security", "RSA");
  1125. string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}";
  1126. content = LkbEncrypt(content);
  1127. string signstr = LkbSign(content);
  1128. headers.Add("X-Sign", signstr);
  1129. string req = "{\"param\":\"" + content + "\"}";
  1130. string result = function.PostWebRequest(reqUrl, req, headers, "application/json");
  1131. return result;
  1132. }
  1133. public string LkbSetFee(string merNo, string sn, decimal fee = 0.6M)
  1134. {
  1135. List<SetDepositList> rateDOs = new List<SetDepositList>();
  1136. rateDOs.Add(new SetDepositList()
  1137. {
  1138. productSubType = "2020032007vz7Ux6",
  1139. updateValue = fee,
  1140. updateType = 0
  1141. });
  1142. Dictionary<string, string> headers = new Dictionary<string, string>();
  1143. headers.Add("X-Client-ID", lkbClientId);
  1144. headers.Add("X-Security", "RSA");
  1145. Dictionary<string, object> obj = new Dictionary<string, object>();
  1146. obj.Add("merNo", merNo);
  1147. obj.Add("sn", sn);
  1148. obj.Add("batchUpdateType", 2);
  1149. obj.Add("rateDOs", rateDOs);
  1150. string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  1151. LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率");
  1152. LogHelper.Instance.WriteLog(content, "设置金控机具费率");
  1153. content = LkbEncrypt2(content);
  1154. string signstr = LkbSign(content);
  1155. headers.Add("X-Sign", signstr);
  1156. string req = "{\"param\":\"" + content + "\"}";
  1157. string result = function.PostWebRequest(reqUrl2, req, headers, "application/json");
  1158. LogHelper.Instance.WriteLog(result, "设置金控机具费率");
  1159. return result;
  1160. }
  1161. public Dictionary<string, object> LkbCallBack(out string sign)
  1162. {
  1163. Dictionary<string, object> obj = new Dictionary<string, object>();
  1164. string content = "{\"code\":\"0000\",\"msg\":\"OK\"}";
  1165. content = LkbEncrypt(content);
  1166. sign = LkbSign(content);
  1167. obj.Add("code", "000000");
  1168. obj.Add("message", "OK");
  1169. obj.Add("data", content);
  1170. return obj;
  1171. }
  1172. public string LkbEncrypt(string data)
  1173. {
  1174. return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt(data);
  1175. }
  1176. public string LkbEncrypt2(string data)
  1177. {
  1178. return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt2(data);
  1179. }
  1180. public string LkbSign(string data)
  1181. {
  1182. var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data);
  1183. var rsa = RSA.Create();
  1184. rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _);
  1185. string result = "";
  1186. var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
  1187. result = Convert.ToBase64String(buffer);
  1188. return result;
  1189. // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data);
  1190. }
  1191. #endregion
  1192. #region 拉卡拉
  1193. string lklPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCskXFaaOCWaQpAhh2SjBLVQ4y1FHCNXAM/lF9yIfwG+2Qg6ggNwWBkmqa0DF8mWYAIxab0Z5fKSXautkt3rFoLMhwX6udSxo9A70As08oko+3i9DvnsqneQ769iVqgfPc9p47X9WFykgPt4tQQBdXH+fkkYEz4g7xWu7yrHGd1AwIDAQAB"; //解密推送消息
  1194. string lklPriKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKyRcVpo4JZpCkCGHZKMEtVDjLUUcI1cAz+UX3Ih/Ab7ZCDqCA3BYGSaprQMXyZZgAjFpvRnl8pJdq62S3esWgsyHBfq51LGj0DvQCzTyiSj7eL0O+eyqd5Dvr2JWqB89z2njtf1YXKSA+3i1BAF1cf5+SRgTPiDvFa7vKscZ3UDAgMBAAECgYBB1Rxqsq7XAoxsMB3Q/cnjfOkNXZZQfyUoGKjOyCM24KmCmvVmlfp5drwY3M1humwLLKfz/h8chykVHqsspN4WXGFsW2DmRaySCfFX+xz/CD9hzpRXp2lhgEbsU853GWr6khqmCjOzhwRNUKp/cXmpYTU7AwdLlq1ED8KfKdDD9QJBAPGpwMMNOYPlSxfCx8Pw7BvuKwo7QWJH4XtfK4Y5OBf4FsN14J+cAwHQseSGU3BQPoGNfshQqEeyyINZDbY7jzUCQQC2zlA0hUOJv1FHgoklXJiEkx/B15ZbwiQquTCD/CxYymDUaJYNWxehXPOKMOGF3qGhrdEOpt1Sw9/EN18JaeJXAkEA4b6VFp+v7omu0A9f1KWlqaGeCvy3YzuKYljQq52fzKQvf38JyY9PL87nnnXsU6ph+VtX53+Q8wkLTcdOi8CvUQJAS3RvQK59CR9yAi1MRKKqxZYgtpcxFeDVotjbwK7W8zNdsm8U+KBP6af/UlwIyoPxfVXMg9q2YhI9i7U7Qhx1cwJBAOxZA4Zt9ye70/sv9w/KAYK/mXxUrJ6LFTDNOs7So1i6Fz5nyuOKHl8MWQi/5CXU7Baq10XZNkprFuRinG0exs0=";
  1195. public string LklDecrypt(string data)
  1196. {
  1197. return new RSAForJava().DecryptByPublicKey(data, lklPubKey);
  1198. }
  1199. #endregion
  1200. #region 星驿付
  1201. string XyfPubKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEH1CVYrJ/Y1xHFEavPgPRArGTZ2V9FTqT06R87OpwJblOF/qmsM2QL+62eT+jvETpBAjXzPp2e1SJlhKSWsHalQ=="; //解密推送消息
  1202. string XyfPriKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg0naAlZl+yns+V6hdbNdZm77iz8/aeI+41ynp/gK0GyigCgYIKoEcz1UBgi2hRANCAAQfUJVisn9jXEcURq8+A9ECsZNnZX0VOpPTpHzs6nAluU4X+qawzZAv7rZ5P6O8ROkECNfM+nZ7VImWEpJawdqV";
  1203. public string XyfSM2Decrypt(string data)
  1204. {
  1205. return SMUtil.Sm2Decrypt(data, XyfPriKey);
  1206. }
  1207. public string XyfSM4Decrypt(string data, string key)
  1208. {
  1209. return SMUtil.Sm4Decrypt(key, data);
  1210. }
  1211. #endregion
  1212. }
  1213. }