利用WeX5給手機APP增長短信驗證碼功能

帖子來源:http://bbs.wex5.com/thread-70908-1-1.htmlhtml

 

遇到一個手機APP項目
客戶要求註冊到APP上的用戶手機號必須是真實的
經過X5平臺整合短信發送平臺接口完成了這個功能,拿出來和你們分享一下。

項目的整體思路:
一、用戶在註冊頁面上填寫手機號,按「獲取短信驗證碼」按鈕
二、經過servlet將這個手機號傳到後臺
三、經過java生成一個6位數字的字符串
四、把這個字符串返回前臺,同時把這個字符串經過短信發送平臺發給用戶註冊的手機號
五、用戶吧接收到的短信驗證碼輸入到inpu框
六、瀏覽器把從後臺接收到的驗證碼與用戶輸入的驗證碼進行比較,若是一致則容許客戶註冊,若是不一致則拒絕前端

 

調了好幾天短信驗證測試,終於成功,現將所有源代碼發給你們,但願對各位有所幫助,少走彎路。 若有問題,請加入個人QQ :893586170
        Model.prototype.saveUserBtnClick = function(event) {
        
                var userData = this.comp("userData");
                var params = {
                        "userData" : userData.toJson(true)
                };
                var success = function(resultData) {
                        userData.applyUpdates();
                        justep.Util.hint("用戶信息保存成功");
                };
                Baas.sendRequest({
                        "url" : "/takeout",
                        "action" : "save",
                        "params" : params,
                        "success" : success
                });

                
        var paramsa = {
                                "fPhoneNumber"   : userData.val("fPhoneNumber")
                };
                
                 var successa = function(resultData)
      {
          //拿到從後臺返回的驗證碼
          alert(resultData.CheckCode);
      };
                Baas.sendRequest({
                        "url" : "/takeout",
                        "action" : "DuanXinCheck",
                        "params" : paramsa,
                        "success" : successa
                });
                        
                
        
        };

private static void DuanXinCheck(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException , Exception
        {
                JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params"));
            String reta =null;        
                String fPhoneNumber = params.getString("fPhoneNumber");
                //生成6位數字的隨機字符串
        int suiji = new Random().nextInt(899999)+100000;
        String backStr=Integer.toString(suiji);
        // 將隨機字符串經過jsonOBJ返回前臺 
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("CheckCode", backStr);
        Util.writeJsonToResponse(response, jsonObj);
     
        String dxurl="http://utf8.sms.webchinese.cn";
        String PostData ="Uid=kljkljklk1&Key=ekjlkj271c32a&smsMob="+fPhoneNumber+"&smsText=驗證碼:"+backStr+" (本信息由系統自動發出,不要回復)";
        reta = Send.SMS(PostData,dxurl);
     }
                



package com.justep.baas.takeout;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

/**
*
* @author Administrator
*/
public class Send {

    public static String SMS(String postData, String postUrl) {
        try {
            //發送POST請求
            URL url = new URL(postUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setUseCaches(false);
            conn.setDoOutput(true);

            conn.setRequestProperty("Content-Length", "" + postData.length());
            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.write(postData);
            out.flush();
            out.close();

            //獲取響應狀態
            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                System.out.println("connect failed!");
                return "";
            }
            //獲取響應內容體
            String line, result = "";
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            while ((line = in.readLine()) != null) {
                result += line + "\n";
            }
            in.close();
            return result;
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
        return "";
    }
}

 

當用戶輸入 手機號後按短信驗證碼」按鈕的事件是
        Model.prototype.button2Click = function(event){
          //當用戶輸入手機號後,按短信驗證碼的處理動做
        //此處爲檢查手機號和密碼是否符合規則的代碼,省略

       //把手機號發日後臺
                var params = {
                         "fCellphone":this.comp("haircutterData").getValue("fCellphone")
                };
                // 請求成功後的回調方法
                var success = function(resultData) {
                                //拿到從後臺返回的驗證碼
                               alert(resultData.CheckCode);

                };

                // 向後臺發送請求
                Baas.sendRequest({
                        "url" : "/haircut", // servlet請求地址
                        "params" : params, // action對應的參數
                        "action" : "checkCodeAction", // action
                        "success" : success // 請求成功後的回調方法
                });
        };

 

 

後臺咱們使用的是中國網建的短信發送平臺 相關網址是 http://www.smschinese.cn/
須要在他的網站上註冊和充值才能拿到  Uid(用戶名), 短信密鑰, 這些經過他這個短信發送平臺所必須的參數。
後臺的servlet接口的動做函數以下(各類配置、轉接、請參考相關視頻文件)


引入的短信平臺和生成隨機數的jar包:(短信發送平臺的Jar包能夠在中國網建的網站上下載)
import java.util.Random;

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;


        //查詢向短信發送器發送隨機驗證碼,同時把驗證碼送回前端
                private static void checkCodeAction(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException , Exception{
                        // 參數序列化
                        JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params"));

                        // 拿到前臺傳過來的手機號
                        String fCellphone = params.getString("fCellphone");

                        //生成6位數字的隨機字符串
                        int suiji = new Random().nextInt(899999)+100000;
                        String backStr=Integer.toString(suiji);
                
                        // 將隨機字符串經過jsonOBJ返回前臺 
                                                JSONObject jsonObj = new JSONObject();
                                                jsonObj.put("CheckCode", backStr);
                                                Util.writeJsonToResponse(response, jsonObj);
                                                
                        //把這個隨機數發到短信平臺de 

                        HttpClient client = new HttpClient();
                        PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); 
                        post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在頭文件中設置轉碼
                        NameValuePair[] data ={ new NameValuePair("Uid", "用戶名"),new NameValuePair("Key", "我用戶名的短信密鑰"),new NameValuePair("smsMob",fCellphone),new NameValuePair("smsText","驗證碼:"+backStr+" (本信息由系統自動發出,不要回復)")};

//這段Java代碼是直接從他家demo拷貝下來的,只須要修改這句話,填寫你在他家註冊的用戶名、短信密鑰,參數中加要發送的手機號和驗證碼短信
                        post.setRequestBody(data);
        try{
                        client.executeMethod(post);
                        Header[] headers = post.getResponseHeaders();
                        int statusCode = post.getStatusCode();
                        System.out.println("statusCode:"+statusCode);
                        for(Header h : headers)
                        {
                                System.out.println(h.toString());
                        }
                        String result = new String(post.getResponseBodyAsString().getBytes("gbk")); 
                        System.out.println(result); //打印返回消息狀態

        }
        finally{
                        post.releaseConnection();
                        
        }
                }
相關文章
相關標籤/搜索