46 lines
1.2 KiB
PHP
46 lines
1.2 KiB
PHP
|
<?php
|
||
|
declare (strict_types=1);
|
||
|
|
||
|
namespace app\service\util;
|
||
|
|
||
|
use app\config\BusinessCacheKey;
|
||
|
use app\exception\BusinessException;
|
||
|
use think\helper\Str;
|
||
|
|
||
|
/**
|
||
|
* @author canny
|
||
|
* @date 2023/11/20 15:03
|
||
|
**/
|
||
|
class SmsUtil
|
||
|
{
|
||
|
public static function requestLimit($key, $expire, $limitSecond = 60)
|
||
|
{
|
||
|
$ttl = RedisService::getRedisInstance()->ttl($key);
|
||
|
if (!empty($ttl) && $expire - $ttl < $limitSecond) {
|
||
|
throw new BusinessException("请求过于频繁");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function getSmsCode(string $key, int $ttl): string
|
||
|
{
|
||
|
$redis = RedisService::getRedisInstance();
|
||
|
$redis->del($key);
|
||
|
$code = Str::random(6, 1);
|
||
|
$redis->set($key, $code, 'ex', $ttl);
|
||
|
return $code;
|
||
|
}
|
||
|
|
||
|
public static function compareSmsCode(string $codeCacheKey, $code)
|
||
|
{
|
||
|
$redis = RedisService::getRedisInstance();
|
||
|
$cacheCode = $redis->get($codeCacheKey);
|
||
|
if (empty($cacheCode) || $code != $cacheCode) {
|
||
|
throw new BusinessException("验证码错误");
|
||
|
}
|
||
|
$redis->del($codeCacheKey);
|
||
|
}
|
||
|
public static function getSmsKey($mobile): string
|
||
|
{
|
||
|
return BusinessCacheKey::SITE_SMS_CODE['key'] . ":" . $mobile;
|
||
|
}
|
||
|
}
|