阿里大魚簡(jiǎn)單發(fā)送短信功能.net core版
阿里大魚還未提供 .net core 版SDK,但提供了相關(guān)API,下面是.net core版實(shí)現(xiàn),只是簡(jiǎn)單發(fā)送短信功能:
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;
// 忽略參數(shù)名或參數(shù)值為空的參數(shù)
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響應(yīng)
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);
//把所有參數(shù)名和參數(shù)值串在一起
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; }
}
}
發(fā)送短信時(shí):
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);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 通過第三方接口發(fā)送短信驗(yàn)證碼/短信通知(推薦)
- NodeJS實(shí)現(xiàn)阿里大魚短信通知發(fā)送
- asp.net調(diào)用飛信免費(fèi)發(fā)短信(測(cè)試有效)
- ASP.NET(VB)寫的后臺(tái)發(fā)送短信實(shí)現(xiàn)代碼
- C#代碼實(shí)現(xiàn)短信驗(yàn)證碼接口示例
- C#怎么實(shí)現(xiàn)手機(jī)短信發(fā)送功能
- java、php、C#、asp實(shí)現(xiàn)短信群發(fā)功能的方法
- CDMA 貓用AT命令發(fā)中文短信(C#)
- ASP.NET MVC阿里大于短信接口開發(fā)短信群發(fā)能
相關(guān)文章
ASP.NET MVC制作404跳轉(zhuǎn)實(shí)例(非302和200)
本篇文章主要介紹了ASP.NET MVC制作404跳轉(zhuǎn)實(shí)例(非302和200) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
MAUI項(xiàng)目中使用SnackBar與Toast通知功能
這篇文章介紹了MAUI項(xiàng)目中使用SnackBar與Toast通知功能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
asp.net+Ajax校驗(yàn)用戶是否存在的實(shí)現(xiàn)代碼
主要技術(shù)點(diǎn) jquery ajax以及blur事件,當(dāng)用戶名輸入框失去焦點(diǎn)的時(shí)候就會(huì)觸發(fā)blur事件,然后進(jìn)行ajax請(qǐng)求,獲得結(jié)果(true或者false),如果請(qǐng)求結(jié)果為true,就把用戶名輸入框圖片替換成ok,并且輸出文字:恭喜您2012-05-05
.NET使用DinkToPdf將HTML轉(zhuǎn)成PDF的示例代碼
這篇文章主要介紹了.NET使用DinkToPdf將HTML轉(zhuǎn)成PDF的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
jQuery實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)的例子
這篇文章主要介紹了jQuery實(shí)現(xiàn)倒計(jì)時(shí)跳轉(zhuǎn)的例子,需要的朋友可以參考下2014-05-05
ASP.NET Core擴(kuò)展庫之Http請(qǐng)求模擬功能的使用
這篇文章主要介紹了ASP.NET Core擴(kuò)展庫之Http請(qǐng)求模擬功能的使用方法,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-04-04
ASP.NET 前臺(tái)javascript與后臺(tái)代碼調(diào)用
ASP.NET中前臺(tái)javascript與后臺(tái)代碼調(diào)用的實(shí)現(xiàn)代碼說明。2009-08-08

