利用短信验证码进行身份验证是目前互联网众多产品常用的一种方式,那么这种短信验证功能是如何实现的呢?就以目前的主流语言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文档查看地址:https://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("https://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 。