using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace wcftest.sql { class getToken { /// /// 设置头属性公有方法 /// /// /// /// public static void SetHeaderValue(WebHeaderCollection header, string name, string value) { var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic); if (property != null) { var collection = property.GetValue(header, null) as NameValueCollection; collection[name] = value; } } /// /// 加密 /// /// /// /// /// /// public static string GetSignature(string timeStamp, string nonce, string data) { var hash = System.Security.Cryptography.MD5.Create(); //拼接签名数据 string appkey = "PT20180001"; string appscret = "EC83335F-F695-41D5-8304-B5BFC351E5C0"; //timeStamp = "1615911903352"; //nonce = "25883581687"; //data="{\"createDate\":\"2021/3/16 16:32:10\"}"; data = data.Replace(".0,", ","); data = data.Replace(".0}", "}"); var signStr = timeStamp + nonce + appkey + appscret + data; //将字符串中字符按升序排序 var sortStr = string.Concat(signStr.OrderBy(c => c)); var bytes = Encoding.UTF8.GetBytes(sortStr); //使用MD5加密 var md5Val = hash.ComputeHash(bytes); //把二进制转化为大写的十六进制 StringBuilder result = new StringBuilder(); foreach (var c in md5Val) { result.Append(c.ToString("X2")); } return result.ToString().ToUpper(); } public string token(string url, string jsonstr,string type) { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址 //公有设置头文件 SetHeaderValue(request.Headers, "Content-Type", "application/json"); SetHeaderValue(request.Headers, "apiType", "client"); SetHeaderValue(request.Headers, "appKey", "PT20180001"); SetHeaderValue(request.Headers, "appSecret", "EC83335F-F695-41D5-8304-B5BFC351E5C0"); TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0); string time = Convert.ToInt64(ts.TotalMilliseconds).ToString(); //string time = DateTime.Now.Ticks.ToString(); SetHeaderValue(request.Headers, "timestamp", time); Random rd = new Random(); long n = (long)Math.Floor((new Random()).NextDouble() * 100000000000D); string num = n.ToString().PadLeft(11, '0'); SetHeaderValue(request.Headers, "nonce", num); SetHeaderValue(request.Headers, "signature", GetSignature(time, num, jsonstr)); request.Accept = "text/html,application/xhtml+xml,*/*"; //request.Accept = "*/*"; request.ContentType = "application/json"; request.Method = type.ToUpper().ToString();//get或者post byte[] buffer = encoding.GetBytes(jsonstr); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } catch (WebException ex) { HttpWebResponse resp = (HttpWebResponse)ex.Response; Stream responseStream = resp.GetResponseStream(); StreamReader sr = new StreamReader(responseStream, Encoding.UTF8); string sReturn = sr.ReadToEnd().Trim(); resp.Close(); sr.Close(); Console.WriteLine(sReturn); } return ""; } } }