短信通知限制
来源:互联网 发布:cocos2d js 粒子效果 编辑:程序博客网 时间:2024/05/17 03:21
class SmsLimitService{ /** * 全局限制 * @return bool * @author: mzc * @date:2017/10/13 9:47 */ public static function globalLimit($params,$smsType){ $appId = $params['appId']; //应用ID $tel = $params['tel']; //手机号 //1. ip白名单限制 /*$ip = get_client_ip(); $whiltListIp = M('WhiteList')->field("INET_NTOA(ip) as ip")->select(); $whiltListIp = array_column($whiltListIp,'ip'); $res = self::whiteListLimit($ip,$whiltListIp); if(!$res){ apiResponse(CodeModel::ERROR, $ip.'不在白名单列表里'); }*/ //2.同一手机号多少秒内不能重复发,默认30s $limitTime = 30; $cacheName =$appId.$tel.$smsType.$limitTime;//应用.电话号码.短信类型(普通短信,语音通知.时间 $res = self::secondsLimit($limitTime,$cacheName); if(!$res){ apiResponse(CodeModel::ERROR, '同一手机号'.$limitTime.'内不能重复发送'); } //3. 同一手机号1小时内限制多少条短信(语音)发送, $limitNum = 3; $hour = 1; $limitTime = $hour*3600; $cacheStartTime = $appId.$tel.$smsType.$limitTime;//应用.电话号码.短信类型(普通短信,语音通知.时间 $cacheNameNum = $appId.$tel.$smsType.$limitTime.$limitNum; $res = self::hourLimit($limitNum,$limitTime,$cacheStartTime,$cacheNameNum); if(!$res){ apiResponse(CodeModel::ERROR,'同一手机号'.$limitTime.'小时内限制'.$limitNum.'条短信(语音)发送'); } //4. 同一手机号1天内限制多少条短信发送, $limitNum = 3; $day = 1; $limitTime = $day*24*3600; $cacheStartTime = $appId.$tel.$smsType.$limitTime;//应用.电话号码.短信类型(普通短信,语音通知.时间 $cacheNameNum = $appId.$tel.$smsType.$limitTime.$limitNum; $res = self::DayLimit($limitNum,$limitTime,$cacheStartTime,$cacheNameNum); if(!$res){ apiResponse(CodeModel::ERROR,'同一手机号'.$limitTime.'天内限制'.$limitNum.'条短信(语音)发送'); } } /** * ip白名单限制 * @return bool * @author: mzc * @date:2017/10/13 9:46 */ private static function whiteListLimit($ip,$whiltListIp){ if(in_array($ip,$whiltListIp)){ return true; }else{ return false; } } /** * 多少秒内不能重复发,默认30s * @return bool * @author: mzc * @date:2017/10/13 9:46 */ private static function secondsLimit($limitTime,$cacheName){ if(empty(S($cacheName))){ S($cacheName,1,$limitTime); //缓存时间 return true; }else{ return false; } /*if(empty(S($cacheName))){ S($cacheName,time()); //第一次发送时,缓存起时间 } $nextTime = time();//本次发送时间 $preTime = S($cacheName);//获取前一次发送时间 if($nextTime-$preTime<$limitTime){ return false; }else{ S($cacheName,$nextTime); return true; }*/ } /** * 1小时内限制多少条短信发送,默认3条 * @return bool * @author: mzc * @date:ct */ private static function hourLimit($limitNum=3,$limitTime=3600,$cacheStartTime,$cacheNameNum){ return self::limitSend($limitNum,$limitTime,$cacheStartTime,$cacheNameNum); } /** * 1天内限制多少条短信发送,默认10条 * @return bool * @author: mzc * @date:2017/10/13 9:46 */ private static function dayLimit($limitNum=10,$limitTime,$cacheStartTime,$cacheNameNum){ return self::limitSend($limitNum,$limitTime,$cacheStartTime,$cacheNameNum); } public static function clear($redis,$key){ $redis->rm($key); } private static function limitSend($limitNum,$limitTime,$cacheStartTime,$cacheNameNum){ $redis = Cache::getInstance('redis');// $redis->clear();// exit; $startTime = $redis->get($cacheStartTime); $num = $redis->get($cacheNameNum); if(empty($startTime)&&empty($num)){ $redis->set($cacheStartTime,time(),$limitTime); $redis->set($cacheNameNum,1,$limitTime); return true; }else{ $nextTime = time();// echo $startTime.':'.$nextTime.':'.$num.':'.$limitNum; if($nextTime-$startTime<$limitTime&&$num>$limitNum){ return false; }else{ $prefix = C('DATA_CACHE_PREFIX'); //必须加,因为在set,get的时候会默认加上这个 $redis->incr($prefix.$cacheNameNum); return true; } } }}
具体参考
阅读全文
0 0
- 短信通知限制
- Notification 短信通知
- 短信通知栏
- 短信验证码通知
- 机房停电与短信通知
- 使用邮件到达短信通知
- andorid 短信通知广播接收。
- 使用短信接口进行通知
- PHP阿里云短信通知
- ecshop短信验证插件 短信通知插件 注册通知 下单通知 发货通知
- 监控tomcat死活、邮件or短信通知
- 彩信的通知短信PDU数据分析
- android 短信通知和SQLITE 应用
- Android拦截短信并通知栏提醒
- android 短信通知和SQLITE 应用
- 树莓派监控水位报警发送短信通知
- 有没有这样的短信通知平台?
- 有没有这样的短信通知平台?
- 微信支付服务商开发能力说明文档范本-微信公众号使用教程31
- 【codevs 3115 3116 3117】高精度练习之加/减/乘法
- 微信公众平台编辑器教程-微信公众号使用教程32
- 记得坚持曾经的梦想
- 泛型 _Get_deleter_pointer_type
- 短信通知限制
- WINFORM.FormBorderStyle
- [后缀自动机 DP] LOJ#6071. 「2017 山东一轮集训 Day5」字符串
- Linux下Tomcat重新启动
- 微博深度学习平台架构和实践
- 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
- bzoj 5057: 区间k小值5
- 2018年人工智能将赋能所有行业,未来市场将超过400亿美元
- DeepMind最新论文提出「Rainbow」,将深度强化学习组合改进