更新時間:2022-10-26 10:49:39 來源:動力節點 瀏覽1300次
由于我們使用第三方平臺進行驗證碼的發送,所以首先,我們要在一個平臺進行注冊。
注冊完成后,我們需要獲取自己對應的ACCOUNT SID 和 AUTH TOKEN;
點擊用戶中心,認證,來進行企業認證。
之后在配置管理中新建一個模板,然后提交審核就好,(只要符合要求,基本都能過),可以返回查看是否通過。
準備工作完成,便可以開始代碼的測試了。新建項目,引入需要的jar包:fastjson.jar,版本是1.2.47版本。將jar包放入lib文件夾下,就可以開始我們的代碼了。
src目錄下新建文件夾,存放我們寫的代碼
新建GetMessageCode.class,代碼如下
package test;
//各種引入的包
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;
public class GetMessageCode {
/**
* 發送驗證碼
*/
private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";//固定的,它api中固定的端口,照著寫就行。
private static final String ACCOUNT_SID = "自己獲取到的ACCOUNT_SID ";
private static final String AUTH_TOKEN = "自己獲取到的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+",xxxxxxxxx";//必須與模板一致,否則會報錯
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.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){
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) {
// TODO Auto-generated method stub
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;
}
}
現在代碼就算寫完了,我們需要在同包下新建測試類進行測試。
package test;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String phone = "測試的手機號";
GetMessageCode.getCode(phone);
}
}
以上便是java實現發送短信驗證碼的代碼,如果想查看或使用驗證碼的話,只需在調用方法的時候把smsCode當做返回結果返回就好。
可能發生的錯誤原因:
沒連接網絡
企業認證未通過
配置文件配錯了
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習