• 短信验证码服务


    使用的是 阿里云 阿里云官网

    1.找到 左上角侧边栏 -云通信 -短信服务

    在这里插入图片描述

    2.在快速学习测试处 ,按照步骤完成快速学习,绑定要测试的手机号,选专用 【测试模板】,自定义模板需要人工审核,要一个工作日

    在这里插入图片描述

    3.右上角 获取 AccessKey 管理,获取

    在这里插入图片描述
    选择子用户,这样即使 AccessKey 泄露,也不会危机自己的阿里云账户
    在这里插入图片描述

    创建用户

    在这里插入图片描述

    进入 -获取 AccessKey ID和AccessKey 密码,只能看一次 ,截图在这里插入图片描述

    4.编写短信服务 api

    短信服务页面-点右上角问号-点文档打开
    在这里插入图片描述
    选到Java SDK–右边 安装与使用教程
    在这里插入图片描述
    有安装环境和完整代码
    在这里插入图片描述

    环境
      <!--阿里云短信服务-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    这边贴两个常见工具类
    SMSUtils 短信发送工具类

    这里面需要修改accessKeyId, accessKeySecret

    package com.ruigei.demo.Utils;
    
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
    import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.profile.DefaultProfile;
    
    /**
     * 短信发送工具类
     */
    public class SMSUtils {
    
        /**
         * 发送短信
         *
         * @param signName     签名
         * @param templateCode 模板
         * @param phoneNumbers 手机号
         * @param param        参数
         */
        public static void sendMessage(String signName, String templateCode, String phoneNumbers, String param) {
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
                    "你的 accessKeyId",
                    "你的 accessKeySecret");
            IAcsClient client = new DefaultAcsClient(profile);
    
            SendSmsRequest request = new SendSmsRequest();
            request.setSysRegionId("cn-hangzhou");
            request.setPhoneNumbers(phoneNumbers);
            request.setSignName(signName);
            request.setTemplateCode(templateCode);
            request.setTemplateParam("{\"code\":\"" + param + "\"}");
            try {
                SendSmsResponse response = client.getAcsResponse(request);
                System.out.println("短信发送成功");
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    ValidateCodeUtils 随机生成验证码工具类
    package com.ruigei.demo.Utils;
    
    import java.util.Random;
    
    /**
     * 随机生成验证码工具类
     */
    public class ValidateCodeUtils {
        /**
         * 随机生成验证码
         * @param length 长度为4位或者6位
         * @return
         */
        public static Integer generateValidateCode(int length){
            Integer code =null;
            if(length == 4){
                code = new Random().nextInt(9999);//生成随机数,最大为9999
                if(code < 1000){
                    code = code + 1000;//保证随机数为4位数字
                }
            }else if(length == 6){
                code = new Random().nextInt(999999);//生成随机数,最大为999999
                if(code < 100000){
                    code = code + 100000;//保证随机数为6位数字
                }
            }else{
                throw new RuntimeException("只能生成4位或6位数字验证码");
            }
            return code;
        }
    
        /**
         * 随机生成指定长度字符串验证码
         * @param length 长度
         * @return
         */
        public static String generateValidateCode4String(int length){
            Random rdm = new Random();
            String hash1 = Integer.toHexString(rdm.nextInt());
            String capstr = hash1.substring(0, length);
            return capstr;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    写接口
        /**
         * 获取验证码
         *
         * @param user
         * @return
         */
        @Override
        public R<String> sendMsg(User user, HttpSession session) {
            //获取手机号
            String phone = user.getPhone();
    
            if (StringUtils.hasText(phone)) {
                //生成 随机的4位验证码
                String code = ValidateCodeUtils.generateValidateCode(4).toString();
                log.info("code={}" + code);
    
    
                //调用阿里云提供的短信服务API 完成发送短信
                //参数分别是signName, templateCode, phoneNumbers, param
            SMSUtils.sendMessage("阿里云短信测试",
                    "SMS_154123456",phone,code);
    
                //需要将生成的验证码 保存到??token中
                session.setAttribute(phone, code);
              return R.success("手机验证码短信发送成功");
            }
            return  R.error("手机验证码短信发送失败");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述
    点 上图的 蓝色按钮 调用API发送短信测试一下

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/548e1be618f84829ba53180d97e1ad24.png

    输入 之前你绑定的 测试手机号 ,点发起调用。

    应该没反应,要买短信套餐,是免费的100条短信

    在这里插入图片描述
    再回到 蓝色按钮 调用API发送短信测试一下,收到短信测试成功
    在这里插入图片描述

  • 相关阅读:
    网络安全——网络空间搜索引擎
    前端例程20221024:流光效果按钮
    2023年天津财经大学珠江学院专升本报名缴费准考证下载考试须知
    设计模式是测试模式咩?
    C语言小游戏——扫雷小游戏
    Tableau常用可视化图形介绍及其适用场景
    数据挖掘的学习路径
    accelerate 的一个tip:early stopping 处可能存在的bug
    sequencer和sequence
    php遍历某月份所有日期的实例
  • 原文地址:https://blog.csdn.net/zhangaob/article/details/132626995