| | |
| | | using Newtonsoft.Json; |
| | | using System.Security.Cryptography; |
| | | using System.Text; |
| | | using NewPdaSqlServer.util; |
| | | using System.Security.Cryptography; |
| | | |
| | | |
| | | using Newtonsoft.Json; |
| | | |
| | | namespace NewPdaSqlServer.util |
| | | { |
| | |
| | | //this.appSecret = "fa7c117c02fd4967849a612963c034ca"; |
| | | //this.version = "1.0"; |
| | | //正式 |
| | | this.appKey = "edfa5f089979c94f2db47ab0b2cdc35d"; |
| | | this.operateCompanyCode = "25832037"; |
| | | this.ownerCompanyCode = "25832037"; |
| | | this.appSecret = "4e46a1b61c5a8ce2fb2a519120f59520"; |
| | | this.version = "1.0"; |
| | | appKey = "edfa5f089979c94f2db47ab0b2cdc35d"; |
| | | operateCompanyCode = "25832037"; |
| | | ownerCompanyCode = "25832037"; |
| | | appSecret = "4e46a1b61c5a8ce2fb2a519120f59520"; |
| | | version = "1.0"; |
| | | } |
| | | |
| | | public string appKey { get; set; } |
| | |
| | | namespace NewPdaSqlServer.util |
| | | { |
| | | /// API相关参数定义的全局类 |
| | | public partial class ApiGlobal |
| | | public class ApiGlobal |
| | | { |
| | | private static readonly object _lock = new object(); |
| | | private static bool _initialized = false; |
| | | private static readonly object _lock = new(); |
| | | private static bool _initialized; |
| | | |
| | | static ApiGlobal() |
| | | { |
| | | Init(); |
| | | } |
| | | |
| | | public static SignConst signConst { get; set; } |
| | | |
| | | public static void Init() |
| | | { |
| | | if (!_initialized) |
| | | { |
| | | lock (_lock) |
| | | { |
| | | if (!_initialized) |
| | |
| | | _initialized = true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static SignConst signConst { get; set; } |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | public static MD5 md5 = MD5.Create(); |
| | | |
| | | public static string buildCurrentSign(IDictionary<string, string> parameters, String appSecret) |
| | | public static string buildCurrentSign( |
| | | IDictionary<string, string> parameters, string appSecret) |
| | | { |
| | | try |
| | | { |
| | | string secret = ":" + appSecret; |
| | | IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal); |
| | | IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator(); |
| | | StringBuilder query = new StringBuilder(); |
| | | var secret = ":" + appSecret; |
| | | IDictionary<string, string> sortedParams = |
| | | new SortedDictionary<string, string>(parameters, |
| | | StringComparer.Ordinal); |
| | | var dem = sortedParams.GetEnumerator(); |
| | | var query = new StringBuilder(); |
| | | while (dem.MoveNext()) |
| | | { |
| | | string key = dem.Current.Key; |
| | | string value = dem.Current.Value; |
| | | if (key == "sign") |
| | | { |
| | | continue; |
| | | } |
| | | var key = dem.Current.Key; |
| | | var value = dem.Current.Value; |
| | | if (key == "sign") continue; |
| | | if (!string.IsNullOrEmpty(key)) |
| | | { |
| | | query.Append(value).Append(":"); |
| | | } |
| | | } |
| | | string strvalue = query.ToString().TrimEnd(':') + secret; |
| | | |
| | | var strvalue = query.ToString().TrimEnd(':') + secret; |
| | | return MD5Encrypt32(strvalue); |
| | | } |
| | | catch (Exception) |
| | |
| | | |
| | | public static string MD5Encrypt32(string text) |
| | | { |
| | | string pwd = ""; |
| | | var pwd = ""; |
| | | // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode的选择 |
| | | byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(text)); |
| | | var s = md5.ComputeHash(Encoding.UTF8.GetBytes(text)); |
| | | // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 |
| | | for (int i = 0; i < s.Length; i++) |
| | | { |
| | | for (var i = 0; i < s.Length; i++) |
| | | //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 |
| | | pwd = pwd + s[i].ToString("x2"); |
| | | } |
| | | return pwd.ToString().ToLower(); |
| | | return pwd.ToLower(); |
| | | } |
| | | |
| | | public static long GetTimestamp(DateTime d) |
| | | { |
| | | TimeSpan ts = d.ToUniversalTime() - new DateTime(1970, 1, 1); |
| | | return (long)ts.TotalSeconds; //精确到秒 |
| | | var ts = d.ToUniversalTime() - new DateTime(1970, 1, 1); |
| | | return (long)ts.TotalSeconds; //精确到秒 |
| | | } |
| | | } |
| | | } |
| | |
| | | /// ApiCommonParam API请求对应的Common参数类 |
| | | public class ApiCommonParam |
| | | { |
| | | public ApiCommonParam() { } |
| | | public ApiCommonParam() |
| | | { |
| | | } |
| | | |
| | | public ApiCommonParam(string appKey, string version, string operateCompanyCode, string ownerCompanyCode, long timestamps) |
| | | public ApiCommonParam(string appKey, string version, |
| | | string operateCompanyCode, string ownerCompanyCode, long timestamps) |
| | | { |
| | | this.appKey = appKey; |
| | | this.version = version; |
| | |
| | | this.timestamps = timestamps; |
| | | } |
| | | |
| | | public string appKey { get; set; }//appKey |
| | | public string version { get; set; }//接口版本 |
| | | public string ownerCompanyCode { get; set; }//数据所属公司编码 |
| | | public string operateCompanyCode { get; set; }//操作者所属公司编码 |
| | | public string sign { get; set; }//签名 |
| | | public long timestamps { get; set; }//请求的时间戳 |
| | | public string appKey { get; set; } //appKey |
| | | public string version { get; set; } //接口版本 |
| | | public string ownerCompanyCode { get; set; } //数据所属公司编码 |
| | | public string operateCompanyCode { get; set; } //操作者所属公司编码 |
| | | public string sign { get; set; } //签名 |
| | | |
| | | public long timestamps { get; set; } //请求的时间戳 |
| | | //public object reserver { get; set; }//扩展字段 |
| | | |
| | | /// 构造对象 |
| | |
| | | { |
| | | // 确保初始化完成 |
| | | ApiGlobal.Init(); |
| | | |
| | | |
| | | // 构造对象(原有逻辑保持不变) |
| | | ApiCommonParam param = new ApiCommonParam( |
| | | ApiGlobal.signConst.appKey, |
| | | var param = new ApiCommonParam( |
| | | ApiGlobal.signConst.appKey, |
| | | ApiGlobal.signConst.version, |
| | | ApiGlobal.signConst.operateCompanyCode, |
| | | ApiGlobal.signConst.ownerCompanyCode, |
| | |
| | | var jsonParam = JsonConvert.SerializeObject(param); |
| | | //JavaScriptSerializer json = new JavaScriptSerializer(); |
| | | //string jsonParam = json.Serialize(param); |
| | | var paramDict = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonParam); |
| | | param.sign = SignUtils.buildCurrentSign(paramDict, ApiGlobal.signConst.appSecret); |
| | | var paramDict = |
| | | JsonConvert.DeserializeObject<Dictionary<string, string>>( |
| | | jsonParam); |
| | | param.sign = SignUtils.buildCurrentSign(paramDict, |
| | | ApiGlobal.signConst.appSecret); |
| | | return param; |
| | | } |
| | | } |
| | | } |
| | | } |