阿里雲驗證碼與通知簡訊
阿新 • • 發佈:2018-12-11
1、入住阿里雲
首先,註冊阿里雲賬號或者快捷登陸
其次,實名認證
根據情況選擇是企業還是個人使用者(以個人使用者為例)
然後選擇個人支付寶授權認證
最後,根據實際情況填寫個人資訊
2、開通簡訊服務
首先,登陸
其次,繫結電子郵箱
繫結成功後,選擇開通簡訊服務
開通成功後,可以看到阿里雲免費贈送了100條簡訊
如果簡訊不夠用,可以購買,不具體敘述。
3、獲取AccessKey
首先,將滑鼠放到使用者頭像上
點選accesskeys,出現下面的介面:
點選開始使用子使用者Accesskey,進入下面的介面:
點選開通後跳轉下面的介面:
再點選下面的accesskeys:
出現下面介面:
選擇繼續使用Accesskey,點選建立AccessKey,如下圖:
成功後,如圖:
4、建立簽名和模版
(1)建立簽名
首先,簡訊服務->國內訊息,如圖:
點選添加簽名,根據實際情況填寫申請資訊(例如:簽名用途,選擇第二個)
(2)新增模板
模板型別可以選擇驗證碼也可以選擇簡訊通知,由於需要測試驗證碼簡訊和通知簡訊,所以可以新增兩個模板
新增稽核成功後,如圖:
5、程式設計(Java)
public class SmsUtil { //產品名稱:雲通訊簡訊API產品,開發者無需替換 static final String product="Dysmsapi"; //產品域名,開發者無需替換 static final String domain = "dysmsapi.aliyuncs.com"; // 此處需要替換成開發者自己的AccessKey(在阿里雲訪問控制檯尋找) static final String accessKeyId = "yourAccessKeyId"; static final String accessKeySecret = "yourAccessKeySecret"; /** * 傳送驗證碼簡訊 * 模板為驗證碼型別 * * @phoneNumber */ public static boolean sendSms(String phoneNumber,String code) throws 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(phoneNumber); //必填:簡訊簽名-可在簡訊控制檯中找到舉個例子 request.setSignName(""); //必填:簡訊模板id-可在簡訊控制檯中找到,是id不是名字,舉個例子 request.setTemplateCode(""); //可選:模板中的變數替換JSON串,如模板內容 \為"親愛的${name},您的驗證碼為${code}"時,此處的值為--必填,與模板相對應 //request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}"); request.setTemplateParam("{\"code\":\""+code+"\"}"); //選填-上行簡訊擴充套件碼(無特殊需求使用者請忽略此欄位) //request.setSmsUpExtendCode("90997"); //可選:outId為提供給業務方擴充套件欄位,最終在簡訊回執訊息中將此值帶回給呼叫者 //request.setOutId("yourOutId"); //hint 此處可能會丟擲異常,注意catch SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request); //System.out.println(sendSmsResponse.getCode()); if (sendSmsResponse.getCode().equals("OK")) { return true; } return false; } /** * 傳送通知類簡訊 * 模板為通知型別 * */ public static boolean sendSmg(String phoneNumber,String name) throws 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(phoneNumber); //必填:簡訊簽名-可在簡訊控制檯中找到舉個例子 request.setSignName(""); //必填:簡訊模板id-可在簡訊控制檯中找到,是id不是名字,舉個例子 request.setTemplateCode(""); //可選:模板中的變數替換JSON串,如模板內容 \為"親愛的${name},您的驗證碼為${code}"時,此處的值為--必填,與模板相對應 request.setTemplateParam("{\"name\":\""+name+"\"}"); //request.setTemplateParam("{\"code\":\""+getRandomSMSCode(6,true)+"\"}"); //選填-上行簡訊擴充套件碼(無特殊需求使用者請忽略此欄位) //request.setSmsUpExtendCode("90997"); //可選:outId為提供給業務方擴充套件欄位,最終在簡訊回執訊息中將此值帶回給呼叫者 //request.setOutId("yourOutId"); //hint 此處可能會丟擲異常,注意catch SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request); //System.out.println(sendSmsResponse.getCode()); if (sendSmsResponse.getCode().equals("OK")) { return true; } return false; } /** * 隨機生成驗證碼 * 引數numberCode控制驗證碼型別,true為純數字,false為數字和字母的混合 * */ public static final String getRandomSMSCode(int length, boolean numberCode) { String randomSMSCode=""; String codeTable = numberCode ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz"; boolean flag = true; do { int count = 0; for (int i = 0; i < length; i++) { double dblR = Math.random() * codeTable.length(); int intR = (int) Math.floor(dblR); char c = codeTable.charAt(intR); if (('0' <= c) && (c <= '9')) { count++; } randomSMSCode += codeTable.charAt(intR); } if (count >= 2) { flag = false; } } while (flag); return randomSMSCode; } }
6、傳送簡訊
public class Test { public static void main(String[] args) throws ClientException { sendSms("138****0204"); sendSmg("182****9810","張三"); } @SuppressWarnings("resource") public static void sendSms(String phoneNumber) throws ClientException { String randomSMSCode = SmsUtil.getRandomSMSCode(5,true); if (SmsUtil.sendSms(phoneNumber,randomSMSCode)) { System.out.println("簡訊傳送成功"); Scanner scanner= new Scanner(System.in); System.out.println("請輸入您收到的驗證碼:"); String code=scanner.next(); if (randomSMSCode.equals(code)) { System.out.println("驗證成功"); } }else { System.out.println("失敗"); } } public static void sendSmg(String phoneNumber,String name) throws ClientException { if (SmsUtil.sendSmg(phoneNumber, name)) { System.out.println("通知簡訊已經發送"); }else { System.out.println("傳送失敗"); } } }