您好,登錄后才能下訂單哦!
前言
短信驗證碼是通過發送驗證碼到手機的一種有效的驗證碼系統。主要用于驗證用戶手機的合法性及敏感操作的身份驗證。
現在市面上的短信服務平臺有很多。大家在選擇的時候未免會有些不好抉擇。本人建議選擇短信服務商應遵循以下幾點:
最近的一個項目中,注冊和修改密碼時需要用到短信驗證碼校驗手機號的功能。本人也是對比幾家后,直接選擇阿里云通信的短信服務。(本身項目服務器也是部署在阿里云上,但之前并不知道阿里云有短信服務,早知道阿里有的話就不會浪費時間找其他平臺了)。廢話不多說,下面直接開始短信驗證服務教程。
準備
1.登錄阿里云,開通阿里云通信短信服務。
2.申請accessKey
選擇右上角accessKeys,創建一個access key
3.進入控制臺,申請短信簽名。這個作用就是用于短信前面“【】”里面的名稱。輸入時不需要帶“【】”
注意申請規范,要不然審核不會過。符合規范的話一般一個小時左右就能通過了。
我這里的簽名是“喝酒不騎馬”
4.申請短信模版
模板類型選擇驗證碼。注意,選擇驗證碼后,模板替代變量只支持驗證碼作為變量,且變量替換值<=6位數字或字母。
我的模板如下圖
1.下載SDK包
https://help.aliyun.com/document_detail/55284.html
下載后,我們需要使用
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文件中填下如下依賴。
<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工具類
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
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實現阿里云通信短信服務有關短信驗證碼的發送功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。