阿里云短信demo
公司的專案需要用到短信告警功能
所以寫一下筆記記錄一下學習和實踐的程序
具體特別細節的東西可以參考官方檔案
阿里官方檔案
之前做過阿里云短信的驗證碼功能但是忘記了寫筆記所以現在憑借著記憶以及查閱資料好好寫一篇筆記
筆記真的很重要,有的代碼出現問題了,看自己以前加的注釋不一定能想起來自己以前的邏輯,但是看看筆記立馬能想起來之前的思維和邏輯
個人未認證企業資質的用戶,是不可以定制短信模板的,只能簡單的使用一下短信驗證碼功能,(阿里為了防止詐騙短信的發送所以這方面要求還是比較嚴格的)
所以這個筆記我簡單的做了企業定制demo的簡介以及使用的記錄
企業版定制短信demo
1.首先如果需要發送短信的話
現在阿里云審核非常嚴格基本不會通過個人認證的賬號進行的簽名,
例如

可以看到我所有的個人申請短信簽名的記錄全都審核未通過,
申請簽名模板的時候需要提交企業提供的相關憑證,以及營業執照等,現在阿里對個人簽名基本是不支持了,需要個人寫demo測驗的同學可以看看騰訊云和華為云的短信功能,這兩個相對個人審核還沒那么嚴格,
2.審核通過之后
拿著必備的幾個引數
AccessKey ID:秘鑰ID
AccessKey Secret:秘鑰密碼
短信簽名:sing Name
模板代碼:template Code
模板引數:template Param
電話號碼:phone Numbers
我簡單的介紹一下這幾個引數的作用
簽名
就是短信的抬頭,例如你每次收到短信的時候看見的xxxx銀行,xxxx平臺,可以簡單的理解為短信的發送方簡稱
模板代碼
你申請的簽名通過之后,這個簽名下面就可以申請模板,就是短信的格式,例如:你的短信驗證碼為xxxx,有效期為2分鐘,請勿告訴他人,這個就是模板,你每次申請的模板格式都會生成唯一的模板代碼,要發送不同的格式的短信只需要改變模板代碼即可
模板引數
在模板代碼里面傳入的引數,就是模板引數,例如:短信驗證碼xxxx,這個就是引數,阿里云傳入的引數需要嚴格按照json結構
電話號碼
就是簡單地理解收短信的人的手機號,這個引數欄位可以是多個手機號拼接的,例如189xxxxxxxx或者189xxxxxxxx,155xxxxxxxx 注意多個手機號的時候需要使用逗號隔開
3.引入SDK依賴
從官方復制阿里云短信sdk的依賴到pom檔案中
注意版本別輸錯了,不同版本對應不同的依賴
pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
*/
4.使用sdk模板制作代碼

如圖所示,在提示的地方填入回應的資料,右邊的代碼區會生成一個main方法,還可以點擊藍色按鈕來除錯這個sdk
除錯沒問題的話就可以把代碼復制下來了
public class SendSms {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<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("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "189xxxxxxxx");
request.putQueryParameter("SignName", "xx科技有限公司");
request.putQueryParameter("TemplateCode", "SMS_xxxxxxxx");
request.putQueryParameter("TemplateParam", "8848");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
根據自己需要的的功能,可以把這個短信功能寫成一個Service服務,然后固定引數寫死,或者配置到properties組態檔中去,然后每次呼叫只需要傳入
電話號碼、驗證碼 兩個引數即可,
然后根據企業需要,把阿里介面對應的回傳碼回傳給呼叫方,正常情況下介面回傳的額Message和Code都是“OK”代表成功
如果引數不正確無法決議,Message都會給出相應的提示,只需要把上述的代碼中的response轉換成Json物件并把Message拿出來與字串“OK”做對比即可知道短信是否發送成功了,然后在對短信的發送成功和失敗各自做邏輯判斷,不管是打日志啊,還是重發請求啊都可以的,
public ResponseBase send(String phoneNumbers, String deviceCode, String signName, String templateCode) {
ResponseBase responseBase = new ResponseBase();
//阿里云短信模板引數必須封裝為json格式的字串,否則無法決議
JSONObject jb = new JSONObject();
jb.put("deviceCode",deviceCode);
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", appKey , appSecret);
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("RegionId", "cn-shanghai");
request.putQueryParameter("PhoneNumbers",phoneNumbers);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParam", jb.toJSONString());
JSONObject data = new JSONObject();
try {
CommonResponse response = client.getCommonResponse(request);
data = JSON.parseObject(response.getData());
System.out.println(response.getData());
} catch (Exception e) {
LOGGER.info("阿里云短信發送例外",e);
}
//添加日志檔案列印阿里云短信介面回傳值
LOGGER.info("阿里云短信日志",data.toJSONString());
if (data.getString("Message").equals("OK")){
//此處添加短信發送正確的處理邏輯
}
//此處添加短信發送錯誤的處理邏輯
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266335.html
標籤:其他
上一篇:OS的系統需求---需求分析
