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


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

 

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

項目的總體思路:
1、用戶在注冊頁面上填寫手機號,按“獲取短信驗證碼”按鈕
2、通過servlet將這個手機號傳到后台
3、通過java生成一個6位數字的字符串
4、把這個字符串返回前台,同時把這個字符串通過短信發送平台發給用戶注冊的手機號
5、用戶吧接收到的短信驗證碼輸入到inpu框
6、瀏覽器把從后台接收到的驗證碼與用戶輸入的驗證碼進行比較,如果一致則允許客戶注冊,如果不一致則拒絕

 

調了好幾天短信驗證測試,終於成功,現將全部源代碼發給大家,希望對各位有所幫助,少走彎路。 如有問題,請加入我的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();
                        
        }
                }

 


免責聲明!

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



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