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>
    
  3. 将代码复制到程序中,这两个参数是需要自己填写的,我们点击 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. 用户输入验证码后,将用户输入的和自己存储的进行比较,看是否相同

posted @ 2020-05-25 19:06  耿培兵  阅读(876)  评论(0编辑  收藏  举报