SpringBoot中使用阿里云短信服务
前言:最近在学习中用到了手机号验证码登录的功能,这里是使用阿里云中的短信服务。具体流程如下
1.阿里云服务开通
1.进入阿里云,打开控制台,在产品与服务中找到云通信,下方有一个短信服务
2.进入短信服务,点击快速学习,可以看到要想发送短信,需要完成如下四步,在正式的的情况的需要完成申请签名,申请模板,前两个步骤,但是申请签名是需要条件的,个人是无法申请的。
3.这里我们选择
4.转到api测试功能,可以看到,发送测试的时候也是需要充值的,建议先充值一块钱 (这里我就冲了一块,太穷啦!)
5.要想发送测试先绑定测试手机号,选择你要测试的手机号(就是你接受验证码的那个手机号)
6.在下方,有阿里云测试的签名和模板,后面调用的时候需要使用
7.下面我们就要创建一个AccessKey(在程序中调用时使用,相当于你的阿里云的账号和密码)
8.进入AccessKey管理,选择开始使用子用户
9.创建用户
10.选择Open API 调用访问
11.创建成功后,出现AccessKey ID 和 AccessKey Secret,这个要记录下来,只出现一次。
12.点击用户
13.在这里就可以看到你刚刚创建的用户信息,点击添加权限,将短信服务的权限添加进去
14到这里就设置完成了,下面转到idea中,这样在程序中就能使用了
2.springBoot项目使用阿里云短信服务
1.导入maven坐标
<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>
2.创建工具类
/**
* 短信发送工具类
*/
public class SMSUtils {
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 参数
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
//填入刚刚创建用户时记录的AccessKey ID和AccessKey Secret
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKey ID",
"AccessKey Secret");
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();
}
}
}
/**
* 随机生成验证码工具类
*/
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;
}
}
3.在测试类中测试验证码是否可以正常使用
@Test
public void TestCode(){
//获取手机号
String phone = ""; //输入手机号,要填绑定测试的手机号码
//生成验证码
String code = ValidateCodeUtils.generateValidateCode(4).toString();
//发送短信
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 参数
*/
SMSUtils.sendMessage("阿里云短信测试","SMS_154950909",phone,code);
}
4.测试成功!验证码可以正常使用