阿里雲短信工具類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() {
}
}