准备工作
注册阿里云账号并开通短信服务。在阿里云控制台获取AccessKey ID和AccessKey Secret。创建短信签名和模板,并记录签名名称和模板CODE。
添加依赖
在Spring Boot项目的pom.xml文件中添加阿里云短信SDK依赖:
XML
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
配置参数
在application.yml或application.properties中配置阿里云短信参数:
yaml
aliyun:
sms:
access-key-id: your-access-key-id
access-key-secret: your-access-key-secret
sign-name: your-sign-name
template-code: your-template-code
创建配置类
创建一个配置类读取配置参数:
java
@Configuration
@ConfigurationProperties(prefix = "aliyun.sms")
@Data
public class AliyunSmsConfig {
private String accessKeyId;
private String accessKeySecret;
private String signName;
private String templateCode;
}
实现短信服务
创建短信服务类,封装发送短信的逻辑:
java
@Service
@RequiredArgsConstructor
public class SmsService {
private final AliyunSmsConfig smsConfig;
public SendSmsResponse sendSms(String phoneNumber, String templateParam) throws ClientException {
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",
smsConfig.getAccessKeyId(),
smsConfig.getAccessKeySecret());
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(phoneNumber);
request.setSignName(smsConfig.getSignName());
request.setTemplateCode(smsConfig.getTemplateCode());
request.setTemplateParam(templateParam);
return client.getAcsResponse(request);
}
}
使用示例
在控制器中调用短信服务:
java
@RestController
@RequiredArgsConstructor
public class SmsController {
private final SmsService smsService;
@GetMapping("/sendSms")
public String sendSms(@RequestParam String phoneNumber) {
try {
String templateParam = "{\"code\":\"123456\"}";
SendSmsResponse response = smsService.sendSms(phoneNumber, templateParam);
return "短信发送成功,请求ID:" + response.getRequestId();
} catch (ClientException e) {
return "短信发送失败:" + e.getMessage();
}
}
}
注意事项
确保短信签名和模板已通过阿里云审核。模板参数需严格按照阿里云要求的JSON格式传递。手机号码格式需为国际区号加号码,如"8613800000000"。
阿里云短信服务有频率限制,需注意调用频率避免触发限流。建议对发送失败的情况做好日志记录和重试机制。