1. 進入秒嘀科技(http://www.miaodiyun.com/),注冊一個賬號
2. 注冊好之后,點擊 用戶中心 -> 賬戶管理,就會進入如下界面 (順便提一下,新注冊的用戶,平台會免費贈送你10元,足夠大家學習和使用了,所以不用擔心需要充錢) 你需要做的就是獲取你自己的 ACCOUNT SID 和 AUTH TOKEN

3. 點擊 用戶中心 -> 認證,進行企業認證,企業的資質證件就是企業的營業執照,網上百度一張帶有紅色的公章就行,公司電話填寫自己的就行,最后點擊提交

4. 需要在秒嘀上新建一個發送手機驗證碼的模板,點擊 配置管理 -> 驗證碼短信模板,就會進入如下界面

5. 點擊“新建模板”按鈕, 填寫好模板名稱、短信簽名 和 短信內容(短信內容可以選擇 驗證碼通知短信模板 或者 自己編寫短信內容),點擊“提交審核”按鈕即可,界面如下

6. 然后等待 短信驗證碼模板 審核通過即可,點擊 配置管理 -> 驗證碼短信模板,查看 短信驗證碼 是否審核通過

7. 接下來就是代碼了,把我圈住的地方改成自己的就行,其他的不用動,tamp值 一定要與自己創建短信模板的短信內容保持一致

8. java短信發送驗證碼
導入阿里巴巴fastjson.jar包:
方式一:下載fastjson.jar包導入工程就行 鏈接:https://pan.baidu.com/s/1RH4-x82G8-sNmn7y5YhdjA
方式二:maven工程直接把 下面這段代碼復制到 pom.xml 中就行
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
package com.group.util; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; import com.alibaba.fastjson.JSONObject; /** * * @Title:GetMessageCode * @Description:發送驗證碼 * @author:ヅ零碎de記憶ぷ * @Date 2018年7月4日 下午9:27:04 */ 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 = "【聯途旅游】尊敬的用戶,您好,您的驗證碼為:" + rod + ",若非本人操作,請忽略此短信。"; 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"); 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 = JSONObject.parseObject(result.toString()); String respCode = json.getString("respCode"); String defaultRespCode = "00000"; if (defaultRespCode.equals(respCode)) { return rod; } else { return defaultRespCode; } } // 定義一個請求參數拼接方法 public static String getQueryArgs(String accountSid, String smsContent, String to, String timestamp, String sig, String respDataType) { return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "&"+"timestamp=" + 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; } }
9. 測試發送手機短信驗證碼 源碼如下 (手機號碼換成你想要發送到指定手機的手機號碼即可)
package com.message.test; public class Test { public static void main(String[] args) { String phone = "12345678910"; GetMessageCode.getCode(phone); } }
10. 常見的問題
(1)返回錯誤碼 00104 “相同的應用當天給同一手機號發送短信的條數小於等於n” 如何處理?
答:此錯誤是同一手機號短信發送請求頻率限制,請求失敗也算次;
驗證碼短信下發次數限制為:1分鍾2次、1小時4次、24小時內10次;
通知類短信下發次數限制為:24小時內20次;
營銷類短信下發次數限制為:24小時內20次。
驗證碼短信24小時下發10次,不能修改
通知類短信有需要可調整下發次數
該類配置的修改需要在后台中修改設置,客戶端不能設置
如果在測試時候遇到請求限制,可聯系客服添加白名單
驗證碼短信下發次數限制為:1分鍾2次、1小時4次、24小時內10次;
通知類短信下發次數限制為:24小時內20次;
營銷類短信下發次數限制為:24小時內20次。
驗證碼短信24小時下發10次,不能修改
通知類短信有需要可調整下發次數
該類配置的修改需要在后台中修改設置,客戶端不能設置
如果在測試時候遇到請求限制,可聯系客服添加白名單
(2)返回錯誤碼 00134 "沒有和內容匹配的模板” 如何處理?
答:請檢查是否在官網建立模板,smscontent=【短信簽名】+內容,發送內容要與模板匹配。
(3)返回錯誤碼 0005 "timestamp已過期” 如何處理?
答:把獲取時間戳 getTimestamp()方法中的 return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());換成return System.currentTimeMillis()+""; 即可