一、JAVA發送手機短信常見的有三種方式(如下所列):
使用webservice接口發送手機短信,這個可以使用sina提供的webservice進行發送,但是需要進行注冊
使用短信mao的方式進行短信的發送,這種方式應該是比較的常用,前提是需要購買硬件設備。
二、一下整理了SMS短信驗證過程:
1、首先需要帶入三個包:
commons-httpclient-3.1.jar? ? ??commons-logging-1.0.4.jar? ? ??codec-1.3.jar
2、創建發送短信的類(一般寫在工具類中),其中要通過短信內容要進行設置編碼集為utf-8,調用第三方接口傳參要按照第三方文檔規范:
packagecom.demo.util;importjava.io.IOException;importjava.util.Map;importorg.apache.commons.httpclient.HttpClient;importorg.apache.commons.httpclient.HttpException;importorg.apache.commons.httpclient.SimpleHttpConnectionManager;importorg.apache.commons.httpclient.methods.GetMethod;importorg.apache.commons.httpclient.methods.PostMethod;public classHttpRequestUtil {/*** HttpClient 模擬POST請求*/
public static String postRequest(String url, Mapparams) {//構造HttpClient的實例
HttpClient httpClient = newHttpClient();//創建POST方法的實例
PostMethod postMethod = newPostMethod(url);//設置請求頭信息
postMethod.setRequestHeader("Connection", "close");//添加參數
for (Map.Entryentry : 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;
}
}returnresult;
}/*** HttpClient 模擬GET請求*/
public static String getRequest(String url, Mapparams) {//構造HttpClient實例
HttpClient client = newHttpClient();//拼接參數
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;
}
}returnresult;
}
}
packagecom.demo.util;importjava.net.URLEncoder;importjava.util.HashMap;importjava.util.Map;public classSendMsgUtil {/*** 發送短信消息*/@SuppressWarnings("deprecation")public staticString sendMsg(String phones,String content){//短信接口URL提交地址utf-8
String url = "http://utf8.sms.webchinese.cn";
Map params = new HashMap();//用戶名,例:abc123456
params.put("Uid", "yu3961520");//短信接口密鑰 ,不是密碼,例:79c3053154d313a34567
params.put("Key", "d41d8cd98f00b204e980");//手機號碼,多個號碼使用英文逗號進行分割
params.put("smsMob", phones);//將短信內容進行URLEncoder編碼
params.put("smsText", URLEncoder.encode(content));returnHttpRequestUtil.getRequest(url, params);
}/*** 隨機生成6位隨機驗證碼*/
public staticString createRandomVcode(){//驗證碼
String vcode = "";for (int i = 0; i < 6; i++) {
vcode= vcode + (int)(Math.random() * 9);
}returnvcode;
}/*** 測試*/
public static voidmain(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 短信發送數量