using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; namespace POSV.OtherMember.Utils { class MemberApiUtils { static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private static object _lock = new object(); public static string URL = "https://openapi.qimai.shop/api/v2"; public static string OPEN_KEY = "HrXrZCwlQ3rKVvfiNoVMPNsUHiqTnZUeY7EGpMQQyqK3m7zEwt"; private static MemberApiUtils _instance = null; public static MemberApiUtils Instance { get { if (_instance == null) { lock (_lock) { _instance = new MemberApiUtils(); } } return _instance; } } public string Sign(SortedList parameters) { return Sign(parameters, null); } public string Sign(SortedList parameters, List ignoreParameters) { IList keys = parameters.Keys; var paramNames = new List(keys.Count); paramNames.AddRange(keys); if (ignoreParameters != null && ignoreParameters.Count > 0) { foreach (string ignore in ignoreParameters) { paramNames.Remove(ignore); } } StringBuilder sb = new StringBuilder(); foreach (string key in paramNames) { sb.Append(key +"="+ parameters[key]+"&"); } string input = sb.ToString(); Console.WriteLine("签名字符串:" + input.Substring(0, input.Length - 1)); var encoding = Encoding.UTF8; HMACSHA1 hmac = new HMACSHA1(encoding.GetBytes(OPEN_KEY)); hmac.Initialize(); byte[] buffer = encoding.GetBytes(input.Substring(0,input.Length - 1)); byte[] hash = hmac.ComputeHash(buffer); Console.WriteLine("Open Key:" + OPEN_KEY); Console.WriteLine("签名后的Token:" + Convert.ToBase64String(hash)); return Convert.ToBase64String(hash); } /// /// 获取当前时间戳,兼容Java服务端 /// /// public string GetTimestamp() { TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1, 0, 0, 0).Ticks); return Convert.ToString((long)ts.TotalMilliseconds); } public string GetNonce() { Random random = new Random(); return Convert.ToString(random.Next(10000, 99999)); } public SortedList NewParameters() { SortedList parameters = new SortedList(); #if DEBUG parameters.Add("OpenId", "9275b5818f8659c30442fcb7b21da30a"); parameters.Add("GrantCode", "bcf53b6bec"); parameters.Add("Timestamp", GetTimestamp()); parameters.Add("Nonce", GetNonce()); #else parameters.Add("OpenId", "9275b5818f8659c30442fcb7b21da30a"); parameters.Add("GrantCode", "bcf53b6bec"); parameters.Add("Timestamp", GetTimestamp()); parameters.Add("Nonce", GetNonce()); #endif return parameters; } } }