阿里大鱼.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 ...
随机推荐
- 写在Ruby之前。
jeiao: 入行程序员也有一年的时间,入门的时候学的Java,在公司写了大半年的Java,也主要是Web方向,使用过struts2 做过项目,后来又用SSH实现了一遍,感觉就那么点意思,因为公司规模 ...
- emum类(2)
emum定义如下: public abstract class Enum<E extends Enum<E>>extends Objectimplements Comparab ...
- 在sqlServer中把数据导出为insert脚本
有时候为了把数据导出为insert脚本,不得不用一些小工具,或者通过自己写存储过程来完成这一操作.其实SqlServer本身就有这种功能.以下是详细步骤:
- Asp.Net Web API 2第九课——自承载Web API
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html Asp.Net Web A ...
- Memcached使用小记
该文章简单记录一下在Windows平台下安装与配置Memcached的方法,Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 1.下载Memcached ...
- 拒绝低调,国内首家推出微软WP8.1移动开发全套免费课程
活动类型:公开课 开始时间:2014-10-20 20:00 活动地点:YY频道:85155393 课程简介:学习本次公开课你将收获和体会到: Windwos Phone8.1的推出正是微软 ...
- [direct-X] direct-X最小框架
#include<d3d9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.l ...
- Hadoop Capacity Scheduler源码实现剖析
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/09/13/had ...
- C++ 标准库类型-String,Vector and Bitset
<C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...
- SpringMVC从一个controller跳转到另一个controller
return "redirect:……路径……"; @RequestMapping(value = "/index", method = RequestMeth ...