帖子來源: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(); } }