百度SMS发送短信C#
/// <summary>
/// 百度接口签名帮助类
/// </summary>
public class BaiduApiHelper
{
#region 构造函数 /// <summary>
/// 构造函数
/// </summary>
/// <param name="accessKeyId">百度AccessKeyId(AK)</param>
/// <param name="secretAccessKey">百度SecretAccessKey(SK)</param>
public BaiduApiHelper(string accessKeyId, string secretAccessKey)
{
_accessKeyId = accessKeyId;
_secretAccessKey = secretAccessKey;
} #endregion #region 内部成员 private string _accessKeyId { get; }
private string _secretAccessKey { get; }
private string UriEncode(string input, bool encodeSlash = false)
{
StringBuilder builder = new StringBuilder();
foreach (byte b in Encoding.UTF8.GetBytes(input))
{
if ((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '' && b <= '') || b == '_' || b == '-' || b == '~' || b == '.')
{
builder.Append((char)b);
}
else if (b == '/')
{
if (encodeSlash)
{
builder.Append("%2F");
}
else
{
builder.Append((char)b);
}
}
else
{
builder.Append('%').Append(b.ToString("X2"));
}
}
return builder.ToString();
}
private string Hex(byte[] data)
{
var sb = new StringBuilder();
foreach (var b in data)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
private string CanonicalRequest(HttpWebRequest req)
{
Uri uri = req.RequestUri;
StringBuilder canonicalReq = new StringBuilder();
canonicalReq.Append(req.Method).Append("\n").Append(UriEncode(Uri.UnescapeDataString(uri.AbsolutePath))).Append("\n"); var parameters = HttpUtility.ParseQueryString(uri.Query);
List<string> parameterStrings = new List<string>();
foreach (KeyValuePair<string, string> entry in parameters)
{
parameterStrings.Add(UriEncode(entry.Key) + '=' + UriEncode(entry.Value));
}
parameterStrings.Sort();
canonicalReq.Append(string.Join("&", parameterStrings.ToArray())).Append("\n"); string host = uri.Host;
if (!(uri.Scheme == "https" && uri.Port == ) && !(uri.Scheme == "http" && uri.Port == ))
{
host += ":" + uri.Port;
}
canonicalReq.Append("host:" + UriEncode(host));
return canonicalReq.ToString();
} #endregion #region 外部接口 /// <summary>
/// 发送POST请求
/// </summary>
/// <param name="method">请求方法,需要大写,列如(POST)</param>
/// <param name="host">主机地址列如(http://sms.bj.baidubce.com)</param>
/// <param name="url">接口地址列如(/bce/v2/message)</param>
/// <param name="paramters">参数列表</param>
/// <returns></returns>
public string RequestData(string method, string host, string url, Dictionary<string, object> paramters = null)
{
string ak = _accessKeyId;
string sk = _secretAccessKey;
DateTime now = DateTime.Now;
int expirationInSeconds = ; HttpWebRequest req = WebRequest.Create(host + url) as HttpWebRequest;
Uri uri = req.RequestUri;
req.Method = method;
req.ContentType = "application/json"; if (paramters != null)
{
Stream requestStream = req.GetRequestStream();
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(paramters));
requestStream.Write(data, , data.Length);
} string signDate = now.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK");
string authString = "bce-auth-v1/" + ak + "/" + signDate + "/" + expirationInSeconds;
string signingKey = Hex(new HMACSHA256(Encoding.UTF8.GetBytes(sk)).ComputeHash(Encoding.UTF8.GetBytes(authString))); string canonicalRequestString = CanonicalRequest(req); string signature = Hex(new HMACSHA256(Encoding.UTF8.GetBytes(signingKey)).ComputeHash(Encoding.UTF8.GetBytes(canonicalRequestString)));
string authorization = authString + "/host/" + signature; req.Headers.Add("x-bce-date", signDate);
req.Headers.Add(HttpRequestHeader.Authorization, authorization); HttpWebResponse res;
string message = "";
try
{
res = req.GetResponse() as HttpWebResponse;
}
catch (WebException e)
{
res = e.Response as HttpWebResponse;
}
message = new StreamReader(res.GetResponseStream()).ReadToEnd(); return message;
} /// <summary>
/// 发送短信
/// </summary>
/// <param name="phoneNum">手机号码</param>
/// <param name="code">验证码</param>
/// <returns></returns>
public static bool SendMsg(string phoneNum, string code)
{
try
{
BaiduApiHelper baiduApiHelper = new BaiduApiHelper("", ""); string host = "http://sms.bj.baidubce.com";
string url = "/bce/v2/message";
Dictionary<string, object> paramters = new Dictionary<string, object>();
paramters.Add("invokeId", "Vhn0B-vCXn-8888");
paramters.Add("phoneNumber", phoneNum);
paramters.Add("templateCode", "smsTpl:e747612888e9018888");
paramters.Add("contentVar", new { code = code }); string resJsonStr = baiduApiHelper.RequestData("POST", host, url, paramters);
var resJson = JsonConvert.DeserializeObject<JObject>(resJsonStr); return resJson["code"]?.ToString() == "";
}
catch
{
return false;
}
} #endregion
}
直接调用,传入手机号和验证码即可。
百度SMS发送短信C#的更多相关文章
- java 使用网建SMS发送短信验证码
首先, 注册并登录网建用户, 新注册用户将获得5条的测试短信 网建短信通地址: http://sms.webchinese.cn/default.shtml 注册账号在此就不多做赘述了, 直接上代码 ...
- java 短信猫发送短信的方法
用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种: · 1. 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送 ...
- java中用中国网建提供的SMS短信平台发送短信
接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下.大体上说的都是有三种方法,分别是sina提供的webservice接口.短信mao和中国网建提供的SMS短信平台. 这三种方 ...
- 基于SMS短信平台给手机发送短信
JAVA发送手机短信,我知道的有三种方式,恰逢项目需求,自己整理了基于SMS的短信发送,其他两种这里就说说一下 使用webservice接口发送手机短信,这个可以使用sina提供的webservice ...
- Matlab 程序结束后发送短信或者邮件
近期,在服务器上运行matlab程序,由于数据比较多,程序比较复杂,运行时间不固定,而且需要经常改变参数,重复运行几次,所以不清楚程序何时结束,以便于修改参数,继续运行.开始有时间就看看程序是否运行结 ...
- 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)
微信时代的今天,短信一样不可缺席,大系统都有集成短信接口.若只是临时用一下,若能够直接在Excel上加工好内容就可以直接发送,这些假设在此篇批量群发短信功能中都为大家带来完美答案. 业务场景 不多说, ...
- python-在python3中使用容联云通讯发送短信验证码
容联云通讯是第三方平台,能够提供短信验证码和语音通信等功能,这里只测试使用短信验证码的功能,因此只需完成注册登录(无需实名认证等)即可使用其短信验证码免费测试服务,不过免费测试服务只能给控制台中指定的 ...
- NetCore 阿里大于发送短信
使用阿里大于API发送短信,但阿里没有提供NetCore 的API,自己看了下源码重写了发短信这个部分 public class MessageSender { private readonly st ...
- Android 学习第13课,android 实现发送短信的功能
1. 界面布局 界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
随机推荐
- easyui datebox 只显示日期,本文为转载,稍加改动
var DateBoxHandler = {}; DateBoxHandler.onlyShowMonth = function(id) { function padding(v) {if (v &l ...
- 例程使用(1-4)共享内存 存图片+vector容器教程
1传输的数据 1-1数据格式说明 1 两路视频图像Mat 图像 图像数据(Mat)+图像头信息(ImgInf) //图像的宽.高.类型信息 typedef struct { int width; // ...
- ansible部署EFK
修改自己不确定的配置文件前,先准备备份,防患于未然!!! Environment:{ 目前测试准备三台2m2g虚拟机 详情概略图见EFK的架构图 https://www.cnblogs.com/se ...
- Presto Infrastructure at Lyft
转载一篇关于 lyft presto 平台建设的实践 Overview Early in 2017 we started exploring Presto for OLAP use cases and ...
- vcenter监控
在vcenter上配置好用户名密码和url即可使用自动发现自动发现vmware
- matlab 只安装部分产品
- 【JZOJ6213】【20190613】String
题目 \(n \le 10^{18} \ , \ |T| \le 10^5\) 题解 显然,最少的操作次数一定是贪心地能匹配就匹配 我们可以建出\(T\)的SAM,把SAM不能走的边补到根的后继节点 ...
- CF241E Flights 题解
题目 做了一下这道题,突然发现自己忘了差分约束,赶紧复习一下. 设当前有n个变量 a1,a2,...,an ,有若干组限制形如 ai≤aj+k (其中k为常数),则由点j向点i连一条边权为k的边,再从 ...
- navicat提示无法连接解决办法
1.错误如下图: 2.这个是由于mysql中user表中未设置允许该ip访问导致,解决办法: 1)查下user表:select user,host from user; 这张表就是mysql.user ...
- limma 包
limma:Linear Models for Microarray and RNA-Seq Data http://www.bioconductor.org/packages/release/bio ...