短信驗證登陸-中國網建提供的SMS短信平台


一、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 短信發送數量 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM