短信验证码接口使用
注册时经常会用到短信验证码。通过第三方平台接口实现短信发送。
直接上代码
1 @ResponseBody 2 @RequestMapping(value="/dycode.htm") 3 public Object getDynamicCode(@PathVariable String mobile){ 4 Jedis jedis = null; 5 try{ 6 jedis = jedisPool.getResource(); 7 if(jedis.ttl(mobile) > 240){ 8 return getResponse(2, "获取动态验证码太频繁!"); 9 } 10 String verifyCode = Utilities.getVerifyCode(6); 11 Runnable runnable = new Runnable() { 12 public void run() { 13 String smsServerUrl = "http://smssh1.253.com/msg/send/json"; 14 String msg = "【某某平台】 "+ verifyCode +" (某某平台验证码,请完成验证),如非本人操作,请忽略本短信。"; 15 SmsSendRequest smsSingleRequest = new SmsSendRequest("N......2", "he.......c", msg, mobile, "true"); 16 String requestJson = JSON.toJSONString(smsSingleRequest); 17 String response = ChuangLanSmsUtil.sendSmsByPost(smsServerUrl, requestJson); 18 JSONObject jsonResObj = JSON.parseObject(response); 19 if(jsonResObj.getInteger("code") != 0){ 20 logger.warn("获取动态验证码失败:" + response); 21 } 22 } 23 }; 24 new Thread(runnable).start(); 25 jedis.setex(mobile, 300, verifyCode); 26 return getResponse(0, "请求发送动态验证码成功!"); 27 }catch (Exception e) { 28 e.printStackTrace(); 29 logger.error("请求发送动态验证码时:" + e.toString()); 30 return getResponse(-1); 31 }finally { 32 if(jedis != null){ 33 jedis.close(); 34 } 35 } 36 }
1.点击发送验证码功能时,倒计时60秒才能再次点击(前端js控制)
此时通过 Utilities.getVerifyCode(6) 方法生成6位数验证码,通过第三方发送到指定手机号码
2.将验证码存入redis,并设置失效时间
jedis.setex(mobile, 300, verifyCode);
这里设置为300s失效。
登录时取对应存储的手机号的验证码,进行忽略大小写验证。验证成功则删除redis存入的此验证码。
注:在验证码未失效时,查询此手机号对应验证码的失效时间,提示获取验证码过于频繁。
提莫队长