之前总觉得向手机发送验证码是个高逼格的技术,等自己试着做一下发现其实不难,主要是调用三方接口,根据三方提供的API进行少量程序编写。
登录阿里云官网
(1)首先,你要做的是注册一个账号,注册成功后登录,选择AccessKey管理,选择开启子用户
(2)接着,添加用户组,以及配置用户组权限
(3)创建用户,得到AccessKey(id,密码)
***账号要保密保存到本地,之后程序中用到
(4)在搜索栏搜索 “短信服务 控制台”,添加模板
(5)添加签名
(6)最后,你要做的事情是给你的阿里云账户充钱(只有充钱,才能更强)
PS:如果只是测试用,冲1块就可以,一条短信的收费是0.045元
代码
以下代码只是简单测试
首先需要引用pom依赖
<!--阿里云 短信-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
<!--Redis 为了存储验证码-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 为了统一返回的数据格式 fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
接着,写发送短信的方法
public static void sendSms(){
//连接阿里云
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "你的accessID", "你的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("PhoneNumbers", "手机号");
request.putQueryParameter("SignName", "签名");
request.putQueryParameter("TemplateCode", "模板code");
String code= UUIDUtils.getUUID().substring(0,4);
HashMap<String,Object> map=new HashMap<>();
map.put("code",code);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
注意: 这里的参数都不能改,得和我写的一模一样,我原本以为是可以改的,就把PhoneNumbers写成了PhoneNumber,结果报错,还有code必须得JSON格式化,否则也会报错