using System; using System.Collections.Generic; using System.Data; using System.Security.Cryptography; using System.Web; using System.Linq; using System.Text.RegularExpressions; using MySystem.Models; using Library; using LitJson; using System.Security.Cryptography.X509Certificates; using Org.BouncyCastle.Security; using Org.BouncyCastle.Crypto.Parameters; using System.Text; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Math; using System.Net.Http; using System.Threading.Tasks; using System.Threading; namespace MySystem { public class PublicImportDataService { public readonly static PublicImportDataService Instance = new PublicImportDataService(); private PublicImportDataService() { } public void Start(JobMqMsg jobInfo) { string data = ""; try { string orderString = jobInfo.OrderString; if (!string.IsNullOrEmpty(orderString)) { string key = orderString.Split(':')[1]; int BrandId = int.Parse(function.CheckInt(key.Split('_')[3])); bool op = true; while (op) { try { data = RedisDbconn.Instance.RPop(key); if (data != null) { string content = ""; if (data.Contains("#cut#")) { string[] dataList = data.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None); JsonData jsonData = JsonMapper.ToObject(dataList[1]); if (BrandId == 1) { content = Decrypt(jsonData["param"].ToString()); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 27) { content = LkbDecrypt(jsonData["param"].ToString()); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 2) { content = KDBDecrypt(jsonData["content"].ToString()); AppendLog(dataList[0], content, BrandId); if (content.StartsWith("[") && content.EndsWith("]")) { content = content.Replace("null", "\"\""); content = content.Replace("NULL", "\"\""); JsonData list = JsonMapper.ToObject(content); for (int i = 0; i < list.Count; i++) { InsertData(key, list[i].ToJson(), jobInfo, BrandId); } } else { InsertData(key, content, jobInfo, BrandId); } } else if (BrandId == 4) { content = LSDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString()); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 8 || BrandId == 9) { content = HKDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString(), BrandId); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 10) { content = LDDecrypt(jsonData["data"].ToString()); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 34) { string aesKey = jsonData["encryptKey"].ToString(); aesKey = LDZZBDecrypt(aesKey); content = AesDecrypt(jsonData["data"].ToString(), aesKey); AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } else if (BrandId == 12) { content = dataList[1]; JsonData header = JsonMapper.ToObject(dataList[0]); string signstr = header["X-Sign"][0].ToString(); SortedList dic = Newtonsoft.Json.JsonConvert.DeserializeObject>(content); string sign = function.BuildQueryString(dic); bool checkSign = BoxVerifySign(sign, signstr); if(checkSign) { AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } } else if (BrandId == 15 || BrandId == 17) { content = PosPDecrypt(jsonData["content"].ToString(), jsonData["sign"].ToString()); if(!string.IsNullOrEmpty(content)) { AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } } else if (BrandId == 30) { content = LklDecrypt(jsonData["data"].ToString()); if(!string.IsNullOrEmpty(content)) { AppendLog(dataList[0], content, BrandId); InsertData(key, content, jobInfo, BrandId); } } else { content = dataList[1]; InsertData(key, content, jobInfo, BrandId); } if (dataList.Length > 2) { string fileName = dataList[2]; if (System.IO.File.Exists(function.getPath("/redis/" + key + "/" + fileName + ".txt"))) { System.IO.File.Delete(function.getPath("/redis/" + key + "/" + fileName + ".txt")); } } } } else { // op = false; Thread.Sleep(function.get_Random(3000, 5000)); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), key + "队列异常"); Start(jobInfo); Thread.Sleep(60000); } } } } catch (Exception ex) { LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), "public_import_service"); Start(jobInfo); } } private void AppendLog(string header, string content, int BrandId) { string BrandName = ""; if (BrandId == 1) { BrandName = "金控"; } else if (BrandId == 2) { BrandName = "开店宝"; } else if (BrandId == 4) { BrandName = "乐刷"; } else if (BrandId == 6) { BrandName = "立刷"; } else if (BrandId == 22) { BrandName = "立刷微电签"; } else if (BrandId == 8) { BrandName = "海科电签"; } else if (BrandId == 9) { BrandName = "海科大POS"; } else if (BrandId == 10) { BrandName = "联动电签"; } else if (BrandId == 12) { BrandName = "盒易付"; } else if (BrandId == 15) { BrandName = "联客宝"; } else if (BrandId == 30) { BrandName = "拉卡拉"; } LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + header + "\r\n" + content, BrandName + "推送消息"); } private void InsertData(string key, string content, JobMqMsg jobInfo, int BrandId) { string Id = DoQueue(content, jobInfo.BrandInfo, BrandId); // 商户入库 if (key.Contains("_changebind_")) { int IdNum = int.Parse(Id); WebCMSEntities db = new WebCMSEntities(); BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum); if (bind != null) { // string ProductType = BrandId.ToString(); // bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType); // if (!check) // { db.Merchants.Add(new Merchants() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, MerNo = bind.MerNo, //商户编号 MerName = bind.MerName, //商户名称 AgentName = bind.AgentName, //机构名称 ProductType = BrandId.ToString(), //产品类型 Remark = "商户入库", //注释 CreateTime = DateTime.Now, //创建时间 UpdateTime = DateTime.Now, //更新时间 SnNo = bind.MerSnNo, //SN号 MerMobile = bind.MerNewSnNo, MerIdcardNo = bind.SeoKeyword, SeoTitle = bind.SeoTitle, Field1 = bind.MerOperateType, Field2 = bind.Field1, Status = 1, }); db.SaveChanges(); // } } db.Dispose(); } try { // PublicImportDataServiceRds.Instance.DoQueue(content, jobInfo.BrandInfo, BrandId); } catch{} } public void Test(JobMqMsg jobInfo, string date, int kind) { try { string orderString = jobInfo.OrderString; if (!string.IsNullOrEmpty(orderString)) { string key = orderString.Split(':')[1]; int BrandId = int.Parse(function.CheckInt(key.Split('_')[3])); string source = function.ReadInstance("/log/金控推送消息/" + date.Replace("-", "/") + "/content.log"); string patten = ""; if (kind == 1) { patten = "{.*?绑定.*?}]\"}"; } else if (kind == 2) { patten = "{.*?2022年飞天系列-小宝电签.*?}"; } else if (kind == 3) { patten = "{.*?otherFee.*?}"; } if (!string.IsNullOrEmpty(patten)) { MatchCollection mc = Regex.Matches(source, patten); //交易 foreach (Match sub in mc) { string content = sub.Value; string Id = DoQueue(content, jobInfo.BrandInfo, BrandId); // 商户入库 if (key.Contains("_bind_")) { int IdNum = int.Parse(Id); WebCMSEntities db = new WebCMSEntities(); BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum); if (bind != null) { string ProductType = BrandId.ToString(); bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType); if (!check) { db.Merchants.Add(new Merchants() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, MerNo = bind.MerNo, //商户编号 MerName = bind.MerName, //商户名称 AgentName = bind.AgentName, //机构名称 ProductType = BrandId.ToString(), //产品类型 Remark = "商户入库", //注释 CreateTime = DateTime.Now, //创建时间 UpdateTime = DateTime.Now, //更新时间 SnNo = bind.MerSnNo, //SN号 MerMobile = bind.MerNewSnNo, MerIdcardNo = bind.SeoKeyword, Status = 1, }); db.SaveChanges(); } } db.Dispose(); } } } } } catch (Exception ex) { LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_import_service"); } } public string DoQueue(string data, Brand brand, int BrandId = 1) { if (string.IsNullOrEmpty(data)) { return "0"; } //数据开始入库 data = data.Replace("null", "\"\""); JsonData jsonObj = JsonMapper.ToObject(data); string fields = "ProductType,"; string fieldvals = BrandId + ","; fields += "SeoDescription,"; fieldvals += "'" + HttpUtility.UrlEncode(data) + "',"; if (!brand.IsCheck) { fields += "Status,"; fieldvals += "1,"; } string sourceCheckKey = ""; foreach (FieldRelationTable field in brand.FieldRelation) { string fType = field.TargetFieldType; string fName = field.TargetFieldName; string sName = field.SourceFieldName; string val = ""; if(sName == "#{now}#") { val = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } else if (sName.Contains(",")) { string[] flist = sName.Split(','); if (flist.Length == 2) { if (data.Contains("\"" + flist[1] + "\"")) { val = jsonObj[flist[0]][flist[1]].ToString(); } } else if (flist.Length == 3) { if (data.Contains("\"" + flist[2] + "\"")) { val = jsonObj[flist[0]][flist[1]][flist[2]].ToString(); } } } else { if (data.Contains("\"" + sName + "\"")) { val = jsonObj[sName].ToString(); } } string checkFields = "," + brand.CheckKey + ","; // if (fName == brand.CheckKey) if (checkFields.Contains("," + fName + ",")) { if (fType == "number") { sourceCheckKey += " and " + fName + "=" + decimal.Parse(function.CheckNum(val)) + ""; } else if (fType == "date") { sourceCheckKey += " and " + fName + "='" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "'"; } else if (fType == "timestempms") { sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'"; } else if (fType == "timestemps") { sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'"; } else if (fType == "timestring") { 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); sourceCheckKey += " and " + fName + "='" + datetime + "'"; } else { sourceCheckKey += " and " + fName + "='" + val + "'"; } } fields += fName + ","; if (fType == "number") { fieldvals += decimal.Parse(function.CheckNum(val)) + ","; } else if (fType == "date") { fieldvals += "'" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "',"; } else if (fType == "timestempms") { fieldvals += "'" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',"; } else if (fType == "timestemps") { fieldvals += "'" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',"; } else if (fType == "timestring") { 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); fieldvals += "'" + datetime + "',"; } else { fieldvals += "'" + val + "',"; } } string checksql = "select Id from " + brand.TargetTableName + " where ProductType='" + BrandId + "'" + sourceCheckKey; if(brand.TargetTableName == "BindRecord") { string Id = RedisDbconn.Instance.Get("BindRecordIdLimit"); if(string.IsNullOrEmpty(Id)) Id = "700000"; checksql += " and Id>" + Id; } else if(brand.TargetTableName == "ActivateRecord") { string Id = RedisDbconn.Instance.Get("ActivateRecordIdLimit"); if(string.IsNullOrEmpty(Id)) Id = "500000"; checksql += " and Id>" + Id; } else if(brand.TargetTableName == "TradeFluxRecord") { string Id = RedisDbconn.Instance.Get("TradeFluxRecordIdLimit"); if(string.IsNullOrEmpty(Id)) Id = "400000"; checksql += " and Id>" + Id; } if(brand.TargetTableName == "TradeRecord") { // checksql = "select Id from " + brand.TargetTableName + " where Id>1520000 and ProductType='" + BrandId + "'" + sourceCheckKey; checksql = "select Id from TradeRecord where Id=0"; } DataTable dt = dbconn.dtable(checksql); if (dt.Rows.Count < 1) { fields = fields.TrimEnd(','); fieldvals = fieldvals.TrimEnd(','); if(!fields.Contains("CreateDate")) { fields += ",CreateDate"; fieldvals += ",'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; } string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ");select @@IDENTITY"; dbconn.op(sql); if(brand.TargetTableName == "BindRecord") { string[] fieldList = fields.Split(','); string[] fieldValList = fieldvals.Split(','); string mer_field = "CreateDate,UpdateDate,Remark,CreateTime,UpdateTime,Status"; 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"; int index = 0; foreach(string field in fieldList) { if(field == "MerNo") { mer_field += ",MerNo"; mer_val += "," + fieldValList[index]; } if(field == "MerName") { mer_field += ",MerName"; mer_val += "," + fieldValList[index]; } if(field == "AgentName") { mer_field += ",AgentName"; mer_val += "," + fieldValList[index]; } if(field == "ProductType") { mer_field += ",ProductType"; mer_val += "," + fieldValList[index]; } if(field == "MerSnNo") { mer_field += ",SnNo"; mer_val += "," + fieldValList[index]; } if(field == "MerNewSnNo") { mer_field += ",MerMobile"; mer_val += "," + fieldValList[index]; } if(field == "SeoKeyword") { mer_field += ",MerIdcardNo"; mer_val += "," + fieldValList[index]; } if(field == "SeoTitle") { mer_field += ",SeoTitle"; mer_val += "," + fieldValList[index]; } if(field == "MerOperateType") { mer_field += ",Field1"; mer_val += "," + fieldValList[index]; } if(field == "Field1") { mer_field += ",Field2"; mer_val += "," + fieldValList[index]; } index += 1; } sql = "insert into Merchants (" + mer_field + ") values (" + mer_val + ");"; dbconn.op(sql); } DataTable result = dbconn.dtable("select Id from " + brand.TargetTableName + " order by Id desc limit 1"); if (result.Rows.Count > 0) { return result.Rows[0][0].ToString(); } } return "0"; } #region 金控 // 开发环境 // string clientId = "1243966544896"; // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB"; // 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"; // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB"; // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB"; // 生产环境 string clientId = "4487378308096"; string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2HxPVZ5ZIxIWfr24qB45PAz9WfjN9CiF1x9Lz3P/tVvIXFdBaUw+9zxCAPRDGQxJId7anjEjCOuAIKpFOiTPhVqHTHd3075FFsW5fL7lFCOFJELTj+mVamAIbKalAuRzIX0m0VQUXd+madB+yRQSBjkOIboAMYQ9amf99SqI9KwIDAQAB"; string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrSrNKkBt/X8Fkd7viGpTMk+GdJgE+SvoA4PSjccpZoLWnwxXsC8K/7pfm9uGxPjte9e4RznXE5nuhSrcfls4lDWhTrGd/lj3Id8OCM+yEG+xilJs1lvXJjHDhL6/wa+TE5NSzWoKgXnyeHF3TSHMbUefLLtoKqL3j4h4lPqrjiQIDAQAB"; 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="; string reqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE"; string reqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE"; public bool Verify() { 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"; string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw="; // var signer = SignerUtilities.GetSigner("SHA256withRSA"); // var pubkey = Convert.FromBase64String(mfe88PublicKey); // // var pubkey = StrToToHexByte(mfe88PublicKey); // var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(pubkey); // signer.Init(false, publicKeyParam); // var signBytes = Convert.FromBase64String(signString); // var plainBytes = Convert.FromBase64String(data); // signer.BlockUpdate(plainBytes, 0, plainBytes.Length); // return signer.VerifySignature(signBytes); var toDecryptArray = Convert.FromBase64String(data); var toSignArray = Convert.FromBase64String(signString); // var pubkey = Encoding.UTF8.GetBytes(mfe88PublicKey); // using (var x509 = new X509Certificate2(pubkey)) // { // using (var rsa = x509.GetRSAPublicKey()) // { // return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); // } // } var rsa = RSA.Create(); rsa.ImportRSAPublicKey(Convert.FromBase64String(mfe88PublicKey), out _); return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); } private byte[] StrToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } public string Decrypt(string data) { var toDecryptArray = Convert.FromBase64String(data); var rsa2 = RSA.Create(); rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _); string result = ""; List cache = new List(); for (int i = 0; i < toDecryptArray.Length; i++) { cache.Add(toDecryptArray[i]); if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length) { var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1); result += System.Text.Encoding.UTF8.GetString(ContentArray); cache.Clear(); } } return result; } public string SetDeposit(string sn, decimal serviceFee) { serviceFee = serviceFee * 100; Dictionary headers = new Dictionary(); headers.Add("X-Client-ID", clientId); headers.Add("X-Security", "RSA"); string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}"; content = Encrypt(content); string signstr = Sign(content); headers.Add("X-Sign", signstr); string req = "{\"param\":\"" + content + "\"}"; string result = function.PostWebRequest(reqUrl, req, headers, "application/json"); return result; } public string SetFee(string merNo, string sn, decimal fee = 0.6M) { List rateDOs = new List(); rateDOs.Add(new SetDepositList() { productSubType = "2020032007vz7Ux6", updateValue = fee, updateType = 0 }); Dictionary headers = new Dictionary(); headers.Add("X-Client-ID", clientId); headers.Add("X-Security", "RSA"); Dictionary obj = new Dictionary(); obj.Add("merNo", merNo); obj.Add("sn", sn); obj.Add("batchUpdateType", 2); obj.Add("rateDOs", rateDOs); string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj); LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率"); LogHelper.Instance.WriteLog(content, "设置金控机具费率"); content = Encrypt2(content); string signstr = Sign(content); headers.Add("X-Sign", signstr); string req = "{\"param\":\"" + content + "\"}"; string result = function.PostWebRequest(reqUrl2, req, headers, "application/json"); LogHelper.Instance.WriteLog(result, "设置金控机具费率"); return result; } public Dictionary CallBack() { string trace = function.MD5_32(Guid.NewGuid().ToString()) + function.get_Random(8); Dictionary obj = new Dictionary(); // Dictionary headers = new Dictionary(); // headers.Add("X-Client-ID", clientId); // headers.Add("X-Security", "RSA"); string content = "{\"code\":\"0000\",\"msg\":\"OK\"}"; content = Encrypt(content); // string signstr = Sign(content); // headers.Add("X-Sign", signstr); obj.Add("code", "000000"); obj.Add("message", "OK"); obj.Add("trace", ""); obj.Add("data", content); return obj; } public string Encrypt(string data) { return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt(data); } public string Encrypt2(string data) { return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt2(data); } public string Sign(string data) { var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data); var rsa = RSA.Create(); rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _); string result = ""; var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); result = Convert.ToBase64String(buffer); return result; // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data); } #endregion #region 开店宝 string KdbApiUrl = "https://kzy.kdb-tj.com:5055/api"; string KDBAESKEY = "gvB%UOF3eBqKf!$k"; // string Kdb_Rsa_PinlicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJzLZwTVqTU10mnPaxhTCQa89uR9hk/1MGJcKS6lpNDZaJFrXI48tTsk46jJgkXnDMqJoNIk+iLWXhKK/n8azQMCAwEAAQ=="; string Kdb_Rsa_PrivateKey = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAl2x9dSSCfNDik6VM2dn/SK1ONSbb7AKyXM1gHw8PMbzWN1pK7YGaPqHlIRbAeFeIvLKVeMxrji+63W6LpB0yDQIDAQABAkAfpHUnCIUYDhJ65f0EPTDCgCyqoL8uN3YMPIKMmvoC22/i7AC6zf/bWk4JdratN+gvvnjGgHQff6HH5dOQ6sbFAiEAxPYSLADzIv374J8O+LluXIcgI5zXm4r4dMtKbCmmWSsCIQDE0BRKsBcBZ9NvJ9Km+m/d1hN9v5hFT842zrkUFJmVpwIgBdYc17z3d3P7QL613NzxzkAazbNaGDvX/O4BOI9LZJ0CICrZElHgXGHV9NYyWU45H7mwLbYmzEPqx/5uqySQB4/pAiBgKYv3RGnsZ8Zm1EKAJjUX7ehdteBgPSA/UgIDZQ4oyw=="; // 查询机构政策列表 public string GetPolicyList() { string url = KdbApiUrl + "/marketing/plan/query/list"; //[{"id":100014,"name":"韩测试营销方案(韩测试营销方案)"}] return PostKDB(url, ""); } // 查询政策下的押金 public string GetDepositList(string planId) { string url = KdbApiUrl + "/marketing/deposit/query/planId"; string content = "{\"planId\":\"" + planId + "\"}"; //[{"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}] return PostKDB(url, content); } // 修改押金接口 public string ModifyDeposit(string PosSn, string depositId) { string url = KdbApiUrl + "/marketing/deposit/query/planId"; string content = "{\"posSnStart\":\"" + PosSn + "\",\"posSnEnd\":\"" + PosSn + "\",\"depositId\":" + depositId + "}"; return PostKDB(url, content); } public string KDBDecrypt(string data) { string result = AesDecrypt(data, KDBAESKEY); return result; } public string AesDecrypt(string str, string key) { if (string.IsNullOrEmpty(str)) return null; byte[] toEncryptArray = Convert.FromBase64String(str); System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged { Key = Encoding.UTF8.GetBytes(key), Mode = System.Security.Cryptography.CipherMode.ECB, Padding = System.Security.Cryptography.PaddingMode.PKCS7, }; System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray); } public string AesEncrypt(string str) { // if (string.IsNullOrEmpty(str)) return null; Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str); System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged { Key = Encoding.UTF8.GetBytes(KDBAESKEY), Mode = System.Security.Cryptography.CipherMode.ECB, Padding = System.Security.Cryptography.PaddingMode.PKCS7 }; System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor(); Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray); } public string PostKDB(string path, string content) { string url = KdbApiUrl + path; content = PublicImportDataService.Instance.AesEncrypt(content); string timestamp = function.GetCurTimestamp().ToString(); string sign = PublicImportDataService.Instance.KDBSign(content + timestamp); string req = "{\"agencyId\":\"3013890129\",\"content\":\"" + content + "\",\"timestamp\":\"" + timestamp + "\",\"sign\":\"" + sign + "\"}"; string result = PostWebRequest(url, req, new Dictionary()); return result; } private string PostWebRequest(string postUrl, string paramData, Dictionary headers) { string ret = string.Empty; try { byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData); // 设置提交的相关参数 System.Net.HttpWebRequest request = System.Net.WebRequest.Create(postUrl) as System.Net.HttpWebRequest; System.Text.Encoding myEncoding = System.Text.Encoding.UTF8; request.Method = "POST"; request.KeepAlive = false; request.AllowAutoRedirect = true; request.ContentType = "application/json"; foreach (string key in headers.Keys) { request.Headers.Add(key, headers[key]); } 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)"; request.ContentLength = postData.Length; // 提交请求数据 System.IO.Stream outputStream = request.GetRequestStream(); outputStream.Write(postData, 0, postData.Length); outputStream.Close(); System.Net.HttpWebResponse response; System.IO.Stream responseStream; System.IO.StreamReader reader; string srcString; response = request.GetResponse() as System.Net.HttpWebResponse; responseStream = response.GetResponseStream(); reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.UTF8); srcString = reader.ReadToEnd(); ret = srcString; //返回值赋值 reader.Close(); } // catch (System.Net.WebException ex) // { // System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)ex.Response; // System.IO.Stream myResponseStream = response.GetResponseStream(); // //获取响应内容 // System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream); // ret = myStreamReader.ReadToEnd(); // myResponseStream.Close(); // } catch (Exception ex) { ret = "fail"; LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "请求开店宝API异常"); } return ret; } public string KDBSign(string data) { var rsa = RSA.Create(); var key = Convert.FromBase64String(Kdb_Rsa_PrivateKey); var content = Encoding.UTF8.GetBytes(data); rsa.ImportPkcs8PrivateKey(key, out _); var result = rsa.SignData(content, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); return Convert.ToBase64String(result); // return CSRSAHelper.Sign(data, Kdb_Rsa_PrivateKey, "utf-8"); } #endregion #region 乐刷 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=="; public string LSDecrypt(string data, string sign) { var toDecryptArray = Convert.FromBase64String(sign); var rsa2 = RSA.Create(); rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(LSPrivateKey), out _); var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1); string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray); return AesDecrypt(data, aeskey); } #endregion #region 海科 string HKPrivateKey1 = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAK5iJ2q2nF+9jEnof9VYhMdbAgI0ZS4cYmgWTMW2JR61lJhR0GH+A/m6mjN9FsTS6Bq03u/+e6BKdE6VqMGk0q7asi2VZIgD59zj4HubS8EFrcb5ZprwmGLnG71cBga7V5EWnHxSB9BlbFt6rGeQiit8NSbv62NxGh1U+rAVE/a3AgMBAAECgYEApQGxpJNowls8bQ74LytUcMMX0ng7qXcoUq+PM6IX28gb9EmuMZtHrb05fjEGI3YiNGsjbNpTpqftCBMrHRjWVRgb0PDf/zD9YYrxmcP9DWKQjG5f1ygYtQBlnOPEX963Y2SXrsTKr4+szTpI8r6YqFfVbbooKVMesCBtshgg16kCQQDYHGDuCuOzULP84QvGi8z+wHNv0arFpYYxvwitntD7K3iolAh8gTDWeaC03MHruGM43ybCUi9EHhCrcVKjgpK1AkEAzpIUajdmAAwtwGg4G0v7tP/ulmpGhnALVN84gSMAc5f8D6aCnoUyle+GylwRBw9WblHBLxsOtARQIvvdphDrOwJBAIFvXc60zvQTHfoTf84G5VyfP4R1e2atYNZiqHv0Zw5IVxgAsaSAbBPI/SvWHH9mDGd/n+M6/fw6VZmZYfl0txECQQCQB3yifpPpDpTL5h7QsY8EKbqyN9GKpQ7Rk35zU/NZpawDQYcrfhXCQytJZx4cPQ53hxtae9QpoiQ58EEgLAXHAkABzJ/QDS1QfYrkP9t9X+Pny2iEuWGeIHyfsfSKQKr5pv16k1WqiIvlFRyDPl+aw5IOedkYb0vSkcU1KzjMW+Ra"; string HKPrivateKey2 = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIyARvyTYvGledv+4E3D8FxsS07pmzZYJkIdWxov/xApB6Mb2BVP6BkhsRyoySWbEyiYlZpx1A3b7D4yc7vD3WfB0i0cGPwMdJP/vGuzWfF2mLY0v4mJrxdXuGeWpfWnl4DP0aQS6qkUlei6f0vWS76wdpHvKUGb17Nz/f9ezr5tAgMBAAECgYBoLhn04Qil67BvKw+BOj+5GGfC7L81TamYrpHF2j8D6ZiLHnNcYjLUp8HfYVw9MT7EhFex/KNjX2ZOPDTKzpIVXofs9or1fqPYwUewBFHD9rwTrThKySdwbKrRAFNw7YXaJvMEdpPaxBBsMvfC5EdvrFejZ80TpGGfXyIXaxuC1QJBAP/6XsinJ4ZgoJj2PRPc5pWRqUssERV2w07LCPEGxxyECoyEzrTIoj7KcwSXYTSx2GGeEiSpijye9rFCHoHUNF8CQQCMg14KaLi3RjddGYatmO4SHr/IFlwpjL16rw+poOHN1WwMmex1qd3JfNab0vi5GEkFg1fAbIMRiwksvXS0ReCzAkB5/dcoJ0lV6D0BSPDIw5D8nQOieKjXotbneSmUvJctxtvEJhLg43E3HYJ9IKvJ0iv+MbgR0t63j0agKZOiagBfAkAuU3ViyynzStQf/rV3cI81LCwgpLaYAE3MMAFi9KbdvPqVoP3jwTBdKKp8z26vX8FbbvU0fNItq4BH3uKmOM+fAkAnBwxmorni7Y6Zs24pevDVqMpcF9SkOigRKsO9Lc1HuAJuxHEoPW5KeascBVe3HfYqgt4HWIxNy/d2MvpvNaWo"; public string HKDecrypt(string data, string sign, int BrandId) { var toDecryptArray = Convert.FromBase64String(sign); var rsa2 = RSA.Create(); string HKPrivateKey = ""; if(BrandId == 8) { HKPrivateKey = HKPrivateKey1; } else if(BrandId == 9) { HKPrivateKey = HKPrivateKey2; } rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(HKPrivateKey), out _); var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1); string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray); return AesDecrypt(data, aeskey); } #endregion #region 联动 //测试环境 // string LDRequestUrl = "http://111.14.221.188:18066/CloudTerminalServiceAction/"; // string AgentNo = "LD110014"; // string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3WG04QXTzWBg2rj4BbSmnXVTqQiCk2lZ7yi2vur2LxsSc+KN0o1W9y2AkCHcFIAk2aAfMEMQYTO3HQ+F/Vcb27BNBSjnaOLfGv0PXNHKyVzC4EQLe4M5Pqd1wMl6NaZK+HnyrPBTnfsGeywhGJc1Ke96ANrydhk7UbwezydC7nQIDAQAB"; // 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=="; //生产环境 string LDRequestUrl = "http://ldys.umpay.com/service_exter/CloudTerminalServiceAction/"; string AgentNo = "LD112692"; string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGtWShTeFEgSSFx3PJXcjCOmS+OgtcUvPOHhpALY3Orm6t7rl1E0n3j7XlM049YwwtGRJI4OWhgrtR4/AnOMBXdyMBoKxF23uay1WQiNekzfUrTwil7/CRrQ+VlGgPe6dr3WQT2/HLbzMnJHeoIZ4KSIj/7pgAwTF4ciL1UC3awwIDAQAB"; 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=="; public string LDEncrypt(string data) { return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", LDPublicKey).Encrypt(data); } public string LDDecrypt(string data) { var toDecryptArray = Convert.FromBase64String(data); var toKey = Convert.FromBase64String(LDPrivateKey); var rsa = RSA.Create(); rsa.ImportPkcs8PrivateKey(toKey, out _); string result = ""; List cache = new List(); for (int i = 0; i < toDecryptArray.Length; i++) { cache.Add(toDecryptArray[i]); if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length) { var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1); result += System.Text.Encoding.UTF8.GetString(ContentArray); cache.Clear(); } } return result; } #endregion #region 联动掌中宝 //测试环境 // 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=="; //生产环境 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"; public string LDZZBDecrypt(string data) { var toDecryptArray = Convert.FromBase64String(data); var toKey = Convert.FromBase64String(LDZZBPrivateKey); var rsa = RSA.Create(); rsa.ImportPkcs8PrivateKey(toKey, out _); var ContentArray = rsa.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1); string result = System.Text.Encoding.UTF8.GetString(ContentArray); // List cache = new List(); // for (int i = 0; i < toDecryptArray.Length; i++) // { // cache.Add(toDecryptArray[i]); // if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length) // { // var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1); // result += System.Text.Encoding.UTF8.GetString(ContentArray); // cache.Clear(); // } // } return result; } #endregion #region 盒易付 //测试环境 // string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMQxp24mjxDTr13uPW0y+tiO1yXFGw7P/pPQ0oZKK7F6KstEaus7pLEywBZ5XRXE5jgkhR2TS7Ne7djJfbpn5yFc6pPlz3ZsOfBVeB88NEwhx6xzCGX2eqSSkO33n8w2G0xc2ss5HpYBarT00NBZWhrwOXpdRPYLOYHKVU3Rl+FA9xDw/wYfoWvrr+JSfHRGn/ENMmQFEdckAbPauKaQMrZD2kz+PRrhq56eWnCuVQPcaz/jroVT8qQEgkg2IsNy+DwfLOIqm8IySEpxnQ5wN/KvsQJc2wXDQNf9F5kvWwjoqSSP0qJS+oPRXET+zJb+WTk2y5M6AYoC9NodwsC4NwIDAQAB"; //生产环境 string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjmjoQirIYZBD9Qon2HkF4j/NAINXtJ7Lzq/WXxTF7t7mg7LNARt0+ZZaeWx8caq2fv5zdsGyyoInL23cBtDI5KmFfK69iA0ygQMK0WbiKqsUB1OpPbT3+9zLuadIJAznjA223lY6CIjTpdLZhaRjImNVqc60bdkx6YsQcA+xW+3r1JH4PPHb7yBEbkKIX8OhyX7U4p0TkbDkAobbjHr5YB9gmYLoSFJMOPfTtSExkv7/Y7IVR9poZAHcr3teFoAiXW3RzxelRtnXxIkl/6AUOKoL5fhr/UTUN+Q18uzNljYWr6SwnTI3EmtzgykaewWtZvV85Xdhe/BjiQ5Xor7YbwIDAQAB"; public bool BoxVerifySign(string toSignStr, string signStr) { byte[] toSignByte = Encoding.Default.GetBytes(toSignStr); byte[] signByte = Convert.FromBase64String(signStr); var toKey = Convert.FromBase64String(BoxPublicKey); var rsaroot = RSA.Create(); rsaroot.ImportSubjectPublicKeyInfo(toKey, out _); var publicKeyParameters = rsaroot.ExportParameters(false); using (var rsa = RSA.Create()) { rsa.ImportParameters(publicKeyParameters); var sha256 = SHA256.Create(); var hash = sha256.ComputeHash(toSignByte); return rsa.VerifyHash(hash, signByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); } } #endregion #region POSP //测试环境 string PosPKey = "6v8cr0uyhtwtawda"; //生产环境 // string PosPKey = "6v8cr0uyhtwtawda"; public string PosPDecrypt(string toSignStr, string signStr) { string result = AesDecrypt(toSignStr, PosPKey); SortedList res = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); if(result.Contains("\"sign\"")) { res.Remove("sign"); } SortedList newres = new SortedList(); foreach(string key in res.Keys) { if(!string.IsNullOrEmpty(res[key])) { newres.Add(key, res[key]); } } string signstr = function.BuildQueryString(newres) + PosPKey; string sign = function.MD532(signstr).ToUpper(); if(signStr == sign) { return result; } return ""; } #endregion #region 来客吧L版 // 开发环境 // string clientId = "1243966544896"; // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB"; // 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"; // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB"; // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB"; // 生产环境 string lkbClientId = "4487378308096"; string lkbMfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9w73juFDZe2n+D4Izav/B3VmkjP1b4wkc/4rv72DeK8uwGx1qWuEm+S5leG7v1YeyNXkTm/DW2I+iAJhvn+ILMErJCc8TK7hZlrzirhMTZtGB52Ai9IIi/SmpZtF9e2BV3S0feEvT83bi3ShnJDvsFsy6f0f/My63aNfjFcdaXwIDAQAB"; string lkbClientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3YYYwaQyl+poYl+CQEFiLjQi7R0LEG73360Wup4frAy0zPZYlch3MwUChA7gPXVND/bUY+6vzJ3mkeoFvFtOkhrV0Wm8PWWnBVzanq3P91rFqMljMQlNxz4nBNeH2yHX9lCf6HQCYfjsYtadrGyUQw3ZMs+b0sMI2nZe/oKZo1wIDAQAB"; 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"; string lkbReqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE"; string lkbReqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE"; public bool LkbVerify() { 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"; string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw="; var toDecryptArray = Convert.FromBase64String(data); var toSignArray = Convert.FromBase64String(signString); var rsa = RSA.Create(); rsa.ImportRSAPublicKey(Convert.FromBase64String(lkbMfe88PublicKey), out _); return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); } private byte[] LkbStrToToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } public string LkbDecrypt(string data) { var toDecryptArray = Convert.FromBase64String(data); var rsa2 = RSA.Create(); rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _); string result = ""; List cache = new List(); for (int i = 0; i < toDecryptArray.Length; i++) { cache.Add(toDecryptArray[i]); if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length) { var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1); result += System.Text.Encoding.UTF8.GetString(ContentArray); cache.Clear(); } } return result; } public string LkbSetDeposit(string sn, decimal serviceFee) { serviceFee = serviceFee * 100; Dictionary headers = new Dictionary(); headers.Add("X-Client-ID", lkbClientId); headers.Add("X-Security", "RSA"); string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}"; content = LkbEncrypt(content); string signstr = LkbSign(content); headers.Add("X-Sign", signstr); string req = "{\"param\":\"" + content + "\"}"; string result = function.PostWebRequest(reqUrl, req, headers, "application/json"); return result; } public string LkbSetFee(string merNo, string sn, decimal fee = 0.6M) { List rateDOs = new List(); rateDOs.Add(new SetDepositList() { productSubType = "2020032007vz7Ux6", updateValue = fee, updateType = 0 }); Dictionary headers = new Dictionary(); headers.Add("X-Client-ID", lkbClientId); headers.Add("X-Security", "RSA"); Dictionary obj = new Dictionary(); obj.Add("merNo", merNo); obj.Add("sn", sn); obj.Add("batchUpdateType", 2); obj.Add("rateDOs", rateDOs); string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj); LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率"); LogHelper.Instance.WriteLog(content, "设置金控机具费率"); content = LkbEncrypt2(content); string signstr = LkbSign(content); headers.Add("X-Sign", signstr); string req = "{\"param\":\"" + content + "\"}"; string result = function.PostWebRequest(reqUrl2, req, headers, "application/json"); LogHelper.Instance.WriteLog(result, "设置金控机具费率"); return result; } public Dictionary LkbCallBack(out string sign) { Dictionary obj = new Dictionary(); string content = "{\"code\":\"0000\",\"msg\":\"OK\"}"; content = LkbEncrypt(content); sign = LkbSign(content); obj.Add("code", "000000"); obj.Add("message", "OK"); obj.Add("data", content); return obj; } public string LkbEncrypt(string data) { return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt(data); } public string LkbEncrypt2(string data) { return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt2(data); } public string LkbSign(string data) { var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data); var rsa = RSA.Create(); rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _); string result = ""; var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); result = Convert.ToBase64String(buffer); return result; // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data); } #endregion #region 拉卡拉 string lklPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCskXFaaOCWaQpAhh2SjBLVQ4y1FHCNXAM/lF9yIfwG+2Qg6ggNwWBkmqa0DF8mWYAIxab0Z5fKSXautkt3rFoLMhwX6udSxo9A70As08oko+3i9DvnsqneQ769iVqgfPc9p47X9WFykgPt4tQQBdXH+fkkYEz4g7xWu7yrHGd1AwIDAQAB"; //解密推送消息 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="; public string LklDecrypt(string data) { return new RSAForJava().DecryptByPublicKey(data, lklPubKey); } #endregion } }