手機短信驗證現在在各種系統可以說都是用的非常普遍的,這個可能是友善和安全性的考慮,是以才廣泛的使用簡單實用一下短信接口。
Demo下載下傳
連結: 百度網盤 請輸入提取碼
提取碼: i1r8
實用短信接口公司的接口
以“秒滴”營銷短信群發平台_智能5G短信_短信語音驗證碼_106短信接口-秒嘀科技接口公司為例
1新增賬號
2擷取一下兩個資訊

3建立短信模闆
建立為稽核通過後模闆為:
【柴火科技】您的驗證碼為{1},請于2分鐘内正确輸入,如非本人操作,請忽略此短信。
等價于:
【柴火科技】您的驗證碼為" + randNum + ",請于2分鐘内正确輸入,如非本人操作,請忽略此短信。
建立項目Maven(非web項目)項目
pom.xml
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
工具類
package com.imooc.util;
import java.util.Random;
public class RandNum {
/**
* @生成一個6位的随機碼
*/
public static String createRandNum() {
Random random = new Random();
StringBuffer sb = new StringBuffer();
for(int i = 0; i <= 5; i++) {
String s = random.nextInt(10) + "";
sb.append(s);
}
return sb.toString();
}
}
工具類
注意:
(1)public static final String AUTH_TOKEN = 圖一上面的資訊;
(2)public static final String ACCOUNT_SID = 圖一上面的資訊;
package com.imooc.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import org.apache.commons.codec.digest.DigestUtils;
public class SendTelMsgUtils {
//http://www.miaodiyun.com/
/**
* ACCOUNT_SID:開發者主賬号ID(注冊後自動生成)
*/
public static final String ACCOUNT_SID = "填寫ACCOUNT SID";
/**
* AUTH_TOKEN:開發者賬号認證密匙(注冊後自動生成)
*/
public static final String AUTH_TOKEN = "填寫AUTH TOKEN";
/**
* BASE_URL:請求位址
*/
public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
/**
* RESP_DATA_TYPE:資料傳回格式為JSON格式
*/
public static final String RESP_DATA_TYPE = "json";
/**
*
* @Title:sendMsgTo
* @Description:發送短信驗證碼 @param:
* @return:String
*/
public static String sendMsgTo(String to, String createRandNum) {
/**
* randNum:生成的驗證碼随機數
*/
String randNum = createRandNum;
/**
* smsContent:短信内容(短信簽名+短信内容,注意要和配置的模闆一緻,否則報錯)
*/
String smsContent = "【柴火科技】您的驗證碼為" + randNum + ",請于2分鐘内正确輸入,如非本人操作,請忽略此短信。";
/**
* 擷取時間戳
*/
String timestamp = getTimestamp();
/**
* 擷取簽名
*/
String sig = sig_MD5(ACCOUNT_SID + AUTH_TOKEN + timestamp);
/**
* 要送出的post資料
*/
String http_post = "accountSid=" + ACCOUNT_SID + "&smsContent=" + smsContent + "&to=" + to + "×tamp="
+ timestamp + "&sig=" + sig + "&respDataType=" + RESP_DATA_TYPE;
OutputStreamWriter osw = null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
/**
* 擷取連接配接
*/
URL url = new URL(BASE_URL);
/**
* 打開連接配接
*/
URLConnection conn = url.openConnection();
/**
* 設定連接配接參數
*/
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(20000);
/**
* 送出資料
*/
osw = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
osw.write(http_post);
osw.flush();
/**
* 讀取傳回資料
*/
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 擷取時間戳
*/
public static String getTimestamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String date = sdf.format(new Date());
return date;
}
/**
* 對"ACCOUNT_SID + AUTH_TOKEN + timestamp"進行MD5加密
*
* <dependency>
* <groupId>commons-codec</groupId>
* <artifactId>commons-codec</artifactId>
* <version>1.10</version> </dependency>
* </dependencies>
*/
public static String sig_MD5(String str) {
String sig_md5 = DigestUtils.md5Hex(str);
return sig_md5;
}
}
測試方法
package com.imooc.test;
import com.imooc.util.RandNum;
import com.imooc.util.SendTelMsgUtils;
public class Main {
public static void main(String[] args) {
// controller中随機建立一個randNum
String randNum = RandNum.createRandNum();
System.out.println("驗證碼是:" + randNum);
// randNum發送給手機号
String result = SendTelMsgUtils.sendMsgTo("17863961702", randNum);
System.out.println(result);
}
}