SpringBoot整合阿里云SMS短信服务 并实现发送短信验证码的功能 Redis Java 短信验证码
目录
准备工作
首先需要去 阿里云官网获取您的 AccessKey 和 AccessKey Secert
教程: 获取AccessKey教程地址.
-
1.打开阿里云控制台
-
可以 先在控制台中选择 快速 学习先看下基本的操作 可以测试基本短信发送
2.国内消息 => 签名管理 => 添加签名
-
见下图
注意事项 : 申请说明不能随便写! 否则不能通过审核!!
3.国内消息 => 签名管理 =>创建模板
-
↓
注意事项${xxxx}代表参数 可以使用 java进行传入
申请说明不能随便写! 否则不能通过审核!!
3.记住签名的名称 和模板Code,待会要使用
-
↓
整合
1.引入依赖
代码如下:
<!--Aliyun sms Begin-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.67</version>
</dependency>
<!--Aliyun sms end-->
<!--Redis Begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Redis End-->
2.接口+实现类(详细看注解)
接口代码如下:
import java.util.Map;
public interface SendSms {
public boolean send(String phoneNum, String templateCode, Map<String,Object> code);
}
实现类代码如下:
@Service
public class SendSmsImpl implements SendSms {
@Override
public boolean send(String phoneNum, String templateCode, Map<String, Object> code) { //phoneNum手机号 templateCode模板 code验证码
//连接阿里云
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "你的accessKeyID", "你的accessKeySecret");
IAcsClient client = new DefaultAcsClient(profile);
//构建请求
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com"); //不要动
request.setVersion("2017-05-25"); //不要动
request.setAction("SendSms");
//自定义的参数(手机号,验证码,签名,模板)
request.putQueryParameter("PhoneNumbers",phoneNum); //手机号参数
request.putQueryParameter("SignName","神签名名称"); //签名
request.putQueryParameter("TemplateCode",templateCode); //模板参数
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code)); //验证码
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
3.控制层(详细看注解)
代码如下:
@Controller
@CrossOrigin //跨域支持
public class SmsApiController {
@Autowired
private SendSms smsSend;
@Autowired
private RedisTemplate<String,String> redisTemplate;
@GetMapping("/send/{phone}")
@ResponseBody
public String code(@PathVariable("phone") String phone){
//调用发送方法 (模拟真实业务 redis)
String code = redisTemplate.opsForValue().get(phone); //能查到,代表没过期
if(!StringUtils.isEmpty(code)){
return phone + ":" +code + "已存在,未过期";
}
code = UUID.randomUUID().toString().substring(0,5); //生成5位数随机验证码
Map<String,Object> map = new HashMap<>();
map.put("code",code); //添进验证码
boolean isSend = smsSend.send(phone,"SMS_210076977",map);
System.out.println(phone);
if(isSend){
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.SECONDS);
return phone + ":" + code +"发送成功";
}else{
return "发送失败";
}
}
}
4.配置文件
server.port=9090
spring.redis.host= //填写自己的Redis地址
spring.redis.port=6379 //端口,6379是默认的
//当然我们的accessKeyID和accessKeySecret都可以配置在这里
5.访问接口
收到手机短信
注意事项
千万千万不能把 阿里云的 accessKey 和 accessSecret 泄露了
在 sms控制台内 可以设置 短信的安全 发送频率等等的设置
在控制台内还有帮助文档!
完结撒花
忽有故人心上过,回首山河已是冬,何时仗尔看梅雪,我与梅花两白头!