java使用阿里云平台实现发送短信验证码功能


在我们生活中,使用的各种各样的网站、APP在登录、注册、支付、修改密码等需要进行安全验证的地方都要进行短信的验证。

一、实现思路:

二、流程
  1. 客户输入手机号后,点击发送验证码,向服务器发送请求
  2. 服务器接收到请求后,获取到客户的手机号,并随机生成验证码,将验证码存储起来,有了手机号和验证码,向运营商发起发送短信的请求
  3. 运营商向客户手机发送短信
  4. 客户将收到接收到的验证码填写之后,点击提交,向服务器发起请求,判断发送的和客户输入的是否相同。
三、实现

阿里云、腾讯云、华为云......很多平台都提供有短信服务

  1. 我们登陆阿里云平台可以直接搜索短信服务

  1. 在这里我们选择国内短信,然后需要添加签名

  2. 输入签名名称,签名为发送的验证码的前缀,场景选择验证码,但是验证码这里个人用户只能申请一次。上传需要的东西,填写申请说明,等待审核就行了


  1. 接下来需要添加模板,选择验证码,然后根据要求填写要求的内容,提交等待审核即可

  1. 因为发送短信并不是免费的,需要保证你的账号里有余额。

  2. 在快速学习中,点击查看API Demo

  3. 填入信息,点击发起调用即可进行测试

  1. 测试成功的话, 后面我们只需要将示例代码复制到我们的程序程序代码中即可

  2. 我们首先需要在maven项目中引入阿里云的sdk

<!-- 阿里云sdk -->
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.6</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-ecs</artifactId>
                <version>4.17.6</version>
            </dependency>
  1. 将代码复制到程序中,这两个参数是需要自己填写的,我们点击 AccessKey 管理可以创建自己的 AccessKey ,将申请的填写在自己的程序代码中即可

public void sendCode(String phone, Users users){
            String accessKeyId="";
            String accessSecret="";
            //<accessKeyId>", "<accessSecret>
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
            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("RegionId", "cn-hangzhou");
            request.putQueryParameter("PhoneNumbers", phone);
            request.putQueryParameter("SignName", "***");
            request.putQueryParameter("TemplateCode", "*******");
            //随机生成验证码

            String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);//生成短信验证码
            request.putQueryParameter("TemplateParam", "{\"code\":"+verifyCode+"}");
            try {
                CommonResponse response = client.getCommonResponse(request);
                System.out.println(response.getData());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
`
  1. 可以根据自己的需求决定怎么存储验证码

  2. 用户输入验证码后,将用户输入的和自己存储的进行比较,看是否相同


原文链接:https://www.cnblogs.com/bweb001/p/12960363.html