1. 程式人生 > >java實現傳送手機驗證碼功能

java實現傳送手機驗證碼功能

2. 註冊好之後,點選 使用者中心 -> 賬戶管理,就會進入如下介面 (順便提一下,新註冊的使用者,平臺會免費贈送你10元,足夠大家學習和使用了,所以不用擔心需要充錢)  你需要做的就是獲取你自己的 ACCOUNT SID 和 AUTH TOKEN

3. 需要在秒嘀上新建一個傳送手機驗證碼的模板,點選 配置管理 -> 驗證碼簡訊模板,就會進入如下介面

4. 點選“新建模板”按鈕, 填寫好模板名稱、簡訊簽名 和 簡訊內容(簡訊內容可以選擇 驗證碼通知簡訊模板 或者 自己編寫簡訊內容),點選“提交稽核”按鈕即可,介面如下

5. 然後等待 簡訊驗證碼模板 稽核通過即可,點選 配置管理 -> 驗證碼簡訊模板,檢視 簡訊驗證碼 是否稽核通過

6. 接下來就是程式碼了,把我圈住的地方改成自己的就行,其他的不用動,tamp值 一定要與自己建立簡訊模板的簡訊內容保持一致

7. java簡訊傳送驗證碼

   匯入阿里巴巴fastjson.jar包:   

                方式二:maven工程直接把     下面這段程式碼複製到  pom.xml 中就行   

 <dependency>                                                                               
     <groupId>com.alibaba</groupId>                                                        
     <artifactId>fastjson</artifactId>
     <version>1.2.47</version>
 </dependency>   

    原始碼如下 :                                                       

package com.group.util;

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;

/**
 * 
 * @Title:GetMessageCode
 * @Description:傳送驗證碼
 * @author:ヅ零碎de記憶ぷ
 * @Date 2018年7月4日 下午9:27:04
 */
public class GetMessageCode {
	private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
	private static final String ACCOUNT_SID = "";
	private static final String AUTH_TOKEN = "";

	// 根據相應的手機號傳送驗證碼
	public static String getCode(String phone) {
		String rod = smsCode();
		String timestamp = getTimestamp();
		String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);
		String tamp = "【聯途旅遊】尊敬的使用者,您好,您的驗證碼為:" + rod + ",若非本人操作,請忽略此簡訊。";
		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.setReadTimeout(10000);// 設定引數讀取時間
			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) {
			// TODO Auto-generated catch block
			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) {
		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;
	}
}

8. 測試傳送手機簡訊驗證碼 原始碼如下   (手機號碼換成你想要傳送到指定手機的手機號碼即可)

package com.message.test;

public class Test {

	public static void main(String[] args) {
		String phone = "12345678910";
		GetMessageCode.getCode(phone);
	}

}

如果有遇到不懂或者有問題時,可以掃描下方二維碼,歡迎進群交流與分享,希望能夠跟大家交流學習!