1. 程式人生 > >java實現手機簡訊驗證的基本思路

java實現手機簡訊驗證的基本思路

整體流程:

  1. 客戶填入手機號,通過客戶端點選獲取驗證碼按鈕,驗證手機號是否有效,有效則客戶端傳送請求到後臺伺服器,客戶端開始倒計時60s,不通過則返回;

  2. 伺服器,驗證手機號是否被註冊或有效,通過則呼叫第三方的簡訊通訊介面併發送相關資料(包括手機號和驗證碼),然後回撥結果,成功則將驗證碼存入session,失敗則返回提示,不通過則返回。

  3. 客戶收到驗證碼後在有效時間內,填入併發送請求。

  4. 伺服器端,收到請求後,使用者傳送過來的驗證碼和事前放入session的驗證碼做對比,相同通過,否則提示驗證碼無效。

通過後,需要將session中的驗證碼無效化,一般就是置為空。

第一步虛擬碼:


function
sendCaptcha(tel) {
console.log("sendCaptcha: tel = " + tel); $.ajax({ type: 'post', url: '/sms/captcha/' + tel, dataType: "json", success: function (data) { console.log("sendCaptcha ==> success: data = "
+ eval(data)); if (data) { countdown(); b_code = false; } else { alert("您傳送的頻率過快!"); } }, error: function (data) { console.log("sendCaptcha ==> error: data = "
+ eval(data)); alert("網路超時"); clearTimeout(t); b_code = true; var msg = "獲取驗證碼"; $("#code").text(msg); c = 60; } }); }

第二步虛擬碼:


@RequestMapping(value = "captcha/{recPhoneNum}", method = RequestMethod.POST)    

   public Object getSmsCaptcha(ModelMap model, @PathVariable("recPhoneNum")String recPhoneNum) {    

       String responseBody = null;    



       /* 這裡驗證手機號是否被註冊 */



      // 生成驗證碼

       String captcha  = Generator.generateCaptcha();    



      // 第三方簡訊通訊介面引數設定

     req.setReceive(recPhoneNum);

       try {    

          // 傳送請求

           responseBody = req.send();

          // 將驗證碼放入session

           model.addAttribute("captcha", captcha);    

          // 得到結果

           responseBody = rsp.getBody();    

           log.debug("getSmsCaptcha: responseBody = " + responseBody);    

           if (rsp.getResult() != null) {    

               model.addAttribute("success_response", rsp.getResult());    

           } else {    

               model.addAttribute("error_response", rsp.getSubMsg());    

           }    

       } catch (ApiException e) {    

           log.error("getSmsCaptcha :" + e.getErrMsg());    

       }    

        // 解析結果

       if (successJson != null) {    

           successJson = successJson.getJSONObject("result");    

           return successJson.getBoolean("success");    

       } else {    

           return false;    

       }    

   }    




最後一步虛擬碼:


// 從session取出驗證碼

String captcha = session.getAttribute("captcha");

// 比較

if (reqCaptcha.equals(captcha))

// 相同通過,則無效化驗證碼

session.setAttribute("captcha", null);


else

// 不通過並提示無效驗證碼

如有疑問,請指出!