java调用阿里云sms发送短信验证码并存入redis中设置过期时间

阿里云sms短信验证码服务

注册阿里云账号并登录

自己注册就好,此处不再阐述

获取AccessKey ID和SECRET的值,java代码中调接口需要

  • 鼠标放到个人图像上选择AccessKey管理
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第1张图片

  • 选择开始使用子用户AccessKey
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第2张图片

  • 创建用户组
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第3张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第4张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第5张图片

  • 点击新创建的用户组名称进入下图页面,选择添加权限
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第6张图片

  • 添加下面两个权限
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第7张图片

  • 创建用户,下图中的编程访问一定要勾上
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第8张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第9张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第10张图片

  • 将新建的用户添加到新建的用户组中,用户就有了用户组的权限
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第11张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第12张图片

  • 进入阿里云的短信服务页面,添加签名和模板

    签名名称模板CODE在java代码中需要使用
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第13张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第14张图片
    java调用阿里云sms发送短信验证码并存入redis中设置过期时间_第15张图片

java代码部分

  • controller中代码

    @RestController
    @CrossOrigin
    public class SmsApiController {
        @Autowired
        private SendSms sendSms;
    
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
    
        @GetMapping("/send/{phone}")
        public String code(@PathVariable("phone") String phone) {
            //从redis中获取短信验证码
            String code = redisTemplate.opsForValue().get(phone);
            //如果redis中有,则短信验证码已发送并且有效,直接返回验证码已发送
            if (StrUtil.isNotEmpty(code)) {
                return phone + ":" + code + "验证码已发送!";
            }
            //如果redis中没有查到验证码,直接生成6位数验证码,此code和短信模板中的变量${code}保持一致
            code = RandomUtil.randomNumbers(6);
            Map<String, Object> map = new HashMap<>(1);
            map.put("code", code);
            //发送验证码,参数中的模板CODE为阿里云模板管理中生成的模板CODE
            Boolean isSend = sendSms.send(phone, "模板CODE", map);
            //发送成功后将短信验证码存入redis中,设置有效期为50秒
            if (isSend) {
                redisTemplate.opsForValue().set(phone, code, 50, TimeUnit.SECONDS);
                return phone + ":" + code + "发送成功!";
            } else {
                return "发送失败!";
            }
        }
    }
    
  • service层

    public interface SendSms {
    
        /**
         * 发送短信验证码
         * @param phoneNumber
         * @param templateCode
         * @param map
         * @return
         */
        Boolean send(String phoneNumber, String templateCode, Map<String, Object> map);
    }
    
  • service实现类

    @Service
    public class SendSmsImpl implements SendSms {
        @Override
        public Boolean send(String phoneNumber, String templateCode, Map<String, Object> map) {
            //连接阿里云,后两参数输入自己阿里云账号中生成的AccessKey ID和SECRET的值
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKey ID", "SECRET");
            IAcsClient client = new DefaultAcsClient(profile);
    
            //构建请求
            CommonRequest request = new CommonRequest();
            request.setSysMethod(MethodType.POST);
            //不要改动
            request.setSysDomain("dysmsapi.aliyuncs.com");
            //不要改动
            request.setSysVersion("2017-05-25");
            request.setSysAction("SendSms");
            //自定义参数(手机号、验证码、签名、模板),左边参数为固定写法不可更改
            request.putQueryParameter("PhoneNumbers", phoneNumber);
            //后面参数为阿里云账号中签名模板的签名名称
            request.putQueryParameter("SignName", "签名名称");
            request.putQueryParameter("TemplateCode", templateCode);
            //构建短信验证码
            request.putQueryParameter("TemplateParam", JSONUtil.toJsonStr(map));
            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;
        }
    }
    
  • 配置文件

    server:
      port: 8090
    spring:
      redis:
        host: 192.168.0.14
        port: 6379
        password: 123456
    
  • 需要的jar包

    		<dependency>
                <groupId>com.aliyungroupId>
                <artifactId>aliyun-java-sdk-coreartifactId>
                <version>4.4.1version>
            dependency>
    
            <dependency>
                <groupId>cn.hutoolgroupId>
                <artifactId>hutool-allartifactId>
                <version>5.3.7version>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
    

你可能感兴趣的:(短信业务,SMS,java,阿里云,redis)