一,前言
短信驗證碼想必大家都不陌生,在很多網站,APP中都有使用到。比如登錄,注冊,身份校驗等場景。不過通常情況下,短信服務都是外包給第三方公司的,接下來向大家分享如何使用阿里的短信服務。
二,雲通信
阿里雲官網:https://www.aliyun.com/
忘記說了,沒有賬號的可以直接使用阿里旗下的任何一款賬號進行登錄,支付寶,淘寶,釘釘等都可以,或者也可以單獨進行注冊,這里就不再講述如何注冊了。
登錄成功以后,首頁如下,在上方搜索框中搜索短信服務:
1,點擊短信服務控制台,如圖:
2,點擊快速學習。
顯示對號表示已經學習完成,如果是初次使用,可依此點擊上面的5個選項,按照提示完成操作即可。
補充一點,使用阿里短信服務在賬戶中是必須要有余額,也就是先充值再消費。如圖點擊充值即可:
3,以上步驟完成以后,在左側目錄點擊國內消息。首先進行簽名管理,然后添加模板管理。
切記,簽名管理通過后產生的AK一定要保存好,后期調用接口會用到。
到這里為止,前期都是基本的准備工作,可能有些細節問題沒有描述到,但是按照官網的指示也基本差不多。然后再去看官網提供的API接口文檔說明。
三,API學習
3.1,基本參數介紹
阿里短信API提供多種編程語言的DEMO,可以根據自己的需要進行選擇。
其實阿里短信服務的API介紹的非常詳細,從上圖中可以看出,除了可以單獨給用戶發送短信,還支持批量發送,以及短信詳情查詢。首先我們可以先了解如何單獨給用戶發送驗證碼,請看下圖的基本參數:
以上3個參數是調用API必須要填寫的,第一個參數為手機號,第二個參數為簽名。簽名就是之前說過的,申請簽名通過后的簽名名稱。而最后一個是模板代碼,同樣在上面介紹過模板申請通過后,會產生一個模板CODE。
3.2,引入SDK
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
3.3,示例代碼(官網提供)
//設置超時時間-可自行調整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化ascClient需要的幾個參數
final String product = "Dysmsapi";//短信API產品名稱(短信產品名固定,無需修改)
final String domain = "dysmsapi.aliyuncs.com";//短信API產品域名(接口地址固定,無需修改)
//替換成你的AK
//final String accessKeyId = "yourAccessKeyId";//你的accessKeyId,參考本文檔步驟2
// final String accessKeySecret = "yourAccessKeySecret";//你的accessKeySecret,參考本文檔步驟2
//初始化ascClient,暫時不支持多region(請勿修改)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//組裝請求對象
SendSmsRequest request = new SendSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//1,必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限為1000個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式;發送國際/港澳台消息時,接收號碼格式為國際區號+號碼,如“85200000000”
request.setPhoneNumbers("");
//2,必填:短信簽名-可在短信控制台中找到
request.setSignName("");
//3,必填:短信模板-可在短信控制台中找到,發送國際/港澳台消息時,請使用國際/港澳台短信模版
request.setTemplateCode("");
//可選:模板中的變量替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
//友情提示:如果JSON中需要帶換行符,請參照標准的JSON協議對換行符的要求,比如短信內容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導致JSON在服務端解析失敗
request.setTemplateParam("");
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
// 判斷是否發送成功
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//請求成功
System.out.println("返回的狀態碼:" + sendSmsResponse.getCode());
System.out.println("返回的信息:" + sendSmsResponse.getMessage());
}
將以上的3個參數填成自己的,啟動工程便可以成功發送短信。
結果如圖所示:

四,總結
是不是調用很簡單,但是在真正的項目中還是要進一步優化,尤其在分布式項目中調用。比如將參數抽取到配置文件,及抽取成工具類等。
最后由於時間倉促只是簡短的記錄,有很多細節沒有為大家分享到,所以如果遇到什么問題可以在下方留言,看到后會第一時間回復。感謝閱讀!