java實現手機短信驗證全過程

手機短信驗證如今在各類系統能夠說都是用的很是廣泛的,這個多是方便和安全性的考慮,因此才普遍的使用,這篇文章就以一個短信接口的實例,來說解一下怎麼使用短信接口。html

1、前期工做

首先,咱們須要選定一家短信接口的公司,而後去註冊和獲取一系列的ID等,而後就能夠正式的建立咱們的短信業務了。下面以某個短信接口爲例講解。java

1.一、註冊

http://www.miaodiyun.com/index.html(對於用哪一個平臺的看我的,這個只是實例)apache

1.二、獲取到ACCOUNT SID和AUTH TOKEN

這裏寫圖片描述

1.三、建立短信模板

這裏寫圖片描述

如上圖,點擊配置管理,而後進入到短信模板,再點擊新建模板,建立好你的短信模板json

下面給出個人模板做爲參考。 api

這裏寫圖片描述

注意:上面建立的短信模板的信息,須要在代碼中用到,而且必定須要保持一致,不然,會出現異常。安全

例如,上面的短信模板的信息應爲:「【歐陽科技】登陸驗證碼:{1},如非本人操做,請忽略此短信。」,{1}爲佔位符,是你的短信驗證碼。bash

好了,有了這些準備以後,就能夠開始發短信了。微信

2、具體代碼

config.java: 這個類主要是一些常亮參數的配置信息。app

這裏咱們須要修改咱們註冊時獲取到的ACCOUNT SIDAUTH TOKENdom

/**
 * 系統常量
 */
public class Config
{
	/**
	 * url前半部分
	 */
	public static final String BASE_URL = "https://api.miaodiyun.com/20150822";

	/**
	 * 開發者註冊後系統自動生成的帳號,可在官網登陸後查看
	 */
	public static final String ACCOUNT_SID = "aac6e373c7534007bf47648ba34ba2f1";

	/**
	 * 開發者註冊後系統自動生成的TOKEN,可在官網登陸後查看
	 */
	public static final String AUTH_TOKEN = "47605360a97a4f81bcd576e8e0645edf";

	/**
	 * 響應數據類型, JSON或XML
	 */
	public static final String RESP_DATA_TYPE = "json";
}
複製代碼

HttpUtil.java(http請求工具):

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請求工具
 */
public class HttpUtil
{
	/**
	 * 構造通用參數timestamp、sig和respDataType
	 * 
	 * @return
	 */
	public static String createCommonParam()
	{
		// 時間戳
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String timestamp = sdf.format(new Date());

		// 簽名
		String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);

		return "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
	}

	/**
	 * post請求
	 * 
	 * @param url
	 *            功能和操做
	 * @param body
	 *            要post的數據
	 * @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();

			// 設置鏈接參數
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setConnectTimeout(5000);
			conn.setReadTimeout(20000);
			conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			// 提交數據
			out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
			out.write(body);
			out.flush();

			// 讀取返回數據
			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;
	}

	/**
	 * 回調測試工具方法
	 * 
	 * @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();

			// 設置鏈接參數
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setConnectTimeout(5000);
			conn.setReadTimeout(20000);

			// 提交數據
			out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
			out.write(body);
			out.flush();

			// 讀取返回數據
			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;
	}
}
複製代碼

驗證碼通知短信接口:(最重要) 這裏須要修改咱們在註冊時獲取到的信息。

  • 修改smsContent 把這個短信的內容修改成你建立的短信模板 **注意:**必定要保持一致。
import java.net.URLEncoder;

import com.miaodiyun.httpApiDemo.common.Config;
import com.miaodiyun.httpApiDemo.common.HttpUtil;

/**
 * 驗證碼通知短信接口
 * 
 * @ClassName: IndustrySMS
 * @Description: 驗證碼通知短信接口
 *
 */
public class IndustrySMS
{
	private static String operation = "/industrySMS/sendSMS";

	private static String accountSid = Config.ACCOUNT_SID;
	private static String to = "13767441759";
	
	private static String code = smsCode();
//	登陸驗證碼:{1},如非本人操做,請忽略此短信。
	private static String smsContent = "【歐陽科技】登陸驗證碼:"+code+",如非本人操做,請忽略此短信。";

	/**
	 * 驗證碼通知短信
	 */
	public static void execute()
	{
		String tmpSmsContent = null;
	    try{
	      tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");
	    }catch(Exception e){
	      
	    }
	    String url = Config.BASE_URL + operation;
	    String body = "accountSid=" + accountSid + "&to=" + to + "&smsContent=" + tmpSmsContent
	        + HttpUtil.createCommonParam();

	    // 提交請求
	    String result = HttpUtil.post(url, body);
	    System.out.println("result:" + System.lineSeparator() + result);
	}
	
	//建立驗證碼
	public static String smsCode(){
		String random=(int)((Math.random()*9+1)*100000)+"";	
		System.out.println("驗證碼:"+random);
		return random;
	}
}

複製代碼

上面這些是主要的類,還有其餘的類在文章末尾給出源代碼。

3、手機短信驗證測試

public class Test
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{

		// 驗證碼通知短信接口
		 IndustrySMS.execute();

	}
	
	
}

複製代碼
源代碼下載

https://download.csdn.net/download/sihai12345/10472391

文章有不當之處,歡迎指正,若是喜歡微信閱讀,你也能夠關注個人微信公衆號:好好學java,獲取優質學習資源。

相關文章
相關標籤/搜索