DigitalFactory/Admin.NET/Admin.NET.Core/Service/Message/SysSmsService.cs

84 lines
2.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 大名科技(天津)有限公司版权所有 电话18020030720 QQ515096995
//
// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
using AlibabaCloud.SDK.Dysmsapi20170525.Models;
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统短信服务
/// </summary>
[AllowAnonymous]
[ApiDescriptionSettings(Order = 150)]
public class SysSmsService : IDynamicApiController, ITransient
{
private readonly SMSOptions _smsOptions;
private readonly SysCacheService _sysCacheService;
public SysSmsService(IOptions<SMSOptions> smsOptions,
SysCacheService sysCacheService)
{
_smsOptions = smsOptions.Value;
_sysCacheService = sysCacheService;
}
/// <summary>
/// 发送短信
/// </summary>
/// <param name="phoneNumber"></param>
/// <returns></returns>
[AllowAnonymous]
[DisplayName("发送短信")]
public async Task SendSms([Required] string phoneNumber)
{
if (!phoneNumber.TryValidate(ValidationTypes.PhoneNumber).IsValid)
throw Oops.Oh("请正确填写手机号码");
// 生成随机验证码
var random = new Random();
var verifyCode = random.Next(100000, 999999);
var templateParam = Clay.Object(new
{
code = verifyCode
});
var client = CreateClient();
var sendSmsRequest = new SendSmsRequest
{
PhoneNumbers = phoneNumber, // 待发送手机号, 多个以逗号分隔
SignName = _smsOptions.Aliyun.SignName, // 短信签名
TemplateCode = _smsOptions.Aliyun.TemplateCode, // 短信模板
TemplateParam = templateParam.ToString(), // 模板中的变量替换JSON串
OutId = YitIdHelper.NextId().ToString()
};
var sendSmsResponse = client.SendSms(sendSmsRequest);
if (sendSmsResponse.Body.Code == "OK" && sendSmsResponse.Body.Message == "OK")
{
// var bizId = sendSmsResponse.Body.BizId;
_sysCacheService.Set($"{CacheConst.KeyPhoneVerCode}{phoneNumber}", verifyCode, TimeSpan.FromSeconds(60));
}
else
{
throw Oops.Oh($"短信发送失败:{sendSmsResponse.Body.Code}-{sendSmsResponse.Body.Message}");
}
await Task.CompletedTask;
}
/// <summary>
/// 阿里云短信配置
/// </summary>
/// <returns></returns>
private AlibabaCloud.SDK.Dysmsapi20170525.Client CreateClient()
{
var config = new AlibabaCloud.OpenApiClient.Models.Config
{
AccessKeyId = _smsOptions.Aliyun.AccessKeyId,
AccessKeySecret = _smsOptions.Aliyun.AccessKeySecret,
Endpoint = "dysmsapi.aliyuncs.com"
};
return new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
}
}