一、JAVA發送手機短信常見的有三種方式(如下所列):
使用webservice接口發送手機短信,這個可以使用sina提供的webservice進行發送,但是需要進行注冊
使用短信mao的方式進行短信的發送,這種方式應該是比較的常用,前提是需要購買硬件設備。
使用中國網建提供的SMS短信平台(申請賬號地址:http://sms.webchinese.cn/default.shtml)
二、一下整理了SMS短信驗證過程:
1、首先需要帶入三個包:
commons-httpclient-3.1.jar commons-logging-1.0.4.jar codec-1.3.jar
2、創建發送短信的類(一般寫在工具類中),其中要通過短信內容要進行設置編碼集為utf-8,調用第三方接口傳參要按照第三方文檔規范:
package com.demo.util; import java.io.IOException; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.SimpleHttpConnectionManager; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; public class HttpRequestUtil { /** * HttpClient 模擬POST請求 */ public static String postRequest(String url, Map<String, String> params) { //構造HttpClient的實例 HttpClient httpClient = new HttpClient(); //創建POST方法的實例 PostMethod postMethod = new PostMethod(url); //設置請求頭信息 postMethod.setRequestHeader("Connection", "close"); //添加參數 for (Map.Entry<String, String> entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系統提供的默認的恢復策略,設置請求重試處理,用的是默認的重試處理:請求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收處理結果 String result = null; try { //執行Http Post請求 httpClient.executeMethod(postMethod); //返回處理結果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 發生致命的異常,可能是協議不對或者返回的內容有問題 System.out.println("請檢查輸入的URL!"); e.printStackTrace(); } catch (IOException e) { // 發生網絡異常 System.out.println("發生網絡異常!"); e.printStackTrace(); } finally { //釋放鏈接 postMethod.releaseConnection(); //關閉HttpClient實例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模擬GET請求 */ public static String getRequest(String url, Map<String, String> params) { //構造HttpClient實例 HttpClient client = new HttpClient(); //拼接參數 String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "&" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //創建GET方法的實例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回結果 String result = null; try { //執行HTTP GET方法請求 client.executeMethod(method); //返回處理結果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 發生致命的異常,可能是協議不對或者返回的內容有問題 System.out.println("請檢查輸入的URL!"); e.printStackTrace(); } catch (IOException e) { // 發生網絡異常 System.out.println("發生網絡異常!"); e.printStackTrace(); } finally { //釋放鏈接 method.releaseConnection(); //關閉HttpClient實例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; } }
package com.demo.util; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; public class SendMsgUtil { /** * 發送短信消息 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址utf-8 String url = "http://utf8.sms.webchinese.cn"; Map<String, String> params = new HashMap<String, String>(); //用戶名,例:abc123456 params.put("Uid", "yu3961520"); //短信接口密鑰 ,不是密碼,例:79c3053154d313a34567 params.put("Key", "d41d8cd98f00b204e980"); //手機號碼,多個號碼使用英文逗號進行分割 params.put("smsMob", phones); //將短信內容進行URLEncoder編碼 params.put("smsText", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 隨機生成6位隨機驗證碼 */ public static String createRandomVcode(){ //驗證碼 String vcode = ""; for (int i = 0; i < 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 測試 */ public static void main(String[] args) { //多個手機號請用半角,隔開 //例:System.out.println(sendMsg("18912345678,17812345678", "尊敬的用戶,您的驗證碼為" + SendMsgUtil.createRandomVcode() + ",有效期為60秒,如有疑慮請詳詢400-3023-4493(客服電話)【中國聯通】")); System.out.println(sendMsg("電話號碼", "*****,你的驗證碼為" + SendMsgUtil.createRandomVcode() + ",有效期為60秒,如有疑慮請詳詢(******)【簽名,這是驗證格式的必須填】"));
}
}
3、短信發送后返回值 說明 :
-1 沒有該用戶賬戶
-2 密鑰不正確(不是用戶密碼)
-3 短信數量不足
-11 該用戶被禁用
-14 短信內容出現非法字符
-41 手機號碼為空
-42 短信內容為空
大於0 短信發送數量