要求.
每个手机号每天最多发送10条验证码
每两条验证码间隔需要大于60秒
思路.
调用发送验证码接口时,以前缀+当前日期+手机号 为键.
如 sendVerify:20201014:18920144444
值需要记录上次发送的时间和发送次数
[ 'recently_send_time'=>time(), 'send_time'=>1 ]
并设置过期时间24小时
/**
* 是否拦截短信发送,基于redis实现
* @param $tel string 手机号
* @param $max int 每天发送次数
* @param $interval int 发送间隔s
*
* @return bool|string
*/
private function isInterceptSend($tel,$max,$interval){
$date = date('Ymd',time());
$REDIS_KEY = "sendVerify:$date:$tel";
$REDIS_VALUE = S($REDIS_KEY);
//第一次,保存发送时间和发送次数
if (!$REDIS_VALUE)
{
S($REDIS_KEY,['recently_send_time'=>time(),'send_times'=>1],24*3600);
return false;
}
//判断两次发送时间间隔
if( time() - $REDIS_VALUE['recently_send_time'] < $interval )
{
return "发送间隔$interval 秒";
}
//判断发送次数
if ( $REDIS_VALUE['send_times'] >= $max )
{
return "验证码发送次数过多";
}
//更新发送时间,次数+1,(重新设置过期时间,否则会变成永不失效)
S($REDIS_KEY,['recently_send_time'=>time(),'send_times'=> ($REDIS_VALUE['send_times'] + 1)],24*3600);
return false;
}
网友评论