using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Web; namespace BM.BLL.Utils { public class SmsHelper { public static void SendSms() { string accessKeyId = "11111"; string accessKeySecret = "1111"; string phoneNumber = "1111"; string signName = "11111"; string templateCode = "SMS_295711502"; string templateParam = "{\"code\":\"123456\"}"; string domain = "dysmsapi.aliyuncs.com"; string version = "2017-05-25"; string action = "SendSms"; string regionId = "cn-hangzhou"; var parameters = new Dictionary<string, string> { { "AccessKeyId", accessKeyId }, { "Action", "SendSms" }, { "Format", "JSON" }, { "PhoneNumbers", "13736969112" }, { "RegionId", "cn-hangzhou" }, { "SignName", "鹿城招生" }, { "SignatureMethod", "HMAC-SHA1" }, { "SignatureNonce", Guid.NewGuid().ToString() }, { "SignatureVersion", "1.0" }, { "TemplateCode", "SMS_295711502" }, { "TemplateParam", "{\"code\":\"123456\"}" }, { "Timestamp", DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'") }, { "Version", "2017-05-25" }//2019-09-30 }; string sortedQueryString = string.Join("&", parameters.Select(kvp => $"{kvp.Key}={SpecialUrlEncode(kvp.Value)}")); string stringToSign = $"GET&%2F&{SpecialUrlEncode(sortedQueryString)}"; string signature = ComputeSignature(stringToSign, accessKeySecret + "&"); string requestUrl = $"http://{domain}/?Signature={SpecialUrlEncode(signature)}&{sortedQueryString}"; // 发送请求 string response = SendRequest(requestUrl); Console.WriteLine("SMS sent, response: " + response); } public static string SpecialUrlEncode(string value) { string encodedValue = Uri.EscapeDataString(value); encodedValue = encodedValue.Replace("+", "%20").Replace("*", "%2A").Replace("%7E", "~"); return encodedValue; } static string GetSortedQueryString(NameValueCollection values) { var sortedValues = values.AllKeys.Select(key => key + "=" + Uri.EscapeDataString(values[key])); return string.Join("&", sortedValues.OrderBy(s => s)); } static string ComputeSignature(string stringToSign, string accessKeySecret) { using (var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(accessKeySecret))) { var hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)); return Convert.ToBase64String(hashBytes); } } static string SendRequest(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(responseStream)) { return reader.ReadToEnd(); } } catch (Exception ex) { Console.WriteLine("SMS sent, response: " + ex.Message); } return ""; } } }