Java實現傳送簡訊驗證驗證碼功能

來源:互聯網
上載者:User

標籤:傳送簡訊   驗證碼   httpclient   簡訊平台   

這幾天老大讓我弄一個傳送簡訊驗證碼的功能,使用的是信易通的簡訊平台介面,然後在Java中使用HttpClient類比POST請求或者GET請求(看簡訊平台要求,一般的情況下都是POST請求),調用簡訊平台提供的介面(遵循簡訊平台的介面規範即可)。具體看代碼:

使用HttpClient的時候需要在項目中引入:

commons-httpclient-3.1.jar

這個jar包,

項目結構:

1、建立一個Http的類比請求工具類,然後寫一個POST方法或者GET方法

/**  * 檔案說明  * @Description:擴充說明  * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved  * @Version: V6.0  */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;/**   * @Author: feizi * @Date: 2015年4月17日 上午9:26:34  * @ModifyUser: feizi * @ModifyDate: 2015年4月17日 上午9:26:34  * @Version:V6.0 */public class HttpRequestUtil {    /**     * HttpClient 類比POST請求      * 方法說明      * @Discription:擴充說明      * @param url      * @param params      * @return String      * @Author: feizi      * @Date: 2015年4月17日 下午7:15:59      * @ModifyUser:feizi      * @ModifyDate: 2015年4月17日 下午7:15:59     */    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請求      * 方法說明      * @Discription:擴充說明      * @param url      * @param params      * @return String      * @Author: feizi      * @Date: 2015年4月17日 下午7:15:28      * @ModifyUser:feizi      * @ModifyDate: 2015年4月17日 下午7:15:28     */    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;    }}

2、在建立一個類,產生驗證碼,然後傳遞相應的參數(不同的簡訊平台介面會有不同的參數要求,這個一般簡訊平台提供的介面文檔中都會有的,直接看文檔然後按要求來即可)

/**  * 檔案說明  * @Description:擴充說明  * @Copyright: 2015 dreamtech.com.cn Inc. All right reserved  * @Version: V6.0  */package com.demo.util;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;/**   * @Author: feizi * @Date: 2015年4月17日 上午9:24:48  * @ModifyUser: feizi * @ModifyDate: 2015年4月17日 上午9:24:48  * @Version:V6.0 */public class SendMsgUtil {    /**     * 傳送簡訊訊息      * 方法說明      * @Discription:擴充說明      * @param phones      * @param content      * @return      * @return String      * @Author: feizi      * @Date: 2015年4月17日 下午7:18:08      * @ModifyUser:feizi      * @ModifyDate: 2015年4月17日 下午7:18:08     */    @SuppressWarnings("deprecation")    public static String sendMsg(String phones,String content){        //簡訊介面URL提交地址        String url = "簡訊介面URL提交地址";        Map<String, String> params = new HashMap<String, String>();        params.put("zh", "使用者帳號");        params.put("mm", "使用者密碼");        params.put("dxlbid", "簡訊類別編號");        params.put("extno", "擴充編號");        //手機號碼,多個號碼使用英文逗號進行分割        params.put("hm", phones);        //將簡訊內容進行URLEncoder編碼        params.put("nr", URLEncoder.encode(content));        return HttpRequestUtil.getRequest(url, params);    }    /**     * 隨機產生6位隨機驗證碼      * 方法說明      * @Discription:擴充說明      * @return      * @return String      * @Author: feizi      * @Date: 2015年4月17日 下午7:19:02      * @ModifyUser:feizi      * @ModifyDate: 2015年4月17日 下午7:19:02     */    public static String createRandomVcode(){        //驗證碼        String vcode = "";        for (int i = 0; i < 6; i++) {            vcode = vcode + (int)(Math.random() * 9);        }        return vcode;    }    /**     * 測試      * 方法說明      * @Discription:擴充說明      * @param args      * @return void      * @Author: feizi      * @Date: 2015年4月17日 下午7:26:36      * @ModifyUser:feizi      * @ModifyDate: 2015年4月17日 下午7:26:36     */    public static void main(String[] args) {//      System.out.println(SendMsgUtil.createRandomVcode());//      System.out.println("&ecb=12".substring(1));        System.out.println(sendMsg("18123456789,15123456789", "尊敬的使用者,您的驗證碼為" + SendMsgUtil.createRandomVcode() + ",有效期間為60秒,如有疑慮請詳詢400-069-2886(客服電話)【XXX中心】"));    }}

然後執行一下,一般的情況下參數傳遞正確,按照介面文檔的規範來操作的話,都會發送成功的,手機都能收到驗證碼的,然後可能會出現的問題就是:發送的簡訊內容有可能會出現中文亂碼,然後就會發送不成功,按照簡訊平台的要求進行相應的編碼即可。一般都會是UTF-8編碼。

完整代碼已上傳至csdn:
http://download.csdn.net/my

Java實現傳送簡訊驗證驗證碼功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.