手机短信验证码的实现

网站或者移动端应用的手机验证码功能,现在应用到的地方非常多,但是具体实现都差不多,也比较简单,正好最近我们网站需要开发这么个功能。所以记录以下: 1 首先选择一家短信服务提供商,大概时六分一条吧,我们选择的是容联云通讯,然后他们会提供接口文档或者demo。 2 接口调用方式,可以使用http方式,就是直接在前端页面中访问某个url,并传入相关参数,也可以将jar文件添加导classpath,,然后使用他们demo里的类即可。使用http方式本质上还是调用远端的sdk,这里选择sdk方式。 3下边是页面上的一些js,主要控制点击后在过60s才可以再次点击。

{var telphone=$(“#tel”).val();if(telphone==””){alert(“请输入手机号”);return;}//1服务器端生成验证码$.post(sendTelCode(telphone,code);//3设置按钮不可用$(“#btnCode”).attr(“disabled”, “disabled”);setMyTimeout();});}{$.post((“success”==message){alert(“短信发送成功”);}else{alert(“短信发送失败”);}});}{$.post((“”!=code){var pageCode=$(“#code”).val();var telphone=$(“#tel”).val();var userId = $(“#userId”).val();if(“”==pageCode){alert(“请输入验证码”);return;}// if(pageCode==code){//修改数据库用户状态:手机已验证$.post((“success”==message){alert(“验证成功,保存配置后可以使用手机号登录了”);}else{alert(“短信验证失败”);}});}});}//设置定时器 var count = 60; {if (count > 0) {setTimeout(setMyTimeout, 1000);$(“#btnCode”).val((count–) + “秒之后点击获取”);}else {count=5;$(“#btnCode”).val(“点击获取验证码”);$(“#btnCode”).attr(“disabled”, “”);} }

2 对于服务器端: 主要生成验证码,发送验证码,不过短信模版需要自己上提供商网站操作。然后将应用id,模版id 账户传进去即可。

/** * Servlet implementation class GenerateTelValidateCode */{serialVersionUID = 1L;String account = CmsGlobals.getCmsProperty(“yuntongxin.account”);String token = CmsGlobals.getCmsProperty(“yuntongxin.token”);String appId = CmsGlobals.getCmsProperty(“yuntongxin.appId”);String templateId = CmsGlobals.getCmsProperty(“yuntongxin.templateId”);(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String operate = request.getParameter(“operate”);PrintWriter out = response.getWriter();response.setContentType(“text/html;charset=utf-8”);response.setHeader(“Cache-Control”, “no-cache”);HttpSession session = request.getSession();if (“generateCode”.equals(operate)) {// 产生随机的认证码char[] rands = generateCheckCode();String code = new String(rands);// 将当前验证码存入到Session中session.setAttribute(“validateNum”, new String(rands));// 返回json验证码out.print(code);} else if (“getTelCode”.equals(operate)) {String sessionCode = (String) session.getAttribute(“validateNum”);out.print(sessionCode);} else if (“sendTelCode”.equals(operate)) {String telphone = request.getParameter(“telphone”);String code = request.getParameter(“code”);sendTelCode(telphone, code, out);} else if (“updateTelState”.equals(operate)) {updateTelState(request, out);}out.flush();out.close();}(String telphone, String code, PrintWriter out) {HashMap<String, Object> result = null;// 初始化SDKCCPRestSmsSDK restAPI = new CCPRestSmsSDK();restAPI.init(“sandboxapp.cloopen.com”, “8883”);restAPI.setAccount(account, token);restAPI.setAppId(appId);result = restAPI.sendTemplateSMS(telphone, templateId, new String[] {code, “1” });System.out.println(“SDKTestGetSubAccounts result=” + result);if (“000000”.equals(result.get(“statusCode”))) {// 正常返回输出data包体信息(map)HashMap<String, Object> data = (HashMap<String, Object>) result.get(“data”);Set<String> keySet = data.keySet();for (String key : keySet) {Object object = data.get(key);System.out.println(key + ” = ” + object);}out.print(“success”);} else {// 异常返回输出错误码和错误信息System.out.println(“错误码=” + result.get(“statusCode”) + ” 错误信息= “+ result.get(“statusMsg”));out.print(result.get(“statusMsg”));}}(HttpServletRequest request, PrintWriter out) {long userid = Long.valueOf(request.getParameter(“userId”));int result = 0;try {result = SqlHandler.excuteSQL(“update userinfo set telphone_valid = 1 where userid = “+ userid);} catch (Exception ex) {ex.printStackTrace();}if (result != -1) {out.print(“success”);HttpSession session = request.getSession();LoginUserInfo user = (LoginUserInfo) session.getAttribute(“user”);user.setTelphoneValid(1);session.setAttribute(“user”, user);} else {out.print(“error”);}}private char[] generateCheckCode() {// 定义验证码的字符表String chars = “2345679ACDEFGHGKLNPQRSTUVXYZ”;char[] rands = new char[4];for (int i = 0; i < 4; i++) {int rand = (int) (Math.random() * 28);rands[i] = chars.charAt(rand);}return rands;}(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}

“人无完人金无足赤”,只要是人就不会是完美的,

手机短信验证码的实现

相关文章:

你感兴趣的文章:

标签云: