利用短信驗證碼進行身份驗證是目前互聯網眾多產品常用的一種方式,那么這種短信驗證功能是如何實現的呢?就以目前的主流語言java為例為大家介紹一下。
一、准備工作:
①選擇一家提供java短信接口的短信公司。
②獲得該公司短信接口的短信接口文檔和java短信接口的代碼示例。
二、梳理短信驗證碼發送整個流程:
①用戶填入手機號,觸發獲取驗證碼按鈕,然后頁面程序驗證手機號是否有效,有效則客戶端發送請求到后台服務器,客戶端開始倒計時60s,不通過則返回;
②服務器,驗證手機號是否被注冊或有效,通過則調用接入的短信驗證碼接口,並發送相關數據(包括手機號和驗證碼),然后回調結果,成功則將驗證碼存入session,失敗則返回提示,不通過則返回。
③客戶收到驗證碼后在有效時間內,填入並發送請求。
④服務器端,收到請求后,用戶發送過來的驗證碼和事前放入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();
try {
// 發送請求,第三方短信通信接口參數設置:賬號accName 密碼accPwd 樂信短信api文檔查看地址:http://www.lx598.com/apitext.html
responseBody = sendSms(String accName,String accPwd,recPhoneNum,"你的短信驗證碼是:"+captcha);
// 將驗證碼放入session
model.addAttribute("captcha", captcha);
// 得到結果
responseBody = rsp.getBody();
log.debug("getSmsCaptcha: responseBody = " + responseBody);
if (rsp.getResult() != "101") {
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;
}
}
private String sendSms(String accName,String accPwd,String mobies,String content){
StringBuffer sb = new StringBuffer("http://www.lx198.com/sdk/send?");
try {
sb.append("&accName="+accName);
sb.append("&accPwd="+MD5.getMd5String(accPwd));
sb.append("&aimcodes="+mobies);
sb.append("&content="+URLEncoder.encode(content,"UTF-8"));
sb.append("&bizId="+BizNumberUtil.createBizId());
sb.append("&dataType=string");
URL url = new URL(sb.toString());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
return in.readLine();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
代碼段③
// 從session取出驗證碼 String captcha = session.getAttribute("captcha"); // 比較 if (reqCaptcha.equals(captcha))// 相同通過,則無效化驗證碼 session.setAttribute("captcha", null); else // 不通過並提示無效驗證碼
以上就是java手機短信驗證碼實現流程,如還有什么疑問請在線咨詢或撥打400電話:400-6699-521 。