first commit

This commit is contained in:
Your Name
2026-01-19 14:19:22 +08:00
commit fe2d9c1868
4777 changed files with 665503 additions and 0 deletions

185
app/api/logic/SmsLogic.php Normal file
View File

@@ -0,0 +1,185 @@
<?php
namespace app\api\logic;
use app\common\service\{UtilsService};
use app\common\model\decorate\{DecorateHint};
use app\common\enum\notice\NoticeEnum;
use app\common\model\notice\EmailRecord;
use app\common\cache\UserAccountSafeCache;
use app\common\model\user\{User,UserInfo};
use app\common\logic\BaseLogic;
/**
* 短信逻辑
* Class SmsLogic
* @package app\api\logic
*/
class SmsLogic extends BaseLogic
{
/**
* @notes 发送验证码
* @param $params
* @return false|mixed
* @author BD
* @date 2024/9/21 17:29
*/
public static function sendCode($params)
{
try {
$scene = NoticeEnum::getSceneByTag($params['scene']);
if (empty($scene)) {
throw new \Exception('network.parameterAbnormality');//场景值异常
}
$result = event('Notice', [
'scene_id' => $scene,
'params' => [
'mobile' => $params['mobile'],
'country_code' => $params['country_code'],
'code' => mt_rand(100000, 999999),
]
]);
return $result[0];
} catch (\Exception $e) {
self::$error = $e->getMessage();
return false;
}
}
/**
* @notes 发送邮件
* @param $params
* @return false|mixed
* @author BD
* @date 2024/9/21 17:29
*/
public static function sendEmail($params)
{
try {
if(!filter_var($params['email'], FILTER_VALIDATE_EMAIL)){
throw new \Exception('network.parameterAbnormality');//请输入正确的邮箱地址
}
//判断发送频率
$time = time() - 1*60;//1分钟发送一次
$count = EmailRecord::where(['user_id' => $params['user_id']])->where("create_time > $time")->count();
if($count > 0) throw new \Exception('captcha.validTips');//验证码5分钟内有效请勿重复发送
$count = EmailRecord::where(['ip' => request()->ip()])->where("create_time > $time")->count();
if($count > 0) throw new \Exception('captcha.validTips');//验证码5分钟内有效请勿重复发送
$email = DecorateHint::findOrEmpty(18)->toArray();
//多语言替换
$data = UtilsService::get_langs_data($email['langs'],$params['lang']);
$code = mt_rand(100000, 999999);
$content = str_ireplace('{code}', $code, $data['content']);
$result = UtilsService::send_mail($params['email'],$data['text'],$content);
if (!$result) {
throw new \Exception('network.sendFailed');
}
EmailRecord::create([
'user_id' => $params['user_id'],
'email' => $params['email'],
'subject' => $data['text'],
'content' => $content,
'code' => $code,
'ip' => request()->ip(),
]);
return true;
} catch (\Exception $e) {
self::$error = $e->getMessage();
return false;
}
}
/**
* @notes 发送邮件
* @param $params
* @return false|mixed
* @author BD
* @date 2024/9/21 17:29
*/
public static function sendEmailNoLogin($params)
{
try {
//账号安全机制,连续输错后锁定,防止账号密码暴力破解
$userAccountSafeCache = new UserAccountSafeCache();
if (!$userAccountSafeCache->isSafe()) {
throw new \Exception('network.frequentOperation');
//密码连续' . $userAccountSafeCache->count . '次输入错误,请' . $userAccountSafeCache->minute . '分钟后重试
}
if(!filter_var($params['email'], FILTER_VALIDATE_EMAIL)){
$userAccountSafeCache->record();
throw new \Exception('network.parameterAbnormality');//请输入正确的邮箱地址
}
//判断发送频率
$time = time() - 1*60;//1分钟发送一次
$user = User::where(['mobile' => $params['mobile'],'country_code' => $params['country_code']])->findOrEmpty();
if($user->isEmpty()) {
$userAccountSafeCache->record();
throw new \Exception('login.userNoExist');//用户不存在
}
$userInfo = UserInfo::where(['user_id' => $user['id']])->findOrEmpty();
if($userInfo->isEmpty()) {
throw new \Exception('network.parameterAbnormality');
}
if($userInfo['auth_email'] == 0){
$userAccountSafeCache->record();
throw new \Exception('pwd.emailNoExist');//该电子邮箱不存在
}
if($userInfo['email'] != $params['email']){
$userAccountSafeCache->record();
throw new \Exception('auth.emailError');//请输入正确的邮箱地址
}
$count = EmailRecord::where(['user_id' => $user['id']])->where("create_time > $time")->count();
if($count > 0){
throw new \Exception('captcha.validTips');//验证码5分钟内有效请勿重复发送
}
$count = EmailRecord::where(['ip' => request()->ip()])->where("create_time > $time")->count();
if($count > 0){
throw new \Exception('captcha.validTips');//验证码5分钟内有效请勿重复发送
}
$email = DecorateHint::findOrEmpty(22)->toArray();
//多语言替换
$data = UtilsService::get_langs_data($email['langs'],$params['lang']);
$code = mt_rand(100000, 999999);
$content = str_ireplace('{code}', $code, $data['content']);
$result = UtilsService::send_mail($params['email'],$data['text'],$content);
if (!$result) {
throw new \Exception('network.sendFailed');
}
EmailRecord::create([
'user_id' => $user['id'],
'email' => $params['email'],
'subject' => $data['text'],
'content' => $content,
'code' => $code,
'ip' => request()->ip(),
]);
$userAccountSafeCache->relieve();
return true;
} catch (\Exception $e) {
self::$error = $e->getMessage();
return false;
}
}
}