记录:ASP.NET/MVC 后台对请求参数字典(key、秘钥、时间戳等)进行参数拼接和字典排序并加密得到签名以及拼接参数请求接口方法获取数据

1. 根据参数字典按键名排序然后拼接参数,最后MD5加密得到签名:

/// <summary>
/// 组装签名
/// </summary>
/// <param name="paramsMap">参数集合</param>
/// <returns></returns>
public static string GetSign(Dictionary<string, string> paramsMap)
{
  var vDic = (from objDic in paramsMap orderby objDic.Key ascending select objDic);
  StringBuilder str = new StringBuilder();
  foreach (KeyValuePair<string, string> kv in vDic)
  {
    string pkey = kv.Key;
    string pvalue = kv.Value;
    str.Append(pkey + "=" + pvalue + "&");
  }
  String result = str.ToString().Substring(0, str.ToString().Length - 1);

  string sign = Md5Helper.Encrypt(result, 32);
  return sign.ToUpper();
}

2.拼接参数请求接口:

/// <summary>
/// GET请求
/// </summary>
/// <param name="url">地址</param>
/// <param name="dic">参数字典</param>
/// <returns></returns>
public static string HttpGet(string url, Dictionary<string, string> dic)
{
  string result = "";
  StringBuilder builder = new StringBuilder();
  builder.Append(url);
  if (dic.Count > 0)
  {
    builder.Append("?");
    int i = 0;
    foreach (var item in dic)
    {
      if (i > 0)
      builder.Append("&");
      builder.AppendFormat("{0}={1}", item.Key, item.Value);
      i++;
    }

  }
  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(builder.ToString());
  req.Method = "GET";
  req.ContentType = "application/x-www-form-urlencoded'charset=UTF-8";
  // req.Headers["Accept-Language"] = "zh-CN,zh;q=0.8";
  // 添加参数
  HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  Stream stream = resp.GetResponseStream();
  try
  {
    // 获取内容
    using (StreamReader reader = new StreamReader(stream))
    {
      result = reader.ReadToEnd();
    }
  }
  finally
  {
    stream.Close();
  }
  return result;
}

3.调用

/// <summary>
///  获取数据
/// </summary>
/// <returns></returns>

public ActionResult GetData()

{

  string key = " ";// 身份key
  string secret = " ";// 秘钥
  TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
  string timestamp = Convert.ToInt64(ts.TotalMilliseconds).ToString();

  string startTime = "";
  string endTime = "";
  string url =""

  Dictionary<string,string> dic = new Dictionary<string, string>();
  dic.Add("key",key);// 身份key
  dic.Add("secret", secret);// 秘钥
  dic.Add("timestamp", timestamp);// 时间戳
  dic.Add("startTime", startTime);// 起始时间
  dic.Add("endTime", endTime);// 结束时间
  string sign = GetSign(dic);// 签名

  dic.Remove("secret");// 得到签名后移除
  dic.Add("sign", sign);

  string data = HttpGet(url, dic);

  return data;

}

4.参考来源:

(1).https://www.jb51.net/article/111809.htm

(2).https://www.jb51.net/article/142945.htm(更多请求方式)

posted @ 2019-12-12 11:26  巴泽奇特  阅读(67)  评论(0)    收藏  举报