ABPZero并没有手机短信发送功能,现在我们来集成一个,为后面注册、登录作铺垫。

阿里云短信服务

首先需要在阿里云开通短信服务,连接地址

开通后,在签名管理中添加一个签名

在模板管理中添加一个模板,如下图所示

最后需要使用阿里云提供的.NET发送短信类库,下面可以直接下载我上传的类库,也可以去官方下载,然后提取我所说的2个类库(aliyun-net-sdk-core.dll、aliyun-net-sdk-dysmsapi.dll)

直接下载文件:https://files.cnblogs.com/files/shensigzs/aliyun-net-sdk.zip (里面包含2个类库,把这2个类库引用到Core项目)

.NET发送短信SDK:https://help.aliyun.com/document_detail/59836.html?spm=5176.doc55284.6.573.GaNxg6

安装类库

如下图所示

使用的模块是Abp.Net.Sms,源码地址:https://github.com/berkaroad/Abp.Net.Sms

Core项目添加实现

添加AliDayuSmsSender类,实现2个方法(一个同步、一个异步)

文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Core\Authorization\Users\AliDayuSmsSender.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Abp.Dependency;
using Abp.Net.Sms;
using Abp.UI;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Dysmsapi.Model.V20170525;
using Castle.Core.Logging; namespace MyCompanyName.AbpZeroTemplate.Authorization.Users
{
public class AliDayuSmsSender : SmsSenderBase, ITransientDependency
{
private IClientProfile profile = null;
public ILogger Logger { get; set; }
public AliDayuSmsSender(ISmsSenderConfiguration configuration) : base(configuration)
{
Logger = NullLogger.Instance;
profile = DefaultProfile.GetProfile("cn-hangzhou", configuration.GetAppKey(), configuration.GetAppSecret());
} protected override void SendSms(SmsMessage sms)
{ DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
try
{
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.PhoneNumbers = sms.To;
//必填:短信签名-可在短信控制台中找到
request.SignName = sms.FreeSignName;
//必填:短信模板-可在短信控制台中找到
request.TemplateCode = string.IsNullOrEmpty(sms.TemplateCode)
? _configuration.GetDefaultSmsTemplateCode()
: sms.TemplateCode;
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.TemplateParam = sms.TemplateParams;
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.OutId = "yourOutId";
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);
Logger.Info("发送返回:" + sendSmsResponse.Message);
}
catch (ServerException e)
{
throw new UserFriendlyException("短信发送失败",
new Exception(string.Format("to:{0},errCode:{1},errMsg:{2}",
sms.To,
e.ErrorCode,
e.Message)));
}
catch (ClientException e)
{
throw new UserFriendlyException("短信发送失败",
new Exception(string.Format("to:{0},errCode:{1},errMsg:{2}",
sms.To,
e.ErrorCode,
e.Message)));
} } protected override Task SendSmsAsync(SmsMessage sms)
{
DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");
var task = new Task(() =>
{
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
try
{
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.PhoneNumbers = sms.To;
//必填:短信签名-可在短信控制台中找到
request.SignName = sms.FreeSignName;
//必填:短信模板-可在短信控制台中找到
request.TemplateCode = string.IsNullOrEmpty(sms.TemplateCode)
? _configuration.GetDefaultSmsTemplateCode()
: sms.TemplateCode;
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.TemplateParam = sms.TemplateParams;
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.OutId = "yourOutId";
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);
Logger.Info("发送返回:" + sendSmsResponse.Message);
}
catch (ServerException e)
{
throw new UserFriendlyException("短信发送失败",
new Exception(string.Format("to:{0},errCode:{1},errMsg:{2}",
sms.To,
e.ErrorCode,
e.Message)));
}
catch (ClientException e)
{
throw new UserFriendlyException("短信发送失败",
new Exception(string.Format("to:{0},errCode:{1},errMsg:{2}",
sms.To,
e.ErrorCode,
e.Message)));
}
}); task.Start();
return task;
}
}
}

