using System;using System.Collections.Generic;using System.Net.Http;using System.Security.Cryptography;using System.Text;namespace SmsDemo{ class SendSms { private static Object generateSign(string signatureString, string secretKey, bool raw_output = false) { var enc = Encoding.UTF8; HMACSHA1 hmac = new HMACSHA1(enc.GetBytes(secretKey)); hmac.Initialize(); byte[] buffer = enc.GetBytes(signatureString); if (raw_output) { return hmac.ComputeHash(buffer); } else { return BitConverter.ToString(hmac.ComputeHash(buffer)).Replace("-", "").ToLower(); } } public static void send() { String url = "https://api.yisu.com/sms/sendSms"; String accessId = "*****"; String accessSecret = "*****"; Random rnd = new Random(); TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>(); paramList.Add(new KeyValuePair<String, String>("accessId", accessId)); paramList.Add(new KeyValuePair<String, String>("templateCode", "100001")); paramList.Add(new KeyValuePair<String, String>("phone", "13800000000")); paramList.Add(new KeyValuePair<String, String>("timestamp", Convert.ToInt64(ts.TotalSeconds).ToString())); paramList.Add(new KeyValuePair<String, String>("nonce", rnd.Next(1, 1000000).ToString())); paramList.Add(new KeyValuePair<String, String>("templateVars", "{\"code\":\"123456\",\"min\":\"5\"}")); paramList.Sort( delegate (KeyValuePair<String, String> p1, KeyValuePair<String, String> p2) { return p1.Key.CompareTo(p2.Key); } ); var param_str = ""; foreach (var param in paramList) { param_str += param.Key.ToString() + "=" + param.Value.ToString() + "&"; } param_str = param_str.Substring(0, param_str.Length - 1); byte[] sign = (byte[])generateSign(param_str, accessSecret, true); paramList.Add(new KeyValuePair<String, String>("signature", Convert.ToBase64String(sign))); HttpClient client = null; HttpResponseMessage response = null; try { client = new HttpClient(); response = client.PostAsync(url, new FormUrlEncodedContent(paramList)).Result; String result = response.Content.ReadAsStringAsync().Result; Console.WriteLine("result:{0}", result); } catch (Exception e) { Console.WriteLine("\nException Caught!"); Console.WriteLine("Message :{0} ", e.Message); } finally { if (null != response) { response.Dispose(); } if (null != client) { client.Dispose(); } } } static void Main(string[] args) { send(); } }}