一、创建阿里云账号
开启服务后如果是需要生成AccessKeyID和AccessKey Secret

生成后点击访问控制再点击用户,创建用户,并勾选OpenAPI

创建登录名称和显示名称(不要带中文),点击确定
创建好之后下载csv文件方便保存,

然后点击添加权限,

在输入框中输入SMS,两个后勾选,点击确认。
可能会有同学疑问为什们不用AccessKey管理选项中的主AccessKeyID,在这里我的认为是用主AccessKeyID不安全所以不用,个人建议在程序中最好使用子用户的AccessKeyID
确认无误后测试发送短信,重新进入短信服务页面,点击快速学习和测试,如图

调用API发送短信进入控制台,如图填写就可以

然后发起调用,稍等一会儿,如果收到短信验证码就是成功,,如没有收到从头在重新过一遍,快速学习那里申请模板要花¥,手头不宽裕建议不要整
二、导入依赖
<!--阿里云短信服务--> <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>
三、编写工具类
//发送短信的工具类
public class SMSUtils {
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 随机生成的四位或六位验证码数字
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKeyID", "AccessKeySecret");
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(response.getMessage());
}catch (ClientException e) {
e.printStackTrace();
}
}
}生成随机数的工具类
public class ValidateCodeUtils {
//参数指定是四位还是六位
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;
}
}四、测试
@Test
public void sendCode(){
SMSUtils.sendMessage("阿里云短信测试","SMS_154950909",
"手机号",ValidateCodeUtils.generateValidateCode4String(6));
}测试通过后自行编写。
(小贴士:登录访问发送验证码controller方法的时候拦截器要放行哦~)

0条评论
点击登录参与评论