赞
踩
创建用户并配置使用权限,使我们拥有调用 aliyunAPI 的权限,之后会生成 AccessKeyID 和 AccessKey密码,后面我们会使用到。需要注意的是 AccessKeyID 和 AccessKey密码生成后我们需要将他保存起来,否则后期无法查询到。
在阿里云官网搜索短信服务,进入短信服务控制台。
在这里我们申请个人资质即可,就不用上传企业的证明材料。注意个人的证件照片要清除,不能有遮挡,备注信息写上申请说明,不能随便写,审核一般在两个小时内。
申请签名。
这里的模板,就是我们发送短信的模板,需要注意的是,要注意选择纯数字,或者则是英文数字混合使用的模板。模板CODE后面我们需要使用。
1、前端发送短信验证码的请求;
2、后端收到请求后,生成验证码的code,调用阿里云API 接口发送短信;
3、判断 SMS API 的返回信息,“OK”则为成功发布;
4、发布成功将code存入redis,供后期校验使用;
5、将存入redis时的key值返回给前端。
- <dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>aliyun-java-sdk-core</artifactId>
- <version>4.6.0</version>
- </dependency>
- <dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>dysmsapi20170525</artifactId>
- <version>3.0.0</version>
- </dependency>
- <dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
- <version>1.1.0</version>
- </dependency>
- @Configuration
- public class AliyunCheckCodeConfig {
- @Bean
- public Client aliyunClient() throws Exception {
- Config config = new Config()
- .setAccessKeyId("你的AccessKeyID")
- .setAccessKeySecret("你的AccessKey密码");
- config.endpoint = "dysmsapi.aliyuncs.com";
- return new Client(config);
- }
- }
在配置类中将阿里云SMS 的客户端注册进ioc 容器,交给SpringBoot管理,这里需要将自己生成的AccessKeyID 和 AccessKey 密码替换上
- @Autowired
- private Client aliyunClient;
-
- /**
- * 发送短信验证码
- *
- * @param phone
- * @return
- */
- @Override
- public String sendPhoneCheckCode(String phone) {
- //避免重复提交
- String jsonString = redisTemplate.opsForValue().get("phone:" + phone);
- if(jsonString != null){
- return null;
- }
- //生成验证码
- Integer numCode = new Random().nextInt(1000,9999);
- String code = String.valueOf(numCode);
-
- SendSmsRequest sendSmsRequest = new SendSmsRequest();
- sendSmsRequest.setSignName("发送短信的主题")
- .setTemplateCode("你的模板CODE")
- .setPhoneNumbers("发送到的手机号")
- .setTemplateParam("{\"code\":" + code + "}");
-
- try {
- RuntimeOptions runtimeOptions = new RuntimeOptions();
- SendSmsResponse sendSmsResponse = aliyunClient.sendSmsWithOptions(sendSmsRequest, runtimeOptions);
- SendSmsResponseBody body = sendSmsResponse.getBody();
- if (body.getMessage().equals("OK")) {
- //存入redis
- String key = "phone:" + phone;
- //存入redis
- redisTemplate.opsForValue().set(key,code,3,TimeUnit.MINUTES);
- //返回key
- return key;
- } else {
- return null;
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }

这里我们需要将之前申请的模板CODE替换上,code即为替换模板中占位符的信息,我们引入了redis缓存,将生成的验证码存入缓存中,供后面的校验提供支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。