|
@@ -0,0 +1,140 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using Library;
|
|
|
+using LitJson;
|
|
|
+using System.Linq;
|
|
|
+using System.Data;
|
|
|
+using System.Threading;
|
|
|
+using MySystem.PxcModels;
|
|
|
+using System.Security.Cryptography;
|
|
|
+
|
|
|
+namespace MySystem
|
|
|
+{
|
|
|
+ public class SetDepositService
|
|
|
+ {
|
|
|
+ public readonly static SetDepositService Instance = new SetDepositService();
|
|
|
+ private SetDepositService()
|
|
|
+ { }
|
|
|
+
|
|
|
+ public void Start()
|
|
|
+ {
|
|
|
+ Thread th = new Thread(dosomething);
|
|
|
+ th.IsBackground = true;
|
|
|
+ th.Start();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void dosomething()
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ string data = RedisDbconn.Instance.RPop<string>("SetDepositQueue");
|
|
|
+ if (!string.IsNullOrEmpty(data))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ WebCMSEntities db = new WebCMSEntities();
|
|
|
+
|
|
|
+ db.SaveChanges();
|
|
|
+ db.Dispose();
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+
|
|
|
+ function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "设置费率队列异常");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Thread.Sleep(60000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #region 金控
|
|
|
+ // 开发环境
|
|
|
+ // 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 reqUrl = "https://test-push.mfe88.com/push-service/api/SETSERVICEFEE";
|
|
|
+
|
|
|
+ // 生产环境
|
|
|
+ string merchantNo = "4487378308096";
|
|
|
+ string clientId = "1243966544896";
|
|
|
+ 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";
|
|
|
+
|
|
|
+
|
|
|
+ public string SetDeposit(string sn, decimal serviceFee)
|
|
|
+ {
|
|
|
+ serviceFee = serviceFee * 100;
|
|
|
+ Dictionary<string, string> headers = new Dictionary<string, string>();
|
|
|
+ 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 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 toDecryptArray = Convert.FromBase64String(data);
|
|
|
+ var toSignArray = Convert.FromBase64String(signString);
|
|
|
+ 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 rsa = RSA.Create();
|
|
|
+ rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
|
|
|
+ string result = "";
|
|
|
+ List<byte> cache = new List<byte>();
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ public string Encrypt(string data)
|
|
|
+ {
|
|
|
+ return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt(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;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+}
|