13 changed files with 347 additions and 4 deletions
@ -0,0 +1,40 @@ |
|||||
|
namespace LINGYUN.Abp.Sms.Aliyun; |
||||
|
public class AliyunSmsVerifyCodeResponse |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 请求状态码, OK代表请求成功
|
||||
|
/// </summary>
|
||||
|
public string Code { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 状态码的描述
|
||||
|
/// </summary>
|
||||
|
public string Message { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 请求是否成功
|
||||
|
/// </summary>
|
||||
|
public bool Success { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 请求结果数据
|
||||
|
/// </summary>
|
||||
|
public AliyunSmsVerifyCodeModel Model { get; set; } |
||||
|
} |
||||
|
|
||||
|
public class AliyunSmsVerifyCodeModel |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 请求Id
|
||||
|
/// </summary>
|
||||
|
public string RequestId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 业务Id
|
||||
|
/// </summary>
|
||||
|
public string BizId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 外部流水号
|
||||
|
/// </summary>
|
||||
|
public string OutId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 验证码, 仅当使用阿里云短信验证服务生成验证码时携带
|
||||
|
/// </summary>
|
||||
|
public string VerifyCode { get; set; } |
||||
|
} |
||||
@ -0,0 +1,15 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace LINGYUN.Abp.Sms.Aliyun; |
||||
|
/// <summary>
|
||||
|
/// 阿里云发送短信验证码接口
|
||||
|
/// </summary>
|
||||
|
public interface IAliyunSmsVerifyCodeSender |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 发送短信验证码
|
||||
|
/// </summary>
|
||||
|
/// <param name="message"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task SendAsync(SmsVerifyCodeMessage message); |
||||
|
} |
||||
@ -0,0 +1,88 @@ |
|||||
|
namespace LINGYUN.Abp.Sms.Aliyun; |
||||
|
public class SmsVerifyCodeMessage |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 方案名称,如果不填则为“默认方案”。最多不超过 20 个字符。
|
||||
|
/// </summary>
|
||||
|
public string SchemeName { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 号码国家编码。默认为 86,目前也仅支持中国国内号码发送。
|
||||
|
/// </summary>
|
||||
|
public string CountryCode { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 上行短信扩展码。上行短信指发送给通信服务提供商的短信,用于定制某种服务、完成查询,或是办理某种业务等,需要收费,按运营商普通短信资费进行扣费。
|
||||
|
/// </summary>
|
||||
|
public string SmsUpExtendCode { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 外部流水号。
|
||||
|
/// </summary>
|
||||
|
public string OutId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 验证码长度支持 4~8 位长度,默认是 4 位。
|
||||
|
/// </summary>
|
||||
|
public long? CodeLength { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 验证码有效时长,单位秒,默认为 300 秒。
|
||||
|
/// </summary>
|
||||
|
public long? ValidTime { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 核验规则,当有效时间内对同场景内的同号码重复发送验证码时,旧验证码如何处理。
|
||||
|
/// </summary>
|
||||
|
/// <remarks>
|
||||
|
/// 1 - 覆盖处理(默认),即旧验证码会失效掉。<br />
|
||||
|
/// 2 - 保留,即多个验证码都是在有效期内都可以校验通过。
|
||||
|
/// </remarks>
|
||||
|
public long? DuplicatePolicy { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 时间间隔,单位:秒。即多久间隔可以发送一次验证码,用于频控,默认 60 秒。
|
||||
|
/// </summary>
|
||||
|
public long? Interval { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 生成的验证码类型。当参数 TemplateParam 传入占位符时,此参数必填,将由系统根据指定的规则生成验证码。
|
||||
|
/// </summary>
|
||||
|
/// <remarks>
|
||||
|
/// 1 - 纯数字(默认)。
|
||||
|
/// 2 - 纯大写字母。
|
||||
|
/// 3 - 纯小写字母。
|
||||
|
/// 4 - 大小字母混合。
|
||||
|
/// 5 - 数字+大写字母混合。
|
||||
|
/// 6 - 数字+小写字母混合。
|
||||
|
/// 7 - 数字+大小写字母混合。
|
||||
|
/// </remarks>
|
||||
|
public long? CodeType { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 是否返回验证码。
|
||||
|
/// </summary>
|
||||
|
public bool? ReturnVerifyCode { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 是否自动替换签名重试(默认开启。
|
||||
|
/// </summary>
|
||||
|
public bool? AutoRetry { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 短信接收方手机号。
|
||||
|
/// </summary>
|
||||
|
public string PhoneNumber { get; } |
||||
|
/// <summary>
|
||||
|
/// 签名名称。暂不支持使用自定义签名,请使用系统赠送的签名。
|
||||
|
/// </summary>
|
||||
|
public string SignName { get; } |
||||
|
/// <summary>
|
||||
|
/// 短信模板 CODE。参数SignName选择赠送签名时,必须搭配赠送模板下发短信。您可在赠送模板配置页面选择适用您业务场景的模板。
|
||||
|
/// </summary>
|
||||
|
public string TemplateCode { get; } |
||||
|
/// <summary>
|
||||
|
/// 短信模板参数。
|
||||
|
/// </summary>
|
||||
|
public SmsVerifyCodeMessageParam TemplateParam { get; } |
||||
|
public SmsVerifyCodeMessage( |
||||
|
string phoneNumber, |
||||
|
SmsVerifyCodeMessageParam templateParam, |
||||
|
string signName = null, |
||||
|
string templateCode = null) |
||||
|
{ |
||||
|
PhoneNumber = phoneNumber; |
||||
|
TemplateParam = templateParam; |
||||
|
SignName = signName; |
||||
|
TemplateCode = templateCode; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
namespace LINGYUN.Abp.Sms.Aliyun; |
||||
|
public class SmsVerifyCodeMessageParam |
||||
|
{ |
||||
|
public string Code { get; } |
||||
|
public string Min { get; } |
||||
|
public SmsVerifyCodeMessageParam(string code, string min = "5") |
||||
|
{ |
||||
|
Code = code; |
||||
|
Min = min; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using System.Threading.Tasks; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace LINGYUN.Abp.Sms.Aliyun; |
||||
|
public class AliyunSmsVerifyCodeSender_Tests : AbpAliyunTestBase |
||||
|
{ |
||||
|
protected IAliyunSmsVerifyCodeSender SmsSender { get; } |
||||
|
protected IConfiguration Configuration { get; } |
||||
|
|
||||
|
public AliyunSmsVerifyCodeSender_Tests() |
||||
|
{ |
||||
|
SmsSender = GetRequiredService<IAliyunSmsVerifyCodeSender>(); |
||||
|
Configuration = GetRequiredService<IConfiguration>(); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 阿里云短信测试
|
||||
|
/// </summary>
|
||||
|
/// <param name="code"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[Theory] |
||||
|
[InlineData("123456")] |
||||
|
public async Task Send_Test(string code) |
||||
|
{ |
||||
|
var signName = Configuration["Aliyun:Sms:Sender:SignName"]; |
||||
|
var phone = Configuration["Aliyun:Sms:Sender:PhoneNumber"]; |
||||
|
var template = Configuration["Aliyun:Sms:Sender:TemplateCode"]; |
||||
|
|
||||
|
await SmsSender.SendAsync( |
||||
|
new SmsVerifyCodeMessage( |
||||
|
phone, |
||||
|
new SmsVerifyCodeMessageParam(code), |
||||
|
signName, |
||||
|
template)); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue