最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

阿里大鱼简单发送短信功能.net core版

来源:懂视网 责编:小采 时间:2020-11-27 22:36:48
文档

阿里大鱼简单发送短信功能.net core版

阿里大鱼简单发送短信功能.net core版:阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections.Generic; using System.IO; using System.Net; using System.S
推荐度:
导读阿里大鱼简单发送短信功能.net core版:阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections.Generic; using System.IO; using System.Net; using System.S

阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: 

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;

namespace ConsoleApp1
{
 public class SmsHelper
 {
 public static string Post(string url, string data, Encoding encoding)
 {
 try
 {
 HttpWebRequest req = WebRequest.CreateHttp(new Uri(url));
 req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
 req.Method = "POST";
 req.Accept = "text/xml,text/javascript";
 req.ContinueTimeout = 60000;

 byte[] postData = encoding.GetBytes(data);
 Stream reqStream = req.GetRequestStreamAsync().Result;
 reqStream.Write(postData, 0, postData.Length);
 reqStream.Dispose();

 var rsp = (HttpWebResponse)req.GetResponseAsync().Result;
 var result = GetResponseAsString(rsp, encoding);
 return result;
 }
 catch (Exception ex)
 {
 throw;
 }
 }

 public static T Post<T>(string url, string data, Encoding encoding)
 {
 try
 {
 var result = Post(url, data, encoding);
 return JsonConvert.DeserializeObject<T>(result);
 }
 catch (Exception ex)
 {
 return default(T);
 }
 }

 public static string BuildQuery(IDictionary<string, string> parameters)
 {
 if (parameters == null || parameters.Count == 0)
 {
 return null;
 }

 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();
 }

 public static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
 {
 Stream stream = null;
 StreamReader reader = null;

 try
 {
 // 以字符流的方式读取HTTP响应
 stream = rsp.GetResponseStream();
 reader = new StreamReader(stream, encoding);
 return reader.ReadToEnd();
 }
 finally
 {
 // 释放资源
 if (reader != null) reader.Dispose();
 if (stream != null) stream.Dispose();
 if (rsp != null) rsp.Dispose();
 }
 }

 public static string GetAlidayuSign(IDictionary<string, string> parameters, string secret, string signMethod)
 {
 //把字典按Key的字母顺序排序
 IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);

 //把所有参数名和参数值串在一起
 StringBuilder query = new StringBuilder();
 if (Constants.SIGN_METHOD_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);
 }
 }

 //使用MD5/HMAC加密
 if (Constants.SIGN_METHOD_HMAC.Equals(signMethod))
 {
 return Hmac(query.ToString(), secret);
 }
 else
 {
 query.Append(secret);
 return Md5(query.ToString());
 }
 }

 public static string Hmac(string value, string key)
 {
 byte[] bytes;
 using (var hmac = new HMACMD5(Encoding.UTF8.GetBytes(key)))
 {
 bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(value));
 }
 StringBuilder result = new StringBuilder();
 foreach (byte t in bytes)
 {
 result.Append(t.ToString("X2"));

 }
 return result.ToString();
 }

 public static string Md5(string value)
 {
 byte[] bytes;
 using (var md5 = MD5.Create())
 {
 bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
 }
 var result = new StringBuilder();
 foreach (byte t in bytes)
 {
 result.Append(t.ToString("X2"));
 }
 return result.ToString();
 }

 public static SmsResultAli SendSms(string url, string appKey, string appSecret, DateTime timestamp, Dictionary<string, string> parsms)
 {
 var txtParams = new SortedDictionary<string, string>();
 txtParams.Add(Constants.METHOD, "alibaba.aliqin.fc.sms.num.send");
 txtParams.Add(Constants.VERSION, "2.0");
 txtParams.Add(Constants.SIGN_METHOD, Constants.SIGN_METHOD_HMAC);
 txtParams.Add(Constants.APP_KEY, appKey);
 txtParams.Add(Constants.FORMAT, "json");
 txtParams.Add(Constants.TIMESTAMP, timestamp.ToString(Constants.DATE_TIME_FORMAT));
 txtParams.Add(Constants.SMS_TYPE, "normal");
 foreach (var item in parsms)
 {
 txtParams.Add(item.Key,item.Value);
 }

 txtParams.Add(Constants.SIGN, GetAlidayuSign(txtParams, appSecret, Constants.SIGN_METHOD_HMAC));
 var result = Post<SmsResultAli>(url, BuildQuery(txtParams), Encoding.UTF8);

 return result;
 }

 }

 public class SmsResultAli
 {
 public SmsResponseALi Alibaba_Aliqin_Fc_Sms_Num_Send_Response { get; set; }
 }

 public class SmsResponseALi
 {
 public string Request_Id { get; set; }
 public SmsResponseResultAli Result { get; set; }
 }

 public class SmsResponseResultAli
 {
 public string Err_Code { get; set; }

 public string Model { get; set; }

 public bool Success { get; set; }
 }
}

发送短信时:          

var parms = new Dictionary<string, string>();
 parms.Add(Constants.EXTEND, "123456");
 parms.Add(Constants.REC_NUM, "138********");
 parms.Add(Constants.SMS_FREE_SIGN_NAME, "阿里大鱼");
 parms.Add(Constants.SMS_PARAM, "{\"code\":\"1234\",\"product\":\"阿里大鱼\"}");
 parms.Add(Constants.SMS_TEMPLATE_CODE, "SMS_10000000");

var req = SmsHelper.SendSms("http://gw.api.taobao.com/router/rest", "appKey", "appSecret", DateTime.Now, parms);

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

阿里大鱼简单发送短信功能.net core版

阿里大鱼简单发送短信功能.net core版:阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections.Generic; using System.IO; using System.Net; using System.S
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top