SpringBoot整合阿里云短信服务的案例代码
1. 准备工作
- 注册阿里云账号:首先确保你有一个阿里云账号,并且已经开通了短信服务。
- 获取AccessKey ID和AccessKey Secret:在阿里云控制台的安全管理页面创建AccessKey,这是访问阿里云API的凭证。
- 申请短信签名和模板:在阿里云短信服务控制台申请短信签名和短信模板,签名用于标识发送者的身份,模板用于定义短信内容,需要审核通过才能使用。
2. 添加依赖
在Spring Boot项目的pom.xml
文件中添加阿里云短信服务SDK的依赖。例如:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.1.0</version> </dependency>
3. 配置阿里云短信服务
在application.yml
或application.properties
中配置AccessKey ID、AccessKey Secret以及其他可能需要的参数,例如:
sms: aliyun: accessKeyId: your-access-key-id accessKeySecret: your-access-key-secret signName: #### # 是否开启短信服务 pushSms: true templateCode: SMS_#########
4. 创建配置类
package com.example.demo.config.sms; import com.aliyun.teaopenapi.models.*; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @author xueyaoxuan */ @Data @Component @ConfigurationProperties(prefix = "sms.aliyun") public class AliYunSmsConfig { private String accessKeyId; private String accessKeySecret; private String signName; private boolean isPushSms; /** * 使用AK&SK初始化账号Client * * @return Client * @throws Exception */ public com.aliyun.dysmsapi20170525.Client createClient() throws Exception { Config config = new Config() // AccessKey ID .setAccessKeyId(this.getAccessKeyId()) // AccessKey Secret .setAccessKeySecret(this.getAccessKeySecret()); // 访问的域名 config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi20170525.Client(config); } }
5. 创建服务类
创建一个服务类来封装发送短信的逻辑
package com.example.demo.sms; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.aliyun.dysmsapi20170525.Client; import com.aliyun.dysmsapi20170525.models.SendSmsRequest; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; import com.example.demo.config.sms.AliYunSmsConfig; import com.example.demo.config.ResultCode; import com.example.demo.exception.base.BaseException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.stream.Collectors; /** * 阿里云短信服务实现 * @author xueyaoxuan */ @Slf4j @Component public class AliYunSmsServiceImpl implements SmsService { @Autowired AliYunSmsServiceImpl (AliYunSmsConfig aliYunSmsConfig) { this.aliYunSmsConfig = aliYunSmsConfig; } private AliYunSmsConfig aliYunSmsConfig; @Override public void sendSms(List<String> mobiles, String message, String code) { SendSmsResponse sendSmsResponse = null; try{ //调用阿里云api手机号上限1000 if (mobiles.size()>1000){ throw new BaseException(ResultCode.EM_SMS_MAX_LIMIT); } //检验手机号格式 mobiles.forEach(mobile->{ if (StrUtil.isAllEmpty(mobile)){ throw new BaseException(ResultCode.EM_SMS_INVALID_MOBILE); } }); sendSmsResponse = sendALiYunSms(mobiles.stream().collect(Collectors.joining(",")), message, code); log.info("阿里云短信服务响应:[{}]",JSON.toJSONString(sendSmsResponse)); } catch (Exception e) { e.printStackTrace(); } } /** * 发送阿里云短信 * * @param mobiles 手机号列表 * @param message json格式的模板参数 * @param code 阿里云短信模板code * @return * @throws Exception */ private SendSmsResponse sendALiYunSms(String mobiles,String message,String code) throws Exception { //初始化Client对象 Client client = aliYunSmsConfig.createClient(); //构建请求参数 SendSmsRequest sendSmsRequest = new SendSmsRequest() .setPhoneNumbers(mobiles) .setSignName(aliYunSmsConfig.getSignName()) .setTemplateCode(code) .setTemplateParam(message); //发送短信 return client.sendSms(sendSmsRequest); } }
6.自定义异常
package com.example.demo.config; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import java.io.Serializable; /** * ResultCode : 响应封装实现类 * * @author zyw * @create 2023/6/15 */ @AllArgsConstructor @NoArgsConstructor public enum ResultCode implements IResultCode, Serializable { //短信发送次数超过限制 EM_SMS_MAX_LIMIT("10001","短信发送次数超过限制"), //无效的手机号码 EM_SMS_INVALID_MOBILE("10002","无效的手机号码"); @Override public String getCode() { return code; } @Override public String getMsg() { return msg; } private String code; private String msg; @Override public String toString() { return "{" + "\"code\":\"" + code + '\"' + ", \"msg\":\"" + msg + '\"' + '}'; } // 默认系统执行错误 public static ResultCode getValue(String code) { for (ResultCode value : values()) { if (value.getCode().equals(code)) { return value; } } return ECEPTION; } }
7.使用服务类发送短信
在需要发送短信的地方注入SmsService
并调用其方法发送短信。
package com.example.demo.controller; import com.alibaba.fastjson.JSON; import com.example.demo.sms.SmsService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; /** * SmsController : 短信控制器 * * @author zyw * @create 2024-06-11 15:56 */ @RestController @Tag(name = "短信控制器") @RequestMapping("sms") public class SmsController { @Resource private SmsService smsService; @Value("${sms.aliyun.templateCode}") private String templateCode; //发送短信 @Operation(summary = "单个手机号发送短信验证码") @PostMapping("/SendATextMessageByhone") public String SendATextMessageByhone(String mobile, String message) { Map<String, String> tempContentMap = new HashMap<>(); tempContentMap.put("code", String.valueOf(message)); smsService.sendSms(List.of(mobile), JSON.toJSONString(tempContentMap), templateCode); return "短信发送成功"; } }
请确保替换成你自己的AccessKey信息、签名、模板CODE等,以及根据实际情况调整参数。此外,考虑到安全性,不要直接在版本控制系统中提交敏感信息,如AccessKey ID和AccessKey Secret,应使用环境变量或外部配置管理服务来管理这些信息。
8.测试短信
到此这篇关于SpringBoot整合阿里云短信服务的文章就介绍到这了,更多相关SpringBoot阿里云短信服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程
这篇文章主要为大家介绍了web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)
这篇文章主要介绍了IDEA配置静态资源热加载操作(Springboot修改静态资源不重启),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-10-10nacos在liunx系统中启动成功浏览器却访问不了的解决方法
在linux下搭建nacos,现在想要启动,访问nacos页面,访问不了,所以本文小编将给大家介绍nacos在liunx系统中启动成功,浏览器却访问不了?全面的解决办法,需要的朋友可以参考下2023-09-09
最新评论