java实现手机短信验证全过程
點(diǎn)個(gè)贊,看一看,好習(xí)慣!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收錄,這是我花了 3 個(gè)月總結(jié)的一線大廠 Java 面試總結(jié),本人已拿大廠 offer。
另外,原創(chuàng)文章首發(fā)在我的個(gè)人博客:blog.ouyangsihai.cn,歡迎訪問(wèn)。
手機(jī)短信驗(yàn)證現(xiàn)在在各種系統(tǒng)可以說(shuō)都是用的非常普遍的,這個(gè)可能是方便和安全性的考慮,所以才廣泛的使用,這篇文章就以一個(gè)短信接口的實(shí)例,來(lái)講解一下怎么使用短信接口。
一、前期工作
首先,我們需要選定一家短信接口的公司,然后去注冊(cè)和獲取一系列的ID等,然后就可以正式的創(chuàng)建我們的短信業(yè)務(wù)了。下面以某個(gè)短信接口為例講解。
1.1、注冊(cè)
http://www.miaodiyun.com/index.html(對(duì)于用哪個(gè)平臺(tái)的看個(gè)人,這個(gè)只是實(shí)例)
1.2、獲取到ACCOUNT SID和AUTH TOKEN
1.3、創(chuàng)建短信模板
如上圖,點(diǎn)擊配置管理,然后進(jìn)入到短信模板,再點(diǎn)擊新建模板,創(chuàng)建好你的短信模板。
下面給出我的模板作為參考。
注意:上面創(chuàng)建的短信模板的信息,需要在代碼中用到,并且一定需要保持一致,否則,會(huì)出現(xiàn)異常。
例如,上面的短信模板的信息應(yīng)為:“【歐陽(yáng)科技】登錄驗(yàn)證碼:{1},如非本人操作,請(qǐng)忽略此短信。”,{1}為占位符,是你的短信驗(yàn)證碼。
好了,有了這些準(zhǔn)備之后,就可以開始發(fā)短信了。
二、具體代碼
config.java:
這個(gè)類主要是一些常亮參數(shù)的配置信息。
這里我們需要修改我們注冊(cè)時(shí)獲取到的ACCOUNT SID和AUTH TOKEN。
/*** 系統(tǒng)常量*/ public class Config {/*** url前半部分*/public static final String BASE_URL = "https://api.miaodiyun.com/20150822";/*** 開發(fā)者注冊(cè)后系統(tǒng)自動(dòng)生成的賬號(hào),可在官網(wǎng)登錄后查看*/public static final String ACCOUNT_SID = "aac6e373c7534007bf47648ba34ba2f1";/*** 開發(fā)者注冊(cè)后系統(tǒng)自動(dòng)生成的TOKEN,可在官網(wǎng)登錄后查看*/public static final String AUTH_TOKEN = "47605360a97a4f81bcd576e8e0645edf";/*** 響應(yīng)數(shù)據(jù)類型, JSON或XML*/public static final String RESP_DATA_TYPE = "json"; }HttpUtil.java(http請(qǐng)求工具):
import java.io.BufferedReader; import java.io.IOException; 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 org.apache.commons.codec.digest.DigestUtils;/*** http請(qǐng)求工具*/ public class HttpUtil {/*** 構(gòu)造通用參數(shù)timestamp、sig和respDataType* * @return*/public static String createCommonParam(){// 時(shí)間戳SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String timestamp = sdf.format(new Date());// 簽名String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;}/*** post請(qǐng)求* * @param url* 功能和操作* @param body* 要post的數(shù)據(jù)* @return* @throws IOException*/public static String post(String url, String body){System.out.println("url:" + System.lineSeparator() + url);System.out.println("body:" + System.lineSeparator() + body);String result = "";try{OutputStreamWriter out = null;BufferedReader in = null;URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();// 設(shè)置連接參數(shù)conn.setDoOutput(true);conn.setDoInput(true);conn.setConnectTimeout(5000);conn.setReadTimeout(20000);conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 提交數(shù)據(jù)out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");out.write(body);out.flush();// 讀取返回?cái)?shù)據(jù)in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line = "";boolean firstLine = true; // 讀第一行不加換行符while ((line = in.readLine()) != null){if (firstLine){firstLine = false;} else{result += System.lineSeparator();}result += line;}} catch (Exception e){e.printStackTrace();}return result;}/*** 回調(diào)測(cè)試工具方法* * @param url* @param reqStr* @return*/public static String postHuiDiao(String url, String body){String result = "";try{OutputStreamWriter out = null;BufferedReader in = null;URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();// 設(shè)置連接參數(shù)conn.setDoOutput(true);conn.setDoInput(true);conn.setConnectTimeout(5000);conn.setReadTimeout(20000);// 提交數(shù)據(jù)out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");out.write(body);out.flush();// 讀取返回?cái)?shù)據(jù)in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line = "";boolean firstLine = true; // 讀第一行不加換行符while ((line = in.readLine()) != null){if (firstLine){firstLine = false;} else{result += System.lineSeparator();}result += line;}} catch (Exception e){e.printStackTrace();}return result;} }驗(yàn)證碼通知短信接口:(最重要)
這里需要修改我們?cè)谧?cè)時(shí)獲取到的信息。
- 修改smsContent
把這個(gè)短信的內(nèi)容修改為你創(chuàng)建的短信模板
**注意:**一定要保持一致。
上面這些是主要的類,還有其他的類在文章末尾給出源代碼。
三、手機(jī)短信驗(yàn)證測(cè)試
public class Test {/*** @param args*/public static void main(String[] args){// 驗(yàn)證碼通知短信接口IndustrySMS.execute();}}源代碼下載
請(qǐng)到公眾號(hào) 程序員的技術(shù)圈子,回復(fù):短信驗(yàn)證
最后,再分享我歷時(shí)三個(gè)月總結(jié)的 Java 面試 + Java 后端技術(shù)學(xué)習(xí)指南,這是本人這幾年及春招的總結(jié),已經(jīng)拿到了大廠 offer,整理成了一本電子書,拿去不謝,目錄如下:
現(xiàn)在免費(fèi)分享大家,在下面我的公眾號(hào) 程序員的技術(shù)圈子 回復(fù) 面試 即可獲取。
有收獲?希望老鐵們來(lái)個(gè)三連擊,給更多的人看到這篇文章
1、老鐵們,關(guān)注我的原創(chuàng)微信公眾號(hào)「程序員的技術(shù)圈子」,專注于 Java、數(shù)據(jù)結(jié)構(gòu)和算法、微服務(wù)、中間件等技術(shù)分享,保證你看完有所收獲。
2、給俺點(diǎn)個(gè)贊唄,可以讓更多的人看到這篇文章,順便激勵(lì)下我繼續(xù)寫作,嘻嘻。
3、另外,原創(chuàng)文章首發(fā)在我的個(gè)人博客:blog.ouyangsihai.cn,歡迎訪問(wèn)。
點(diǎn)贊是對(duì)我最大的鼓勵(lì)
↓↓↓↓↓↓
總結(jié)
以上是生活随笔為你收集整理的java实现手机短信验证全过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: “面试不败计划”:集合、日期、异常、序列
- 下一篇: 【图文讲解】eclipse中配置mave