springboot 发送短信
1、代码用到的参数说明以下参数在阿里云平台获取AccessKey ID ---------- 点击用户头像, AccessKey 管理获取AccessKey Secret ---------- 点击用户头像, AccessKey 管理获取PhoneNumbers ---------- 电话号SignName ---------- 短信签名名称:开启短信服务,进入控制台点击左侧国内消息添加Templ
一、简介
springboot + 阿里云短信服务获取登录注册验证码,通过 redis 存储验证码并设置过期时间
二、实现
1、代码用到的参数说明
以下参数在阿里云平台获取(阿里云个人用户如果没有认证的网站、app 仅支持创建验证码签名和短信模板)
AccessKey ID ---------- 点击用户头像, AccessKey 管理获取
AccessKey Secret ---------- 点击用户头像, AccessKey 管理获取
PhoneNumbers ---------- 电话号
SignName ---------- 短信签名名称:开启短信服务,进入控制台点击左侧国内消息添加
TemplateCode ---------- 短信模板ID:开启短信服务,进入控制台点击左侧国内消息添加
TemplateParam ---------- 短信模板中的参数,json 类型 {"code":6379}
2、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3、配置 yml
配置 redis 用来存储验证码过期时间
server:
port: 9000
spring:
redis:
port: 6379
host: 127.0.0.1
password: 123456
4、代码
阿里云官网 SDK 示例:https://next.api.aliyun.com/api/Dysmsapi/2017-05-25/SendSms
@RestController
@CrossOrigin
public class Login {
@Autowired
RedisTemplate<String, String> redisTemplate;
@RequestMapping("/getSms/{phone}")
public String getSms(@PathVariable("phone") String phone) {
String s = redisTemplate.opsForValue().get(phone);
if (!StringUtils.isEmpty(s)) {
Long expire = redisTemplate.getExpire(phone);
return phone + ":" + "验证码还有" + expire + "s 过期,可以继续使用";
}
String verify = UUID.randomUUID().toString().replace("-", "").substring(0, 4);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", verify);
JSONObject sendResult = SendSms.send("18700217355", jsonObject.toJSONString());
if (sendResult.getString("Code").equals("OK")) {
/* redisTemplate.opsForValue().set(phone,verify);
redisTemplate.expireAt(phone,new Date(System.currentTimeMillis()+1000*60));*/
// 设置短信验证码过期时间一分钟
redisTemplate.opsForValue().set(phone, verify, 1, TimeUnit.MINUTES);
return phone + ":" + "验证码发送成功 verify: " + verify;
}
return phone + ":" + "验证码发送失败: " + sendResult.getString("Message");
}
SendSms
public class SendSms {
public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
public static JSONObject send(String phone, String verify) throws Exception {
JSONObject jsonObject = new JSONObject();
com.aliyun.dysmsapi20170525.Client client = SendSms.createClient("***********", "************");
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phone) // 手机号
.setSignName("****") // 短信签名名称
.setTemplateCode("*****") // 短信模板CODE
.setTemplateParam(verify); // 验证码
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
jsonObject.put("Code", sendSmsResponse.getBody().getCode());
jsonObject.put("Message", sendSmsResponse.getBody().getMessage());
return jsonObject;
}
}
三 、测试
短信发送成功
短信验证码未过期
发送失败
短信
更多推荐
所有评论(0)