| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // 此源代码遵循位于源代码树根目录中的 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);
- }
- }
|