修改AppSettingProvider.cs,在return new[]里面添加如下代码

文件路径:D:\abpweb\PddSellerAssistant\PddSellerAssistant.Core\Configuration\AppSettingProvider.cs

return new[]
{
// Sms config
new SettingDefinition(SmsSettingNames.ServiceUrl,
ConfigurationManager.AppSettings[SmsSettingNames.ServiceUrl] ?? ""),
new SettingDefinition(SmsSettingNames.AppKey,
ConfigurationManager.AppSettings[SmsSettingNames.AppKey] ?? ""),
new SettingDefinition(SmsSettingNames.AppSecret,
ConfigurationManager.AppSettings[SmsSettingNames.AppSecret] ?? ""),
new SettingDefinition(SmsSettingNames.DefaultFreeSignName,
ConfigurationManager.AppSettings[SmsSettingNames.DefaultFreeSignName] ?? ""),
new SettingDefinition(SmsSettingNames.DefaultSmsTemplateCode,
ConfigurationManager.AppSettings[SmsSettingNames.DefaultSmsTemplateCode] ?? ""),
//Host settings

修改web.config,添加如下配置节点

 <!-- 短信api配置开始-->
<add key="Abp.Net.Sms.AppKey" value="" />
<add key="Abp.Net.Sms.AppSecret" value="" />
<add key="Abp.Net.Sms.DefaultFreeSignName" value="填写签名名称" />
<add key="Abp.Net.Sms.DefaultSmsTemplateCode" value="填写模板ID" />
<add key="Abp.Net.Sms.ServiceUrl" value="" />
<!-- 短信api配置结束-->

AppKey、AppSecret都可以在阿里云后台获取

修改AbpZeroTemplateCoreModule,代码修改如下

文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Core\AbpZeroTemplateCoreModule.cs

if (DebugHelper.IsDebug)
{
//调试模式禁用邮件发送
//IocManager.Register<IEmailSender, NullEmailSender>(DependencyLifeStyle.Transient);
//调试模式禁用手机短信发送
//IocManager.Register<ISmsSender, NullSmsSender>(DependencyLifeStyle.Transient);
}

可以看到我都备注掉,因为我就是要在调试模式下测试邮件、短信是否能够发送。

[DependsOn(typeof(AbpZeroCoreModule),
typeof(AbpZeroLdapModule),
typeof(AbpAutoMapperModule),
typeof(AbpNetSmsModule)
)]

此处是添加短信模块依赖

Application项目

添加文件ISmsMessageService.cs

文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Authorization\Users\ISmsMessageService.cs

public interface ISmsMessageService : IApplicationService
{
void Send(string to, string templateCode, string templateParams);
Task SendAsync(string to, string templateCode, string templateParams);
}

再添加实现文件SmsMessageService.cs

文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Authorization\Users\SmsMessageService.cs

public class SmsMessageService: ISmsMessageService
{
private readonly ISmsSender _smsSender; public SmsMessageService(ISmsSender smsSender)
{
_smsSender = smsSender;
} public void Send(string to, string templateCode, string templateParams)
{
_smsSender.Send(to, templateCode, templateParams);
} public async Task SendAsync(string to, string templateCode, string templateParams)
{
await _smsSender.SendAsync(to, templateCode, templateParams);
}
}

测试短信发送

最后,生成项目

浏览器打开:http://localhost:8088/swagger/ui/index(8088是IIS配置的端口)

找到app_smsMessageService服务进行测试

同步、异常都测试通过,至此手机短信发送模块集成完成。

返回总目录

摘要: 上篇文章已经封装好了类库,现在继续实现功能,在ABPZero框架的基础上来实现一个完整的功能。 Redis缓存 编写功能前先在本机安装好Redis,需要用到Redis做缓存,以下分享2个Windows安装Redis的教程 博客园:http://www.cnblogs.com/mzws/p/redis阅读全文
posted @ 2018-01-17 18:30李子深 阅读(105) |评论 (1)编辑
摘要: 本篇开始正式做功能,我在开发拼团提醒之前,拼多多并没有放出拼团人数不足就提醒卖家的功能。 有这个想法主要来源于朋友的抱怨,我想这应该是大部分卖家的心声吧。 经过分析,拿到了几个api,不要问我api怎么拿到的,这不是本系列的内容。 接口1:http://apiv4.yangkeduo.com/mal阅读全文
posted @ 2018-01-17 14:02李子深 阅读(27) |评论 (1)编辑
摘要: 现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤。 前面已经有一篇文章讲到集成短信发送模块:http://www.cnblogs.com/shensigzs/category/1147235.html阅读全文
posted @ 2018-01-15 20:11李子深 阅读(454) |评论 (8)编辑
摘要: 本篇开始进入重头戏,之前的几篇文章都是为了现在的功能作准备。前面教程已经讲到修改User表结构,接下来就需要修改注册逻辑代码。 注册页面 修改Register.cshtml,备注如下代码: 文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0阅读全文
posted @ 2018-01-15 19:29李子深 阅读(122) |评论 (0)编辑
摘要: 接着上篇文章,现在去修改注册登录逻辑代码还为时过早,我们还需要到后台去设置一些配置。 管理 设置 先配置好这2项设置,邮箱配置是为了验证注册时功能是否正常,下一篇文章需要用到。 注:邮箱配置中的密码并不是QQ密码,而是在QQ邮箱中生成的授权码,具体获取请登录QQ邮箱查看 语言翻译 进入后台可以看到圈阅读全文
posted @ 2018-01-14 21:12李子深 阅读(308) |评论 (2)编辑
摘要: 毕竟这个框架是外国人开发的,对于我们国人来说还是有些地方并不合适,就好比如注册时需要填写名字、姓氏一样,今天要说的就是如何去掉这2个字段。 先看如下修改完成的效果图 User表结构修改 修改User类,添加如下代码: 文件路径:D:\abp version\aspnet-zero-3.4.0\asp阅读全文
posted @ 2018-01-14 13:27李子深 阅读(133) |评论 (1)编辑
摘要: ABPZero并没有手机短信发送功能,现在我们来集成一个,为后面注册、登录作铺垫。 阿里云短信服务 首先需要在阿里云开通短信服务,连接地址 开通后,在签名管理中添加一个签名 在模板管理中添加一个模板,如下图所示 最后需要使用阿里云提供的.NET发送短信类库,下面可以直接下载我上传的类库,也可以去官方阅读全文
posted @ 2018-01-13 21:11李子深 阅读(332) |评论 (2)编辑
摘要: 本篇内容杂而简单,不需要多租户、不需要多语言、使用MPA(多页面)、页面加载速度提升…… 刚登录系统会看到如下界面,这不是最终想要的效果,以下就一一来修改。 不需要多租户 AbpZeroTemplateConsts.cs代码修改如下 文件路径:D:\abp version\aspnet-zero-3阅读全文
posted @ 2018-01-13 17:11李子深 阅读(131) |评论 (4)编辑
摘要: 因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql。 项目初始化 1、下载项目压缩包,前面文章已经说到,可以加群到群文件里下载。解压缩下载的项目源码,使用VS2015打开项目 这里需要还原包,选择解决方案 右键(还原NuGet包),现在还原NuGet包比之前快阅读全文
posted @ 2018-01-13 13:15李子深 阅读(129) |评论 (0)编辑
摘要: 此系列文章围绕着拼多多卖家工具来介绍ABPZero的使用,内容包括手机登录、手机注册、拼团提醒、微信公众号绑定帐号、有拼团发送消息到微信公众号(只要关注过微信公众号并已绑定系统帐号)。 学习此系列必备: 手机验证码:使用阿里云短信,可注册阿里云帐号订购(后续会介绍) 微信公众号:我所使用的是认证过的阅读全文

ABP集成短信发送模块的更多相关文章

  1. 4、ABPZero系列教程之拼多多卖家工具 集成短信发送模块

    ABPZero并没有手机短信发送功能,现在我们来集成一个,为后面注册.登录作铺垫. 阿里云短信服务 首先需要在阿里云开通短信服务,连接地址 开通后,在签名管理中添加一个签名 在模板管理中添加一个模板, ...

  2. Abp 添加阿里云短信发送

    ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...

  3. Laravel SMS 短信发送包

    Laravel Sms Laravel 贴合实际需求同时满足多种通道的短信发送组件 我们基于业务需求在 overtrue/easy-sms 基础进行扩展开发,主要实现如下目标: 支持短信验证码直接在 ...

  4. ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成

    在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...

  5. spring boot集成阿里云短信发送接收短信回复功能

    1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...

  6. 轻松集成腾讯云短信服务实现短信发送(Java实现)

    不论是阿里云还是腾讯云,要想在网站上实现短信发送功能,首先得保证你的网站域名是通过备案的,因为短信签名是需要用到备案过的域名截图,所以域名通过了,申请很快就会审批成功了. (说点题外话,备案的话,需要 ...

  7. Android短彩信源码解析-短信发送流程(三)

    3.短信pdu的压缩与封装 相关文章: ------------------------------------------------------------- 1.短信发送上层逻辑 2.短信发送f ...

  8. 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场

    前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...

  9. day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口

    目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...

随机推荐

  1. Django之Template

    模板层(template) 概念:  模板与html的区别:  模板=html+模板语法 模板语法: 1 变量:       {{}}    深度查询: 通过句点符.    列表,字典    clas ...

  2. esp8266(3) Arduino通过ESP8266连接和获取网站源代码

    http://www.plclive.com/a/tongxinjiekou/2016/0422/374.html 在上一篇8266的基础上,这一篇做个具体的连接网站的例子,供大家参考.上一篇基础篇请 ...

  3. ARDUINO 中断

    设置中断函数   attachInterrupt() attachInterrupt(interrupt, function, mode) 描述: 当发生外部中断时,调用一个指定函数.当中断发生时,该 ...

  4. rac添加新节点的步骤与方法2

    上一篇文章,把节点删除了.这次新增加一个节点 .新增加的节点是host03.如下: #Public IP192.168.16.45 racdb1192.168.16.46 racdb2192.168. ...

  5. Linux系统学习之文件管理

    Linux目录分布通常是树形,所以它的结构又称为目录树. 一.文件和目录管理 [root@Cfhost-170820-UCNK /]# cd / [root@Cfhost-170820-UCNK /] ...

  6. 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了

    作者:周平章链接:https://www.zhihu.com/question/52008623/answer/187927508来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  7. <转>jmeter(十四)HTTP请求之content-type

    本博客转载自:http://www.cnblogs.com/dinghanhua/p/5646435.html 个人感觉不错,对jmeter最常用的取样器http请求需要用到的信息头管理器做了很好的解 ...

  8. 学习CSS布局 - 没有布局

    如果你只想把所有内容都塞进一栏里,那么不用设置任何布局也是OK的. 然而,如果用户把浏览器窗口调整的很大,这时阅读网页会非常难受: 读完每一行之后,你的视觉焦点要从右到左移动一大段距离. 试着调整下浏 ...

  9. 浅谈Java泛型中的extends和super关键字

    泛型是在Java 1.5中被加入了,这里不讨论泛型的细节问题,这个在Thinking in Java第四版中讲的非常清楚,这里要讲的是super和extends关键字,以及在使用这两个关键字的时候为什 ...

  10. 上传头像,layui上传图片

    layui上传与bootstrap上传相似,只是不需要下插件, layui自带的已够用 先看一下前台界面,这里是用到的上传头像 先点击开始上传,头像上传至服务器中, 返回json添加至form表单中, ...