发送短信按钮倒计时服务器端支持

发送短信按钮倒计时服务器端支持

发送成功之后才计时:

 

 

Java代码  

  1. /*** 
  2.      * 服务器端启动倒计时,即记录时间戳 
  3.      * 
  4.      * @param mobile 
  5.      */  
  6.     private void setSMSLimit(String mobile) {  
  7.         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();  
  8.         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();  
  9.         saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()), 60);  
  10.     }  

 上述代码中的saveExpxKeyCache 是关键方法,用于记录时间戳

Java代码  

  1. public /*synchronized*/ void saveExpxKeyCache(HttpServletRequest request, HttpServletResponse response, String k, String v,long time) {  
  2.   
  3.         String cid = getCid(request, response);  
  4.   
  5. //        logger.debug("cid is " + cid);  
  6. //        logger.debug("set " + k + " to value : " + v);  
  7.   
  8.         RedisHelper helper = RedisHelper.getInstance();  
  9.         helper.saveExpxKeyCache(cid+k,  v,time);  
  10.   
  11.   
  12.     }  

 对上述方法的说明:

参数说明:

(1)k:redis的key,比如手机号;

(2)v:redis的value,比如发送短信时的时间戳;

(3)time:超时时间

 

time就是发送短信间隔的时间,所以就是60秒,这个方法的功能:

60秒之后,这条记录被自动删除.

 

 发送短信之前得检查是否在60秒之内发送短信:

Java代码  

  1. public WapResponseDto sendMobileSMS(HttpServletRequest request, HttpServletResponse response,  
  2.                                        String mobile,  
  3.                                        String type/*, 
  4.                               String authImage*/) {  
  5.        WapResponseDto wapResponseDto = null;  
  6.   
  7.        //检查格式  
  8.        if (!StringUtil.isMobileNumber(mobile)) {  
  9.            wapResponseDto = new WapResponseDto();  
  10.            wapResponseDto.setResult(false);  
  11.            wapResponseDto.setErrorFieldName("mobile");  
  12.            wapResponseDto.setErrorMessage(Constant.ERROR_MESSAGE_MOBILE_FORMAT_INVALID);  
  13.            return wapResponseDto;  
  14.        }  
  15.        WapResponseDto SMSLimitResponseDto = verifySMSLimit(mobile);  
  16.        if (!StringUtil.isNullOrEmpty(SMSLimitResponseDto)) {//检查一分钟之内不能重复发送手机短信  
  17.            return SMSLimitResponseDto;  
  18.        }  

 

 

Java代码  

  1. /*** 
  2.      * 检查一分钟之内不能重复发送手机短信 
  3.      * 
  4.      * @param mobile 
  5.      * @return : 返回null则表示校验通过 
  6.      */  
  7.     public WapResponseDto verifySMSLimit(String mobile) {  
  8.         int remainingTime = sMSWaitingTime(mobile, false);//一分钟之内不能重复发送手机短信  
  9.         if (remainingTime > 0) {  
  10.             SMSRemainingTimeDto sMSRemainingTimeDto = new SMSRemainingTimeDto();  
  11.             sMSRemainingTimeDto.setResult(false);  
  12.             sMSRemainingTimeDto.setErrorMessage(Constant.getErrorMsg("a00001"));  
  13.             sMSRemainingTimeDto.setRemainingSecond(remainingTime);  
  14.             return sMSRemainingTimeDto;  
  15.         }  
  16.         return null;  
  17.     }  

 

sMSWaitingTime 用于检查还要等待多长时间:

Java代码  

  1. /*** 
  2.      * 倒计时还剩余多长时间 
  3.      * @param mobile : 手机号 
  4.      * @param reallySendSMS : 是否真正发送短信 
  5.      * @return : second 
  6.      */  
  7.     public int sMSWaitingTime(String mobile,boolean reallySendSMS) {  
  8.         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();  
  9.         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();  
  10.         RedisHelper rdsHelper = RedisHelper.getInstance();  
  11.         String cid = getCid(request, response);  
  12.           
  13.         String lastSendSMSTime = rdsHelper.getCache(cid+mobile);  
  14.   
  15.         if(StringUtil.isNullOrEmpty(lastSendSMSTime)) {  
  16.             if(reallySendSMS){  
  17.                 saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60);  
  18.             }  
  19.             return 0;//不需要倒计时  
  20.         } else {  
  21.             long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime);  
  22.             long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond();  
  23.             int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond);  
  24.             if(delter>=60){  
  25.                 return 0;//不需要倒计时  
  26.             }else{  
  27.                 return 60-delter;  
  28.             }  
  29.         }  
  30.     }  

 

