ABP集成短信发送模块

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

阿里云短信服务

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

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

ABP集成短信发送模块

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

ABP集成短信发送模块

最后需要使用阿里云提供的.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

ABP集成短信发送模块

Core项目添加实现

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

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

ABP集成短信发送模块
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;
}
}
}
ABP集成短信发送模块

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

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

ABP集成短信发送模块
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
ABP集成短信发送模块

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

ABP集成短信发送模块
 <!-- 短信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配置结束-->
ABP集成短信发送模块

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

修改AbpZeroTemplateCoreModule,代码修改如下

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

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

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

[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

ABP集成短信发送模块
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);
}
}
ABP集成短信发送模块

测试短信发送

最后,生成项目

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

找到app_smsMessageService服务进行测试

ABP集成短信发送模块

ABP集成短信发送模块

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

返回总目录

摘要: 上篇文章已经封装好了类库,现在继续实现功能,在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的使用,内容包括手机登录、手机注册、拼团提醒、微信公众号绑定帐号、有拼团发送消息到微信公众号(只要关注过微信公众号并已绑定系统帐号)。 学习此系列必备: 手机验证码:使用阿里云短信,可注册阿里云帐号订购(后续会介绍) 微信公众号:我所使用的是认证过的阅读全文
上一篇:ural1090 In the Army Now


下一篇:SwipeRefreshLayout嵌套ScrollView实现下拉刷新