提供短信发送的抽象层,支持多种短信服务提供商。

核心接口

SmsSenderService

短信发送接口,继承 SmsService:

public interface SmsSenderService extends SmsService {
    SmsSenderVo send(SmsSenderDto request);
}

SmsTemplateService

短信模板接口,继承 SmsService:

public interface SmsTemplateService extends SmsService {
    Map<String, String> getTemplate();
}

SmsManager

短信管理器,统一管理多个短信服务提供商:

@Resource
private SmsManager smsManager;

public void sendSms() {
    SmsSenderDto dto = SmsSenderDto.builder()
        .phoneNumber("13800138000")
        .signName("签名")
        .templateName("验证码模板")
        .templateParams(Map.of("code", "123456"))
        .build();
    SmsSenderVo result = smsManager.send(dto);
}

SmsSenderDto 字段

字段

说明

phoneNumber

接收手机号

signName

短信签名

templateName

短信模板名称

templateParams

模板参数

templateCode

模板代码

sendTime

定时发送时间

SmsSenderVo 字段

字段

说明

success

是否发送成功

code

响应码

message

响应消息

requestId

请求ID

sendTime

发送时间

自定义短信服务

继承 AbstractSmsSenderService,实现具体的短信发送逻辑:

@Component
public class AliyunSmsSenderService extends AbstractSmsSenderService {
    @Override
    public String getProvider() {
        return "aliyun";
    }

    @Override
    public SmsSenderVo send(SmsSenderDto request) {
        // 调用阿里云短信API
        return SmsSenderVo.builder()
            .success(true)
            .code("OK")
            .message("发送成功")
            .build();
    }
}

SmsTemplateManager

模板管理器,默认提供 MemorySmsTemplateManager 基于内存的实现:

@Bean
public SmsTemplateManager smsTemplateManager() {
    MemorySmsTemplateManager manager = new MemorySmsTemplateManager();
    manager.addTemplateService(new MySmsTemplateService());
    return manager;
}