1. 程式人生 > >java通過SMS簡訊平臺實現發簡訊的功能

java通過SMS簡訊平臺實現發簡訊的功能

一、使用java傳送簡訊的方法:

java傳送手機簡訊,通常有幾種方法:

(1)使用webserive介面傳送手機簡訊;

(2)使用簡訊貓的方式進行簡訊的傳送,比較常用的方式,不過需要購買硬體裝置;

(3)使用中國網建的SMS簡訊平臺,使用前需要註冊,這裡只記錄SMS介面的使用。

二、介面的使用:

(1)匯入jar:

commons-logging-1.2.jar

commons-codec-1.10.jar

commons-httpclient-3.1.jar

maven依賴:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

(2)util:

package com.serviceMarket.common.util;

import java.io.IOException;
import java.util.HashMap;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/** 
* 類說明 :SMS_webchinese傳送簡訊util
*/
public class SendMsgUtil {
	
	public static HashMap<String,String> getMessageStatus(String phone){
		HashMap<String,String> map=new HashMap<String,String>();
		
		HttpClient client = new HttpClient();
		
		PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //sms平臺介面
		post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在標頭檔案中設定編碼集格式
		
		int num=(int)((Math.random()*9+1)*100000);//6位數驗證碼
		String code=num+"";
		
		NameValuePair[] data ={ 
				new NameValuePair("Uid", "使用者名稱"),//sms平臺的使用者名稱
				new NameValuePair("Key", "簡訊祕鑰"),//簡訊祕鑰,不是密碼
				new NameValuePair("smsMob","目的手機號碼"),//目的手機號碼,多個手機號用半形逗號隔開
				new NameValuePair("smsText","本次驗證碼為:"+code+""+",有效時間為5分鐘")//簡訊內容,自定義
                        };
		map.put("code", code);
		post.setRequestBody(data);

		try {
			client.executeMethod(post);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//列印狀態碼和響應頭資訊
		int statusCode = post.getStatusCode();
		System.out.println("statusCode:"+statusCode);
		Header[] headers = post.getResponseHeaders();
		for(Header h : headers)
		{
			System.out.println(h.toString());
		}
		
	
		String result = null;
		try {
			result = new String(post.getResponseBodyAsString().getBytes("gbk"));
		} catch (IOException e) {
			e.printStackTrace();
		} 
		System.out.println(result); //列印返回的訊息狀態
		map.put("result", result);

		post.releaseConnection();
		return map;
	}	
}

(3)Controller:

@Controller 
public class Controller {
        //簡訊傳送介面
	@RequestMapping(value="/GET/authentication/{phone}")
	@ResponseBody
        //返回結果Result物件:成功時返回一個6位數驗證碼,失敗時返回false
	public Result authentication(@PathVariable(value="phone")String phone,HttpServletRequest request){
		
		HashMap<String, String> map = SendMsgUtil.getMessageStatus(phone); //呼叫傳送簡訊介面
			
		String result = map.get("result");//獲取到result值
		if (result.trim().equals("1")) {//如果為1,表示成功傳送
			
			String code = map.get("code");//獲取傳送的驗證碼內容
			HttpSession session = request.getSession(); //設定session
			session.setAttribute("code", code);//將簡訊驗證碼放到session中儲存
			session.setMaxInactiveInterval(60 * 5);//儲存時間 暫時設定為5分鐘
			
			System.out.println(code);
			return Result.ok(code);
			
		} else {
			//簡訊傳送失敗
			return Result.ok("false");
		}		
	}
}

(4)簡訊傳送後的返回值:

簡訊傳送後返回值 說 明
-1 沒有該使用者賬戶
-2 介面金鑰不正確,不是賬戶登陸密碼
-21 MD5介面金鑰加密不正確
-3 簡訊數量不足
-11 該使用者被禁用
-14 簡訊內容出現非法字元
-4 手機號格式不正確
-41 手機號碼為空
-42 簡訊內容為空
-51 簡訊簽名格式不正確
介面簽名格式為:【簽名內容】
-6 IP限制
大於0 簡訊傳送數量