NetCore 阿里大于发送短信
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了NetCore 阿里大于发送短信,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4999字,纯文字阅读大概需要8分钟。
内容图文

使用阿里大于API发送短信,但阿里没有提供NetCore 的API,自己看了下源码重写了发短信这个部分


public class MessageSender { private readonly string _appKey; private readonly string _appSecret; private readonly string _serverUrl; public MessageSender(string url, string appKey, string appSecret) { _serverUrl = url; _appKey = appKey; _appSecret = appSecret; } publicstring SmsType { get; set; } = "normal"; publicstring SmsFreeSignName { get; set; } = "生日提醒"; publicstring SmsParam { get; set; } publicstring RecNum { get; set; } publicstring SmsTemplateCode { get; set; } = "SMS_24695114"; publicstring GetApiName() { return"alibaba.aliqin.fc.sms.num.send"; } publicstring SendMessage() { HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip"); //httpClient.DefaultRequestHeaders.Add("KeepAlive", "true"); httpClient.DefaultRequestHeaders.Add("user-agent", "top-sdk-net"); httpClient.DefaultRequestHeaders.Add("Method", "Post"); httpClient.DefaultRequestHeaders.Add("Accept", "text/xml,text/javascript"); httpClient.DefaultRequestHeaders.Add("Host", "gw.api.taobao.com"); httpClient.Timeout = new TimeSpan(0, 0, 100); byte[] postData = GetPostData(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, _serverUrl); request.Headers.Add("Accept-Encoding", "gzip"); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); request.Headers.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8")); request.Content = new StreamContent(new MemoryStream(postData)); request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"); HttpResponseMessage httpResponseMessage = httpClient.SendAsync(request).GetAwaiter().GetResult(); string result = httpResponseMessage.Content.ReadAsStringAsync().GetAwaiter().GetResult(); return result; } publicbyte[] GetPostData() { Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("rec_num", RecNum); dictionary.Add("sms_free_sign_name", SmsFreeSignName); dictionary.Add("sms_param", SmsParam); dictionary.Add("sms_template_code", SmsTemplateCode); dictionary.Add("sms_type", SmsType); dictionary.Add("method", "alibaba.aliqin.fc.sms.num.send"); dictionary.Add("v", "2.0"); dictionary.Add("sign_method", "hmac"); dictionary.Add("app_key", _appKey); dictionary.Add("format", "xml"); dictionary.Add("partner_id", "top-sdk-net-20160607"); dictionary.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); //dictionary.Add("target_app_key", null); //dictionary.Add("session", null); dictionary.Add("sign", SignTopRequest(dictionary, null, _appSecret, "hmac")); byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(dictionary)); return postData; } publicstring SignTopRequest(IDictionary<string, string> parameters, string body, string secret, string signMethod) { // 第一步:把字典按Key的字母顺序排序 IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal); // 第二步:把所有参数名和参数值串在一起 StringBuilder query = new StringBuilder(); if ("md5".Equals(signMethod)) { query.Append(secret); } foreach (KeyValuePair<string, string> kv in sortedParams) { if (!string.IsNullOrEmpty(kv.Key) && !string.IsNullOrEmpty(kv.Value)) { query.Append(kv.Key).Append(kv.Value); } } // 第三步:把请求主体拼接在参数后面if (!string.IsNullOrEmpty(body)) { query.Append(body); } // 第四步:使用MD5/HMAC加密byte[] bytes; if ("hmac".Equals(signMethod)) { HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret)); bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString())); } else { query.Append(secret); MD5 md5 = MD5.Create(); bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString())); } // 第五步:把二进制转化为大写的十六进制 StringBuilder result = new StringBuilder(); foreach (byte t in bytes) { result.Append(t.ToString("X2")); } return result.ToString(); } publicstring BuildQuery(IDictionary<string, string> parameters) { if (parameters == null || parameters.Count == 0) { returnnull; } StringBuilder query = new StringBuilder(); bool hasParam = false; foreach (KeyValuePair<string, string> kv in parameters) { string name = kv.Key; string value = kv.Value; // 忽略参数名或参数值为空的参数if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value)) { if (hasParam) { query.Append("&"); } query.Append(name); query.Append("="); query.Append(WebUtility.UrlEncode(value)); hasParam = true; } } return query.ToString(); } }
使用的话
MessageSender messageSender = new MessageSender("http://gw.api.taobao.com/router/rest", "你的APPkey", "你的APPSecret"); messageSender.SmsType = "normal"; messageSender.SmsFreeSignName = "生日提醒"; messageSender.SmsParam = string.Format("{{\"birthday\":\"{0}\",\"SpiritualBirthday\":\"{1}\"}}", birthdayTemplate, spiritualBirthdayTemplate); messageSender.RecNum = phone; messageSender.SmsTemplateCode = "你的短信模板"; string result = messageSender.SendMessage();
原文:http://www.cnblogs.com/MindSharing/p/6198451.html
内容总结
以上是互联网集市为您收集整理的NetCore 阿里大于发送短信全部内容,希望文章能够帮你解决NetCore 阿里大于发送短信所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】