黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java短信驗(yàn)證碼實(shí)現(xiàn)的方法

Java短信驗(yàn)證碼實(shí)現(xiàn)的方法

更新時(shí)間:2022-10-26 10:49:39 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1404次

由于我們使用第三方平臺(tái)進(jìn)行驗(yàn)證碼的發(fā)送,所以首先,我們要在一個(gè)平臺(tái)進(jìn)行注冊(cè)。

注冊(cè)完成后,我們需要獲取自己對(duì)應(yīng)的ACCOUNT SID 和 AUTH TOKEN;

點(diǎn)擊用戶中心,認(rèn)證,來進(jìn)行企業(yè)認(rèn)證。

之后在配置管理中新建一個(gè)模板,然后提交審核就好,(只要符合要求,基本都能過),可以返回查看是否通過。

準(zhǔn)備工作完成,便可以開始代碼的測(cè)試了。新建項(xiàng)目,引入需要的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 {
    /**
     * 發(fā)送驗(yàn)證碼
     */
    	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 ";    	
    	//根據(jù)相應(yīng)的手機(jī)號(hào)發(fā)送驗(yàn)證碼
    	public static String getCode(String phone){
    		//以下代碼是為了獲取其他方法返回的參數(shù)
    		String rod = smsCode();//獲取隨機(jī)驗(yàn)證碼
    		String timestamp = getTimestamp();//獲取時(shí)間戳
    		String sig = getMD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//獲取簽名
    		String tamp = "【xxxx】登錄驗(yàn)證碼:"+rod+",xxxxxxxxx";//必須與模板一致,否則會(huì)報(bào)錯(cuò)
    		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);//設(shè)置是否允許數(shù)據(jù)寫入
    		connection.setDoOutput(true);//設(shè)置是否允許參數(shù)數(shù)據(jù)輸出
    		connection.setConnectTimeout(5000);//設(shè)置鏈接響應(yīng)時(shí)間
    		connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
    		//提交請(qǐng)求
    		out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
    		String args = getQueryArgs(ACCOUNT_SID,tamp,phone,timestamp,sig,"JSON");
    		out.write(args);
    		out.flush();
    		//讀取返回參數(shù)
    		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;
    		}    		
    	}
    	// 定義一個(gè)請(qǐng)求參數(shù)拼接方法
    	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;
    	}
    	//獲取時(shí)間戳
    	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;
    			// 獲取某個(gè)類的實(shí)例
    			try {
    				MessageDigest digest = MessageDigest.getInstance("MD5");
    				// 要進(jìn)行加密的東西
    				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();
    		}    	 
    		// 創(chuàng)建驗(yàn)證碼
    		public static String smsCode() {
    			String random = (int) ((Math.random() * 9 + 1) * 100000) + "";
    			return random;
    		}	
    }

現(xiàn)在代碼就算寫完了,我們需要在同包下新建測(cè)試類進(jìn)行測(cè)試。

package test;
public class Test { 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String phone = "測(cè)試的手機(jī)號(hào)";
		GetMessageCode.getCode(phone);
	}
}

以上便是java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的代碼,如果想查看或使用驗(yàn)證碼的話,只需在調(diào)用方法的時(shí)候把smsCode當(dāng)做返回結(jié)果返回就好。

可能發(fā)生的錯(cuò)誤原因:

沒連接網(wǎng)絡(luò)

企業(yè)認(rèn)證未通過

配置文件配錯(cuò)了

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 香港午夜三级a三级高清观看 | 91人前露出精品国产 | 一级欧美 | 国内偷自视频区视频综合 | 久久综合九色综合97小说 | 欧洲在线 | 欧美一区二区三区免费看 | 精品视频免费播放 | 看全色黄大色黄大片女图片第一次 | 久久最新网址 | 777久久成人影院 | free性video另类 | 国产1区在线观看 | 日本黄色免费在线观看 | 中国一级特黄毛片 | 一边脱一边摸一边揉免费 | 亚洲黄色大片 | 美国十次狠狠色综合 | 一级毛片无遮挡免费全部 | 中文字幕美日韩在线高清 | 成人短视频网站 | 天天爽夜夜爽8888视频精品 | 欧美韩国xxx | 高清一区二区 | 色偷偷偷| 无遮挡动漫肉在线观看高清 | 天天色成人| 9久热这里只有精品视频在线观看 | 日日夜夜天天 | 亚洲精品视频专区 | 午夜宅男宅女的免费网站 | 国产羞羞的视频在线观看免费 | 国产精品免费大片 | 手机在线视频一区 | 欧美日韩在线成人 | 国产亚洲一区二区麻豆 | 狠狠狠干 | 天天碰天天摸天天操 | 亚洲成a人片 | 高清日韩 | 久久久青草青青国产亚洲免观 |