| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- <?php
 
- namespace app\common\library;
 
- use fast\Random;
 
- use think\Hook;
 
- /**
 
-  * 短信验证码类
 
-  */
 
- class Sms
 
- {
 
-     /**
 
-      * 验证码有效时长
 
-      * @var int
 
-      */
 
-     protected static $expire = 120;
 
-     /**
 
-      * 最大允许检测的次数
 
-      * @var int
 
-      */
 
-     protected static $maxCheckNums = 10;
 
-     /**
 
-      * 获取最后一次手机发送的数据
 
-      *
 
-      * @param   int    $mobile 手机号
 
-      * @param   string $event  事件
 
-      * @return  Sms
 
-      */
 
-     public static function get($mobile, $event = 'default')
 
-     {
 
-         $sms = \app\common\model\Sms::
 
-         where(['mobile' => $mobile, 'event' => $event])
 
-             ->order('id', 'DESC')
 
-             ->find();
 
-         Hook::listen('sms_get', $sms, null, true);
 
-         return $sms ? $sms : null;
 
-     }
 
-     /**
 
-      * 发送验证码
 
-      *
 
-      * @param   int    $mobile 手机号
 
-      * @param   int    $code   验证码,为空时将自动生成4位数字
 
-      * @param   string $event  事件
 
-      * @return  boolean
 
-      */
 
-     public static function send($mobile, $code = null, $event = 'default')
 
-     {
 
-         $code = is_null($code) ? Random::numeric(config('captcha.length')) : $code;
 
-         $time = time();
 
-         $ip = request()->ip();
 
-         $sms = \app\common\model\Sms::create(['event' => $event, 'mobile' => $mobile, 'code' => $code, 'ip' => $ip, 'createtime' => $time]);
 
-         $result = Hook::listen('sms_send', $sms, null, true);
 
-         if (!$result) {
 
-             $sms->delete();
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     /**
 
-      * 发送通知
 
-      *
 
-      * @param   mixed  $mobile   手机号,多个以,分隔
 
-      * @param   string $msg      消息内容
 
-      * @param   string $template 消息模板
 
-      * @return  boolean
 
-      */
 
-     public static function notice($mobile, $msg = '', $template = null)
 
-     {
 
-         $params = [
 
-             'mobile'   => $mobile,
 
-             'msg'      => $msg,
 
-             'template' => $template
 
-         ];
 
-         $result = Hook::listen('sms_notice', $params, null, true);
 
-         return $result ? true : false;
 
-     }
 
-     /**
 
-      * 校验验证码
 
-      *
 
-      * @param   int    $mobile 手机号
 
-      * @param   int    $code   验证码
 
-      * @param   string $event  事件
 
-      * @return  boolean
 
-      */
 
-     public static function check($mobile, $code, $event = 'default')
 
-     {
 
-         $time = time() - self::$expire;
 
-         $sms = \app\common\model\Sms::where(['mobile' => $mobile, 'event' => $event])
 
-             ->order('id', 'DESC')
 
-             ->find();
 
-         if ($sms) {
 
-             if ($sms['createtime'] > $time && $sms['times'] <= self::$maxCheckNums) {
 
-                 $correct = $code == $sms['code'];
 
-                 if (!$correct) {
 
-                     $sms->times = $sms->times + 1;
 
-                     $sms->save();
 
-                     return false;
 
-                 } else {
 
-                     $result = Hook::listen('sms_check', $sms, null, true);
 
-                     return $result;
 
-                 }
 
-             } else {
 
-                 // 过期则清空该手机验证码
 
-                 self::flush($mobile, $event);
 
-                 return false;
 
-             }
 
-         } else {
 
-             return false;
 
-         }
 
-     }
 
-     /**
 
-      * 清空指定手机号验证码
 
-      *
 
-      * @param   int    $mobile 手机号
 
-      * @param   string $event  事件
 
-      * @return  boolean
 
-      */
 
-     public static function flush($mobile, $event = 'default')
 
-     {
 
-         \app\common\model\Sms::
 
-         where(['mobile' => $mobile, 'event' => $event])
 
-             ->delete();
 
-         Hook::listen('sms_flush');
 
-         return true;
 
-     }
 
- }
 
 
  |