using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using System.Web.Script.Serialization; namespace DataexchangeServer.Helper { /// SignUnit 签名属性常量类 public class SignConst { public SignConst() { //this.appKey = "270ea37852e8f7cced1c2a7198b818b1"; // this.operateCompanyCode = "40373154"; // this.ownerCompanyCode = "40373154"; // this.appSecret = "d74b514466f3dac0136b5672b914176a"; this.appKey = "86d3ae868978beff0d39948c420ec4ff"; this.operateCompanyCode = "52265397"; this.ownerCompanyCode = "52265397"; this.appSecret = "978f5b950aefc3c1e0d4a56a562b0f8c"; // this.appKey = "56d6b68cd8fff627bf3203b44d9c8821"; // this.operateCompanyCode = "19378112"; // this.ownerCompanyCode = "19378112"; // this.appSecret = "4b26874c9d7ee95c3de85390d96dbbaf"; this.version = "1.0"; } public string appKey { get; set; } public string version { get; set; } public string operateCompanyCode { get; set; } public string ownerCompanyCode { get; set; } public string appSecret { get; set; } } } namespace DataexchangeServer.Helper { /// API相关参数定义的全局类 public partial class ApiGlobal { public ApiGlobal() { } /// 初始化 public static void Init() { signConst = new SignConst(); } public static SignConst signConst { get; set; } } } namespace DataexchangeServer.Helper { /// SignUtils 签名工具类 public class SignUtils { public static MD5 md5 = MD5.Create(); private static IEnumerator> dem; public static object buildCurrentSign(IDictionary parameters, String appSecret) { try { string secret = ":" + appSecret; IDictionary sortedParams = new SortedDictionary(parameters, StringComparer.Ordinal); // IEnumerator < KeyValuePair & Gt; dem = sortedParams.GetEnumerator(); StringBuilder query = new StringBuilder(); while (dem.MoveNext()) { string key = dem.Current.Key; string value = dem.Current.Value; if (key == "sign") { continue; } if (!string.IsNullOrEmpty(key)) { query.Append(value).Append(":"); } } string strvalue = query.ToString().TrimEnd(':') + secret; return MD5Encrypt32(strvalue); } catch (Exception) { throw new Exception("签名异常!"); } } public static string MD5Encrypt32(string text) { string pwd = ""; // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode的选择  byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(text)); // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("x2"); } return pwd.ToString().ToLower(); } public static long GetTimestamp(DateTime d) { TimeSpan ts = d.ToUniversalTime() - new DateTime(1970, 1, 1); return (long)ts.TotalSeconds; //精确到秒 } } } namespace DataexchangeServer.Helper { /// ApiCommonParam API请求对应的Common参数类 public class ApiCommonParam { public ApiCommonParam() { } public ApiCommonParam(string appKey, string version, string operateCompanyCode, string ownerCompanyCode, long timestamps) { this.appKey = appKey; this.version = version; this.operateCompanyCode = operateCompanyCode; this.ownerCompanyCode = ownerCompanyCode; 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 object reserver { get; set; }//扩展字段 /// 构造对象 public static ApiCommonParam NewApiCommon() { //构造对象 ApiCommonParam param = new ApiCommonParam(ApiGlobal.signConst.appKey, ApiGlobal.signConst.version, ApiGlobal.signConst.operateCompanyCode, ApiGlobal.signConst.ownerCompanyCode, SignUtils.GetTimestamp(DateTime.Now)); //计算签名&赋值 JavaScriptSerializer json = new JavaScriptSerializer(); string jsonParam = json.Serialize(param); var paramDict = JsonConvert.DeserializeObject>(jsonParam); param.sign = (string)SignUtils.buildCurrentSign(paramDict, ApiGlobal.signConst.appSecret); return param; } } }