在我们生活中,使用的各种各样的网站、APP在登录、注册、支付、修改密码等需要进行安全验证的地方都要进行短信的验证。
一、实现思路:
二、流程
- 客户输入手机号后,点击发送验证码,向服务器发送请求
- 服务器接收到请求后,获取到客户的手机号,并随机生成验证码,将验证码存储起来,有了手机号和验证码,向运营商发起发送短信的请求
- 运营商向客户手机发送短信
- 客户将收到接收到的验证码填写之后,点击提交,向服务器发起请求,判断发送的和客户输入的是否相同。
三、实现
阿里云、腾讯云、华为云......很多平台都提供有短信服务
- 我们登陆阿里云平台可以直接搜索短信服务
-
在这里我们选择国内短信,然后需要添加签名
-
输入签名名称,签名为发送的验证码的前缀,场景选择验证码,但是验证码这里个人用户只能申请一次。上传需要的东西,填写申请说明,等待审核就行了
- 接下来需要添加模板,选择验证码,然后根据要求填写要求的内容,提交等待审核即可
-
因为发送短信并不是免费的,需要保证你的账号里有余额。
-
在快速学习中,点击查看API Demo
-
填入信息,点击发起调用即可进行测试
-
测试成功的话, 后面我们只需要将示例代码复制到我们的程序程序代码中即可
-
我们首先需要在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>
-
将代码复制到程序中,这两个参数是需要自己填写的,我们点击 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();
}
}
````
-
可以根据自己的需求决定怎么存储验证码
-
用户输入验证码后,将用户输入的和自己存储的进行比较,看是否相同