前言
短信驗證碼是通過發送驗證碼到手機的一種有效的驗證碼系統。主要用于驗證用戶手機的合法性及敏感操作的身份驗證。
現在市面上的短信服務平臺有很多。大家在選擇的時候未免會有些不好抉擇。本人建議選擇短信服務商應遵循以下幾點:
- 服務商知名度高,業務流量大。(這樣的平臺可信度高)
- 服務穩定,不能經常宕機。(保證自身業務的流暢運行)
- 文檔全面詳細。(沒文檔怎么玩?)
最近的一個項目中,注冊和修改密碼時需要用到短信驗證碼校驗手機號的功能。本人也是對比幾家后,直接選擇阿里云通信的短信服務。(本身項目服務器也是部署在阿里云上,但之前并不知道阿里云有短信服務,早知道阿里有的話就不會浪費時間找其他平臺了)。廢話不多說,下面直接開始短信驗證服務教程。
準備
1.登錄阿里云,開通阿里云通信短信服務。
2.申請accesskey
選擇右上角accesskeys,創建一個access key
3.進入控制臺,申請短信簽名。這個作用就是用于短信前面“【】”里面的名稱。輸入時不需要帶“【】”
注意申請規范,要不然審核不會過。符合規范的話一般一個小時左右就能通過了。
我這里的簽名是“喝酒不騎馬”
4.申請短信模版
模板類型選擇驗證碼。注意,選擇驗證碼后,模板替代變量只支持驗證碼作為變量,且變量替換值<=6位數字或字母。
我的模板如下圖
1.下載sdk包
下載后,我們需要使用
aliyun-java-sdk-core-3.2.2.jar
aliyun-java-sdk-dysmsapi-1.0.0-sanpshot.jar
aliyun-sdk-mns-1.1.8.jar
這三個包
springboot + maven下的jar包配置
1.在工程的resources目錄下新建一個lib文件夾,將jar包復制進去。
2.由于maven庫中沒有上述幾個jar包的依賴,所以需要將本地lib目錄下的jar包導入到maven中。并在pom.xml文件中填下如下依賴。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<dependency> <groupid>aliyun-message-sdk-core</groupid> <artifactid>aliyun-message-sdk-core</artifactid> <version> 3.2 . 3 </version> <scope>system</scope> <systempath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-core- 3.2 . 2 .jar</systempath> </dependency> <dependency> <groupid>aliyun-message-sdk-mns</groupid> <artifactid>aliyun-message-sdk-mns</artifactid> <version> 1.1 . 8 </version> <scope>system</scope> <systempath>${project.basedir}/src/main/resources/lib/aliyun-sdk-mns- 1.1 . 8 .jar</systempath> </dependency> <dependency> <groupid>aliyun-java-sdk-dysmsapi</groupid> <artifactid>aliyun-java-sdk-dysmsapi</artifactid> <version> 1.0 . 0 </version> <scope>system</scope> <systempath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-dysmsapi- 1.0 . 0 -sanpshot.jar</systempath> </dependency> |
注意, <groupid>、<artifactid>、<version>
隨意填寫。<scope>system</scope>
必須要加,這表示導入本地的jar包。
${project.basedir}
為項目的根路徑。
建立aliyunmessageutil工具類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class aliyunmessageutil { private static final string product = "dysmsapi" ; //產品域名,開發者無需替換 private static final string domain = "dysmsapi.aliyuncs.com" ; // 此處需要替換成開發者自己的ak(在阿里云訪問控制臺尋找) private static final string accesskeyid = "這里替換你的accesskeyid" ; private static final string accesskeysecret = "這里替換你的accesskeysecret" ; public static sendsmsresponse sendsms(map<string, string> parammap) throws com.aliyuncs.exceptions.clientexception { //可自助調整超時時間 system.setproperty( "sun.net.client.defaultconnecttimeout" , "10000" ); system.setproperty( "sun.net.client.defaultreadtimeout" , "10000" ); //初始化acsclient,暫不支持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(); //必填:待發送手機號 request.setphonenumbers(parammap.get( "phonenumber" )); //必填:短信簽名-可在短信控制臺中找到 request.setsignname(parammap.get( "msgsign" )); //必填:短信模板-可在短信控制臺中找到 request.settemplatecode(parammap.get( "templatecode" )); //可選:模板中的變量替換json串,如模板內容為"親愛的${name},您的驗證碼為$[code]"時,此處的值為 request.settemplateparam(parammap.get( "jsoncontent" )); //選填-上行短信擴展碼(無特殊需求用戶請忽略此字段) // request.setsmsupextendcode(parammap.get("extendcode")); //可選:outid為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者 // request.setoutid(parammap.get("outid")); //hint 此處可能會拋出異常,注意catch sendsmsresponse sendsmsresponse = acsclient.getacsresponse(request); return sendsmsresponse; } } |
sendsms(map<string, string> parammap)
方法是我封裝的方法。傳入的參數是parammap,其中包含以下屬性:
phonenumber:接受者手機號
msgsign:短信簽名名稱。在控制臺的短信簽名里能找到。
templatecode:短信模版的code。見控制臺中的模版code。
jsoncontent:需要替換的變量的json字符串。對于驗證碼來說,string jsoncontent = "{\"number\":\"" + randomnum + "\"}";即可。其中randomnum是隨機生成的6位驗證碼。
extendcode:上行短信模板的驗證碼,不需要的話可以忽略
outid:擴展字段,不需要則可以忽略
調用demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public string sendmsg() throws lgdserviceexception, clientexception { string phonenumber = "18888888888" ; string randomnum = createrandomnum( 6 ); string jsoncontent = "{\"number\":\"" + randomnum + "\"}" ; map<string, string> parammap = new hashmap<>(); parammap.put( "phonenumber" , phonenumber); parammap.put( "msgsign" , "喝酒不騎馬" ); parammap.put( "templatecode" , "xxxxxxxx" ); parammap.put( "jsoncontent" , jsoncontent); sendsmsresponse sendsmsresponse = aliyunmessageutil.sendsms(parammap); if (!(sendsmsresponse.getcode() != null && sendsmsresponse.getcode().equals( "ok" ))) { if (sendsmsresponse.getcode() == null ) { //這里可以拋出自定義異常 } if (!sendsmsresponse.getcode().equals( "ok" )) { //這里可以拋出自定義異常 } } } /** * 生成隨機數 * @param num 位數 * @return */ public static string createrandomnum( int num){ string randomnumstr = "" ; for ( int i = 0 ; i < num;i ++){ int randomnum = ( int )(math.random() * 10 ); randomnumstr += randomnum; } return randomnumstr; } |
總結
短信效果如圖所示
對于驗證碼的校驗,可參見我的另一篇博文springboot實現短信驗證碼校驗.
以上所述是小編給大家介紹的springboot實現阿里云通信短信服務有關短信驗證碼的發送功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/Colton_Null/article/details/77283193