使用JAVA+秒嘀傳送手機驗證碼
阿新 • • 發佈:2018-11-30
隨著阿里雲簡訊服務的改版,使用阿里雲簡訊服務的過程明顯比過去要麻煩的多。相信很多人或多或少大概都被困擾過,所以,選用另外的企業所推出的簡訊傳送或許會是個更好的選擇,所以,對於很多小白來說,秒嘀 http://www.miaodiyun.com/auth/login 無疑是一個不錯的選擇。
首先點選上面的官方連結,註冊賬號然後登陸
新使用者會送你10塊錢的金額,差不多200條簡訊,然後點選配置管理
進入配置管理後,點選新建模版
根據提示填寫,模板可以自己定義,當然也可以使用下面的模板,最後點選提交稽核等待稽核通過即可
接下來就是程式碼:
首先pom.xml
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency>
Util:
先獲取所需的SID和TOKEN填入工具類對應的地方
將申請模版時填寫的簡訊簽名填入 中括號,後面的內容就是你們所選擇的模板的內容,這個一定要對應起來,不然會報錯
String tamp = "【模版時填寫的簡訊簽名】您的驗證碼為:" + rod + ",請於"+1+"分鐘內正確輸入,如非本人操作,請忽略此簡訊。";
package com.athome.jd.util; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; import org.json.JSONObject; public class GetMessageCode { private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS"; private static final String ACCOUNT_SID = ""; private static final String AUTH_TOKEN = ""; // 根據相應的手機號傳送驗證碼 public static String getCode(String phone) { String rod = smsCode(); String timestamp = getTimestamp(); String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp); String tamp = "【xxxx】您的驗證碼為:" + rod + ",請於"+1+"分鐘內正確輸入,如非本人操作,請忽略此簡訊。"; OutputStreamWriter out = null; BufferedReader br = null; StringBuilder result = new StringBuilder(); try { URL url = new URL(QUERY_PATH); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoInput(true);// 設定是否允許資料寫入 connection.setDoOutput(true);// 設定是否允許引數資料輸出 connection.setConnectTimeout(5000);// 設定連結響應時間 connection.setReadTimeout(10000);// 設定引數讀取時間 connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); // 提交請求 out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); String args = getQueryArgs(ACCOUNT_SID, tamp, phone, timestamp, sig, "JSON"); System.out.println(args); out.write(args); out.flush(); // 讀取返回引數 br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String temp = ""; while ((temp = br.readLine()) != null) { result.append(temp); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } JSONObject json = new JSONObject(result.toString()); String respCode = json.getString("respCode"); String defaultRespCode = "00000"; if (defaultRespCode.equals(respCode)) { return rod; } else { return defaultRespCode; } } //測試功能 public static void main(String[] args) { String result = getCode(""); } // 定義一個請求引數拼接方法 public static String getQueryArgs(String accountSid, String smsContent, String to, String timestamp, String sig, String respDataType) { return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + respDataType; } // 獲取時間戳 public static String getTimestamp() { return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); } // sing簽名 public static String getMD5(String sid, String token, String timestamp) { StringBuilder result = new StringBuilder(); String source = sid + token + timestamp; // 獲取某個類的例項 try { MessageDigest digest = MessageDigest.getInstance("MD5"); // 要進行加密的東西 byte[] bytes = digest.digest(source.getBytes()); for (byte b : bytes) { String hex = Integer.toHexString(b & 0xff); if (hex.length() == 1) { result.append("0" + hex); } else { result.append(hex); } } } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result.toString(); } // 建立驗證碼 public static String smsCode() { String random = (int) ((Math.random() * 9 + 1) * 100000) + ""; return random; } }
這樣也就OK了,直接呼叫方法傳入正確的手機號即可