注意:如果超过60秒,lastSendSMSTime 应该是为null的.因为我通过saveExpxKeyCache 设置了超时时间

时间: 2024-12-14 10:14:41

发送短信按钮倒计时服务器端支持的相关文章

发送短信按钮倒计时

1,定时器执行的函数 Js代码   var SMSbtnTiming = function () {                       if (secondCount === 0) {                           $self.addClass('enabled').removeClass('disabled');                           $self.val('重新发送');                           $sel

基于JavaScript实现手机短信按钮倒计时(超简单)_javascript技巧

在淘宝等购物网站,我们都会看到一个发送短信倒计时的按钮,究竟是如何实现的呢?下面我就给大家提供一段代码很实用的. 废话不多说了,直接给大家贴js代码了. /* 120秒手机短信按钮倒计时 */ exports.sendmessage = function (name) { var second = 120; $(name).attr("disabled", true); var color = $(name).css('background-color'); $(name).attr(

Android实现发送短信验证码倒计时功能示例

一.简介: 开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的. 效果图: 二.实现步骤: 1.一个关键类:CountDownTimer(Android系统自带的倒计时功能类) public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; //显示倒计时的文字 /** * @param textView Th

WPF MVVM制作发送短信小按钮_C#教程

最近做一个项目,因为涉及到注册,因此需要发送短信,一般发送短信都有一个倒计时的小按钮,因此,就做了一个,在此做个记录. 一.发送消息 没有调用公司的短信平台,只是模拟前台生成一串数字,将此串数字输出一下. 在这个部分写了两个类文件:一个是生成随机数,一个是模拟发送此数字的. 1.因为生成几位随机数,是必须要到项目上线之前才能定的,因此,写了一个带参数的函数,如下  /// <summary> /// 生成随机验证码 /// </summary> public static clas

JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)_javascript技巧

1.功能描述 当用户想要获取验证码时,就点击 免费获取验证码 ,然后开始倒计时,倒计时期间按钮文字为剩余时间x秒,且不可按状态,倒计时结束后,按钮更改为点击重新发送. 2.分析 必须用到定时器.按钮点击后,在定时器内做出判断.倒计时60秒,到0结束. 3.代码实现: 重点介绍:定时器在进行下一次倒计时之前,一定要清除一下,这样的话保证下一次定时器倒计时是正常的. <!DOCTYPE html> <html> <head> <meta charset="U

基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)_jquery

相关阅读: 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能) 今天测试提了一个bug,发送短信倒计时功能,要求关闭页面也要进行倒计时.这想到了,当年我参与的周杰伦演唱会的先付先抢功能.与之类似,只不过,那个项目的时间都是服务器时间,本人目前有点偷懒,就用客户端的时间了. 一下是完整的代码,只不过在客户端的效率不是很好. <!doctype html> <html lang="en"> <head> <meta

基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)_javascript技巧

相关阅读: 基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭) 下面一段代码是小编给大家带来的js发送短信验证码后实现倒计时功能,代码简单易懂. 具体代码如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus

js发送短信倒计时的简单实现方法_javascript技巧

如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <meta charset="utf-8"> &l

android-Android监听发送短信权限拒绝按钮的事件

问题描述 Android监听发送短信权限拒绝按钮的事件 如图,我想在用户点击拒绝按钮后弹出窗口提示用户,重新发送短信,监听异常的方法已经尝试过了,行不通,不明白我的意思的可以下载美丽说软件,点击一键注册后,发送短信,在权限选择界面点击拒绝,软件提示用户重新发送. 解决方案 你试试监听一些短信发送结果 解决方案二: 意见同楼上,获取短信发送结果,然后提示重新发送 解决方案三: 意见同楼上,获取短信发送结果,然后提示重新发送 解决方案四: 楼上说的对的,你可以通过广播监听发短信,返回失败就提示你要的