阿里大鱼简单发送短信功能.net core版
阿里大鱼还未提供.netcore版SDK,但提供了相关API,下面是.netcore版实现,只是简单发送短信功能:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Net;
usingSystem.Security.Cryptography;
usingSystem.Text;
usingNewtonsoft.Json;
namespaceConsoleApp1
{
publicclassSmsHelper
{
publicstaticstringPost(stringurl,stringdata,Encodingencoding)
{
try
{
HttpWebRequestreq=WebRequest.CreateHttp(newUri(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);
StreamreqStream=req.GetRequestStreamAsync().Result;
reqStream.Write(postData,0,postData.Length);
reqStream.Dispose();
varrsp=(HttpWebResponse)req.GetResponseAsync().Result;
varresult=GetResponseAsString(rsp,encoding);
returnresult;
}
catch(Exceptionex)
{
throw;
}
}
publicstaticTPost<T>(stringurl,stringdata,Encodingencoding)
{
try
{
varresult=Post(url,data,encoding);
returnJsonConvert.DeserializeObject<T>(result);
}
catch(Exceptionex)
{
returndefault(T);
}
}
publicstaticstringBuildQuery(IDictionary<string,string>parameters)
{
if(parameters==null||parameters.Count==0)
{
returnnull;
}
StringBuilderquery=newStringBuilder();
boolhasParam=false;
foreach(KeyValuePair<string,string>kvinparameters)
{
stringname=kv.Key;
stringvalue=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;
}
}
returnquery.ToString();
}
publicstaticstringGetResponseAsString(HttpWebResponsersp,Encodingencoding)
{
Streamstream=null;
StreamReaderreader=null;
try
{
//以字符流的方式读取HTTP响应
stream=rsp.GetResponseStream();
reader=newStreamReader(stream,encoding);
returnreader.ReadToEnd();
}
finally
{
//释放资源
if(reader!=null)reader.Dispose();
if(stream!=null)stream.Dispose();
if(rsp!=null)rsp.Dispose();
}
}
publicstaticstringGetAlidayuSign(IDictionary<string,string>parameters,stringsecret,stringsignMethod)
{
//把字典按Key的字母顺序排序
IDictionary<string,string>sortedParams=newSortedDictionary<string,string>(parameters,StringComparer.Ordinal);
//把所有参数名和参数值串在一起
StringBuilderquery=newStringBuilder();
if(Constants.SIGN_METHOD_MD5.Equals(signMethod))
{
query.Append(secret);
}
foreach(KeyValuePair<string,string>kvinsortedParams)
{
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))
{
returnHmac(query.ToString(),secret);
}
else
{
query.Append(secret);
returnMd5(query.ToString());
}
}
publicstaticstringHmac(stringvalue,stringkey)
{
byte[]bytes;
using(varhmac=newHMACMD5(Encoding.UTF8.GetBytes(key)))
{
bytes=hmac.ComputeHash(Encoding.UTF8.GetBytes(value));
}
StringBuilderresult=newStringBuilder();
foreach(bytetinbytes)
{
result.Append(t.ToString("X2"));
}
returnresult.ToString();
}
publicstaticstringMd5(stringvalue)
{
byte[]bytes;
using(varmd5=MD5.Create())
{
bytes=md5.ComputeHash(Encoding.UTF8.GetBytes(value));
}
varresult=newStringBuilder();
foreach(bytetinbytes)
{
result.Append(t.ToString("X2"));
}
returnresult.ToString();
}
publicstaticSmsResultAliSendSms(stringurl,stringappKey,stringappSecret,DateTimetimestamp,Dictionary<string,string>parsms)
{
vartxtParams=newSortedDictionary<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(variteminparsms)
{
txtParams.Add(item.Key,item.Value);
}
txtParams.Add(Constants.SIGN,GetAlidayuSign(txtParams,appSecret,Constants.SIGN_METHOD_HMAC));
varresult=Post<SmsResultAli>(url,BuildQuery(txtParams),Encoding.UTF8);
returnresult;
}
}
publicclassSmsResultAli
{
publicSmsResponseALiAlibaba_Aliqin_Fc_Sms_Num_Send_Response{get;set;}
}
publicclassSmsResponseALi
{
publicstringRequest_Id{get;set;}
publicSmsResponseResultAliResult{get;set;}
}
publicclassSmsResponseResultAli
{
publicstringErr_Code{get;set;}
publicstringModel{get;set;}
publicboolSuccess{get;set;}
}
}
发送短信时:
varparms=newDictionary<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");
varreq=SmsHelper.SendSms("http://gw.api.taobao.com/router/rest","appKey","appSecret",DateTime.Now,parms);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。