阿里大鱼.net core 发送短信
阿里大鱼还未提供 .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 = ; byte[] postData = encoding.GetBytes(data);
Stream reqStream = req.GetRequestStreamAsync().Result;
reqStream.Write(postData, , 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 == )
{
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, "");
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);
阿里大鱼.net core 发送短信的更多相关文章
- java 阿里云接口实现发送短信验证码
此刻自己做的小项目中,需要用到手机发送短信验证码实现注册功能,于是就去阿里云注册了账号,并实现随机发送验证码的功能 第一步:在阿里云官网登录注册 已有支付宝或淘宝的账号可以直接登录,最后需要实名认 ...
- asp.net C# 实现阿里大鱼和云片网短信接口类
云片网短信通用类 public class YunpianSMS { public YunpianSMS() { } /// <summary> /// 服务器HTTP地址 /// < ...
- Laravel5中使用阿里大于(鱼)发送短信验证码
在做用户注册和个人中心的安全管理时,我实现借助第三方短信平台(阿里大于(鱼))在Laravel框架中进行手机验证的设置:阿里大于,是阿里通信旗下优质便捷的云通信服务平台,整合了三大运营商的通信能力,为 ...
- NetCore 阿里大于发送短信
使用阿里大于API发送短信,但阿里没有提供NetCore 的API,自己看了下源码重写了发短信这个部分 public class MessageSender { private readonly st ...
- 阿里云短信服务发送短信验证码(JAVA开发此功能)
开发此功能需注册阿里云账号,并开通短信服务(免费开通) 充值后,不会影响业务的正常使用!(因为发送验证类短信:1-10万范围的短信是0.045元/条).开发测试使用,充2块钱测试足够了 可参考阿里云官 ...
- 利用阿里大于实现发送短信(JAVA版)
本文是我自己的亲身实践得来,喜欢的朋 友别忘了点个赞哦! 最近整理了一下利用阿里大于短信平台来实现发送短信功能. 闲话不多说,直接开始吧. 首先,要明白利用大于发送短信这件事是由两部分组成: 一.在阿 ...
- 阿里大于发送短信(java)
一.短信签名设置 1.短信签名是什么? 签名是在短信内容开始或者末尾跟的品牌或者应用名称,设置签名有一下几个好处:增加品牌的曝光度,增强用户的记忆让用户能更清楚的知道正在使用的应用. 2.签名可不可以 ...
- Flask实战第41天:发送短信验证码
本项目使用的短信运营商是阿里云.使用淘宝账号登录阿里云控制台.在“产品与服务”中搜索“短信”进入短信服务 获取AccessKey 输入子账户用户名 权限选择管理短信服务 签名管理:申请签名 模板管理: ...
- quartz-job实现实时或定时发送短信任务
存放调度器(Job 和 Trigger)信息的xml配置文件: 这是某个指定的要实现的定时任务: <!-- 每天给项目经理发送短信避免短信服务挂了 定时每天08:30执行--> <j ...
随机推荐
- Qt 5.7 版本+2013VS环境配置
原本是使用MSVC5.5.1的版本,碍于习惯,之前一直使用creator,后面才转向VS,因为它的调试实在是太棒了,小程序还是creator调试(比如抽出大程序中的小模块之类的) 不知道是版本问题还是 ...
- C# Delegate 匿名 Delegate
C#6.0新添加了 lambda的强力支持,用lambda的确可以节省好多代码,让代码看起来更简洁,更直观: 这里做一个笔记,C#的匿名委托 Demo class Program { static v ...
- javascript的原型和继承(1)
原型与继承是javascript中基础,重要而相对比较晦涩难解的内容.在图灵的网上看到一篇翻译过的文章,有参考了一些知名博客.我自己总结了几篇.通过这次的总结,感觉自己对原型和继承的认识又增加了很多, ...
- App技术框架
一.App技术框架的类型 图1 三种App技术框架之间的关系 目前App的技术框架基本分为三种(图1): (1)Native App:互动型,iOS.Android.WP各一套,而且要维护历史版本,要 ...
- Python 输出文字带颜色
格式:\033[显示方式;前景色;背景色m 说明:前景色 背景色 颜色---------------------------------------30 ...
- 使用 Python 进行稳定可靠的文件操作
程序需要更新文件.虽然大部分程序员知道在执行I/O的时候会发生不可预期的事情,但是我经常看到一些异常幼稚的代码.在本文中,我想要分享一些如何在Python代码中改善I/O可靠性的见解. 考虑下述Pyt ...
- WCF的一点补充-Restful相关
参考 配置WCF心得 对REST架构 风格下WCF的一点补充 Securing WCF REST Service with Azure AppFabric Access Control Service ...
- SQL 注入
我们的团队项目中有课程名称输入框,其中的内容会拼接到类sql查询语句中. 所以可能会产生类sql注入的问题,我们团队采用了利用正则表达式判断输入内容的形式来规避这类注入. 下面简单介绍一下sql注入 ...
- 跟我一起学WCF(1)——MSMQ消息队列
一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能 ...
- 使用 Microsoft Fakes 进行单元测试
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 在编写单元测试时,我们会遇到不同的外部依赖项,大体上可以分为两类: 依赖于接口或抽象类 依赖于具体类 ...