阿里雲簡訊介面開發實踐(Java)
隨著網際網路的興起,各行各業的需求都在不斷的增加。隨著業務的擴大,企業給使用者傳送簡訊驗證碼的業務,也是如火如荼。在這裡,calvin給各位開發者推薦阿里雲簡訊平臺。原因有二:1.接入較簡單,開發成本低 2.非常穩定,簡訊可達率99%。
OK,那麼接下來我們就可以開發阿里簡訊介面吧。主要包括兩個步驟,第一個是前期準備,包括註冊阿里雲賬號,獲得access_key和access_secret,並且申請簡訊簽名和簡訊模板。第二個步驟則是引入阿里簡訊服務的SDK,並正式開發。
一、前期準備
1.註冊阿里雲賬號
進入網址 https://www.aliyun.com/ 點選免費註冊,輸入相關資訊,則成為阿里雲使用者。
2.獲取Access_key和Access_secret
3.簽名管理與模板管理
首先點選產品與服務,選擇簡訊服務。
我們需要關心的是應用開發這塊。
分別申請簽名管理和模板管理。
二、開發步驟
前面的準備工作都做完並且都申請通過後,我們可以正式進入我們的開發工作。
可以先在IDEA中新建一個Maven工程。通過依賴阿里簡訊服務的SDK或者在pom檔案中新增相關依賴。
SDK及Demo下載地址為:
https://help.aliyun.com/document_detail/55359.htmlspm=a2c4g.11186623.2.8.YwsgNT
這裡建議使用在pom檔案中新增相關依賴,這樣比較方便。
<dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> </dependency> </dependencies>
瞭解一下入參與出參
出參列表
根據官方給出的demo,我們新建類AliDayunSms,在主方法中寫入傳送簡訊驗證碼的邏輯。程式碼如下:
package com.ec.sms;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
/**
* @Title AliDayunSms
* @Description 阿里大魚簡訊介面開發
* @author calvin
* @date: 2018/8/9 下午1:28
*/
public class AliDayunSms {
public static void main(String[] args) throws ClientException {
//設定超時時間-可自行調整
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 = "your accessKeyId";//你的accessKeyId
final String accessKeySecret = "your accessKeySecret";//你的accessKeySecret
//初始化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);
//必填:待發送手機號。支援以逗號分隔的形式進行批量呼叫,批量上限為1000個手機號碼,批量呼叫相對於單條呼叫及時性稍有延遲,驗證碼型別的簡訊推薦使用單條呼叫的方式;傳送國際/港澳臺訊息時,接收號碼格式為00+國際區號+號碼,如“0085200000000”
request.setPhoneNumbers("your phoneNumber");
//必填:簡訊簽名-可在簡訊控制檯中找到
request.setSignName("your signName");
//必填:簡訊模板-可在簡訊控制檯中找到,傳送國際/港澳臺訊息時,請使用國際/港澳臺簡訊模版
request.setTemplateCode("your templateCode");
//可選:模板中的變數替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
//友情提示:如果JSON中需要帶換行符,請參照標準的JSON協議對換行符的要求,比如簡訊內容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導致JSON在服務端解析失敗
//request.setTemplateParam("{\"code\":\"988756\"}");
String msgCode = getMsgCode();
request.setTemplateParam("{\"code\":\"" + msgCode + "\"}");
//請求失敗這裡會拋ClientException異常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//請求成功
System.out.println("=====success====");
} else {
System.out.println("=====fail=======");
}
}
/**
* 生成隨機的6位數,簡訊驗證碼
* @return
*/
private static String getMsgCode() {
int n = 6;
StringBuilder code = new StringBuilder();
Random ran = new Random();
for (int i = 0; i < n; i++) {
code.append(Integer.valueOf(ran.nextInt(10)).toString());
}
return code.toString();
}
}
將程式碼中的your accessKeyId和your accessKeySecret替換成你剛才申請或者已有的access_key和access_secret;your phoneNumber替換成你想要接收簡訊的那個手機號碼;your signName替換之前申請到的簽名名稱;your templateCode也替換成控制檯上面顯示的那個code。程式碼中,簡訊驗證碼code為變數,裡面的值可以自己定義規則生成並替換,可以是隨機生成的的6位或者其他位的數字或者字母。