阿里云短信工具类2020.8.5
阿里云短信工具类2020.8.5
最近项目中需要整合阿里云的短信发送,发现使用方式有变化,封装了一套新版的阿里短信工具类,供大家参考和使用~
申请签名和模板
我们需要先登录阿里云官网,找到阿里云短信
短信模板和签名的申请不是本篇文章研究的重点,大家可以去官网自行申请~
获取Access Key
成功获取签名和模板后,我们点击右上角的头像,选择Access Key管理
如果出现安全提醒,我们可以暂时先忽略,如果对阿里云比较了解,可以申请子Access Key使用,更加安全。
点击显示,进行一个简单的短信验证,查看Access Key和Access Key Secret
导入maven依赖
新版的maven依赖:
<!-- aliyun短信 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.1</version>
</dependency>
工具类说明
工具类一共包含两部分内容SMSVO和SMSUtil,分别是返回值对象和工具类主体
方法说明:该工具类向外暴露下述两个方法
方法名 | 参数 | 返回值 | 说明 |
---|---|---|---|
sendMessage | String phoneNumber | SMSVO | 发送短信,返回自定义类,包含code(String,随机生产的六位验证码)、msg(String,成功或失败信息)和success状态(Boolean,是否成功发送) |
isPhoneNumber | String phoneNumber | boolean | 校验手机号码 |
需要修改的常量值,下面的常量需要修改为自己阿里云的信息:
/**
* 需要替换为自己的ACCESS_KEY_ID
*/
private static final String ACCESS_KEY_ID = "";
/**
* 需要替换为自己的ACCESS_KEY_SECRET
*/
private static final String ACCESS_KEY_SECRET = "";
/**
* 这里要修改为自己的短信签名
*/
private static final String SIGN_NAME = "";
/**
* 修改为自己的模板CODE
*/
private static final String TEMPLATE_CODE = "";
/**
* 模板中的变量名称 例如模板中为${code} 此处就填写code
*/
private static final String TEMPLATE_PARAM = "";
SMSVO代码
package cn.rayfoo.common.util.sms;
import lombok.Data;
/**
* @author rayfoo@qq.com
* @version 1.0
* @date 2020/8/5 21:20
* @description 短信验证码返回结果
*/
@Data
public class SMSVO {
/**
* 验证码
*/
private String code;
/**
* 是否发送成功
*/
private boolean success;
/**
* 返回信息
*/
private String msg;
}
完整的工具类SMSUtil代码:
package cn.rayfoo.common.util.sms;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author rayfoo@qq.com
* @version 1.0
* @date 2020/8/5 19:42
* @description 阿里短信工具类 2020.8.5最新使用方式
*/
public class SMSUtil {
/********************************************* 需要修改的部分start *************************************************/
/**
* 需要替换为自己的ACCESS_KEY_ID
*/
private static final String ACCESS_KEY_ID = "";
/**
* 需要替换为自己的ACCESS_KEY_SECRET
*/
private static final String ACCESS_KEY_SECRET = "";
/**
* 这里要修改为自己的短信签名
*/
private static final String SIGN_NAME = "";
/**
* 修改为自己的模板CODE
*/
private static final String TEMPLATE_CODE = "";
/**
* 模板中的变量名称 例如模板中为${code} 此处就填写code
*/
private static final String TEMPLATE_PARAM = "";
/********************************************* 需要修改的部分end *************************************************/
/**
* 下面是一些默认的配置,无需修改
* REGION_ID 服务器大区 不建议修改
* SYS_DOMAIN API地址 不可修改
* SYS_VERSION 系统版本 不可修改
* SYS_ACTION API接口名必须为SendSms 不可修改
*/
private static final String REGION_ID = "cn-hangzhou";
private static final String SYS_DOMAIN = "dysmsapi.aliyuncs.com";
private static final String SYS_VERSION = "2017-05-25";
private static final String SYS_ACTION = "SendSms";
/**
* 预编译正则,提高效率
*/
private static final Pattern PATTERN = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$");
/**
* 创建profile对象
*/
private static DefaultProfile profile = null;
/**
* 创建client对象
*/
private static IAcsClient client = null;
/**
* 创建request对象
*/
private static CommonRequest request = null;
/**
* 静态代码块中初始化一些参数
*/
static {
//初始化profile
profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
client = new DefaultAcsClient(profile);
//初始化一些参数
request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain(SYS_DOMAIN);
request.setSysVersion(SYS_VERSION);
request.setSysAction(SYS_ACTION);
request.putQueryParameter("RegionId", REGION_ID);
request.putQueryParameter("SignName", SIGN_NAME);
request.putQueryParameter("TemplateCode", TEMPLATE_CODE);
}
/**
* 校验手机号是否合法
* @param phoneNumber
* @return
*/
public static boolean isPhoneNumber(String phoneNumber) {
Matcher m = PATTERN.matcher(phoneNumber);
return m.matches();
}
/**
* 发送短信的逻辑
* @param phoneNumber 手机号码
* @return
*/
public static SMSVO sendMessage(String phoneNumber) {
//创建result
SMSVO result = new SMSVO();
//默认为false,只有成功时为true
result.setSuccess(false);
//判断是否为手机号
if(!isPhoneNumber(phoneNumber)){
result.setMsg("手机号码不合法!");
return result;
}
//获取六位随机数
String code = (long) (Math.random() * (999999 - 100000) + 100000) + "";
//初始化用户自定义参数
request.putQueryParameter("PhoneNumbers", phoneNumber);
//在短信内容中嵌入随机数
request.putQueryParameter("TemplateParam", "{\"" + TEMPLATE_PARAM + "\":\"" + code + "\"}");
//发送的业务逻辑
try {
CommonResponse response = client.getCommonResponse(request);
} catch (Exception e) {
result.setMsg("本次发送失败,请查看错误信息:" + e.getMessage());
e.printStackTrace();
return result;
}
//成功则返回正确的信息
result.setCode(code);
result.setMsg("短信发送成功!");
result.setSuccess(true);
return result;
}
/**
* 私有化构造
*/
private SMSUtil() {
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步