java通過SMS簡訊平臺實現發簡訊的功能
阿新 • • 發佈:2019-01-06
一、使用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 | 簡訊傳送數量 |