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

阿里云sms短信验证码服务

注册阿里云账号并登录

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

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

  • 鼠标放到个人图像上选择AccessKey管理
    在这里插入图片描述

  • 选择开始使用子用户AccessKey
    在这里插入图片描述

  • 创建用户组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 点击新创建的用户组名称进入下图页面,选择添加权限
    在这里插入图片描述

  • 添加下面两个权限
    在这里插入图片描述

  • 创建用户,下图中的编程访问一定要勾上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 将新建的用户添加到新建的用户组中,用户就有了用户组的权限
    在这里插入图片描述
    在这里插入图片描述

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

    签名名称模板CODE在java代码中需要使用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.4.1</version>
            </dependency>
    
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.3.7</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值