|
|
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<string, string> parameters)
|
|
|
{
|
|
|
return Sign(parameters, null);
|
|
|
}
|
|
|
|
|
|
public string Sign(SortedList<string, string> parameters, List<string> ignoreParameters)
|
|
|
{
|
|
|
IList<string> keys = parameters.Keys;
|
|
|
|
|
|
var paramNames = new List<string>(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);
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取当前时间戳,兼容Java服务端
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
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<string, string> NewParameters()
|
|
|
{
|
|
|
SortedList<string, string> parameters = new SortedList<string, string>();
|
|
|
|
|
|
#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;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|