You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.8 KiB
84 lines
2.8 KiB
6 months ago
|
// 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
|
||
|
//
|
||
|
// 此源代码遵循位于源代码树根目录中的 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);
|
||
|
}
|
||
|
}
|