From fb4f2d61df9c4ad06caa2d6a0b518f0aaf53a4ec Mon Sep 17 00:00:00 2001 From: filesite Date: Thu, 24 Apr 2025 07:13:16 +0800 Subject: [PATCH] sms code send logic change --- .../tajian/controller/FrontapiController.php | 62 +++++++++++++++++-- themes/tajian/controller/SiteController.php | 14 +++++ www/js/tajian.js | 7 +++ 3 files changed, 77 insertions(+), 6 deletions(-) diff --git a/themes/tajian/controller/FrontapiController.php b/themes/tajian/controller/FrontapiController.php index 2be4e8f..61f0510 100644 --- a/themes/tajian/controller/FrontapiController.php +++ b/themes/tajian/controller/FrontapiController.php @@ -583,7 +583,43 @@ eof; return $rndCode; } + //保存当天最新发送过的验证码 + protected function saveTodaySmsCode($cellphone, $sms_code) { + if(session_status() !== PHP_SESSION_ACTIVE) { + session_start(); + } + + $_SESSION['randSmsCode_today'] = $sms_code; + $_SESSION['randSmsCode_created_date'] = date('Ymd'); + $_SESSION['smsCodePhone_today'] = $cellphone; //保存发送验证码的手机号码,便于在登录、注册的时候验证 + + return $sms_code; + } + + //获取当天最新发送过的验证码 + protected function getTodaySmsCode($cellphone) { + if(session_status() !== PHP_SESSION_ACTIVE) { + session_start(); + } + + $sms_code = !empty($_SESSION['randSmsCode_today']) ? $_SESSION['randSmsCode_today'] : 0; + $sms_date = !empty($_SESSION['randSmsCode_created_date']) ? $_SESSION['randSmsCode_created_date'] : 0; + $today = = date('Ymd'); + $codeSentPhoneNumber = !empty($_SESSION['smsCodePhone_today']) ? $_SESSION['smsCodePhone_today'] : 0; + + if ($today == $sms_date && $cellphone == $codeSentPhoneNumber && !empty($sms_code)) { + return $sms_code; + } + + return false; + } + //获取短信验证码 + //TODO: 调整发送逻辑,发送前,先查询当天发送详情,从而限制一个手机号码每天最多2次发送验证码的机会 + //查询结果判断 + //rescode == 2 当天发送过,但是失败了,直接返回验证码,帮用户填上 + //rescode == 3 当天发送过,且成功了,需要用户自己填(考虑用户删除了验证码短信,可在距离上一次发送超1小时后当天再给用户一次获取验证码的机会) + //rescode == 0 当天没发送过,则发送验证码 public function actionSendsmscode() { $ip = $this->getUserIp(); $check_key = "sendsmscode_{$ip}"; @@ -598,6 +634,7 @@ eof; //返回给视图的变量 $code = 0; + $rescode = -1; //短信发送详情结果:-1 默认值,0 - 未发送,1 - 发送中,2 - 发送失败,3 - 发送成功 $msg = ''; $err = ''; @@ -620,19 +657,32 @@ eof; } - //尝试发送短信验证码 + //获取当天最新发送过的验证码 + $sms_code = $this->getTodaySmsCode($cellphone); + if (empty($sms_code)) { + $sms_code = $this->generateRandSmsCode($cellphone); + $this->saveTodaySmsCode($cellphone, $sms_code); + } + $params = array( 'phoneNumber' => $cellphone, - 'codeNumber' => $this->generateRandSmsCode($cellphone), + 'codeNumber' => $sms_code, 'action' => $action, ); $params['sign'] = $this->sign($params, FSC::$app['config']['service_3rd_api_key']); - - $api = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/sendverifycode/'; $timeout = 30; //api请求超时时长 - $pc = false; - $headers = array("Content-Type: application/json"); //以json格式post数据 + $headers = array("Content-Type: application/json"); + $pc = false; + + + //发送之前先查询当天该手机号码的发送情况,并根据发送结果来决定是否发送验证码短信 + $api_query = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/querysendresult/'; + $res_query = $this->request($api, json_encode($params), $timeout, $pc, $headers); + + + //发送短信验证码 + $api = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/sendverifycode/'; $res = $this->request($api, json_encode($params), $timeout, $pc, $headers); if (!empty($res) && $res['status'] == 200) { diff --git a/themes/tajian/controller/SiteController.php b/themes/tajian/controller/SiteController.php index 89c965f..2841968 100644 --- a/themes/tajian/controller/SiteController.php +++ b/themes/tajian/controller/SiteController.php @@ -9,11 +9,20 @@ require_once __DIR__ . '/../../../plugins/TajianStats.php'; Class SiteController extends Controller { + //TODO: 广告跟踪,通过cookie保存广告参数 + protected function trackAdParameters() { + + } + + //TODO: 增加cookie跟踪同意/不同意选择,确保用户知道cookie跟踪了哪些数据 public function actionIndex() { if (function_exists('mb_strlen') == false) { throw new Exception('Please install php extension php-mbstring first!', 500); } + //只在广告着陆页跟踪广告参数 + $this->trackAdParameters(); + //如果没有开启多用户支持,或者当前用户不为空 if (empty(FSC::$app['config']['multipleUserUriParse']) || !empty(FSC::$app['user_id'])) { if (!empty(FSC::$app['user_id']) && Common::existCurrentUser() == false) { @@ -27,6 +36,11 @@ Class SiteController extends Controller { } } + //TODO: 增加cookie跟踪数据介绍页面 + public function actionCookieinfo() { + + } + //显示当前用户收藏的视频 protected function renderFavVideos() { $loginedUser = Common::getUserFromSession(); diff --git a/www/js/tajian.js b/www/js/tajian.js index f2b03eb..19d4ff6 100644 --- a/www/js/tajian.js +++ b/www/js/tajian.js @@ -218,6 +218,13 @@ if ($('.bt_sms_JS').get(0)) { publicAjax(taJian.apis.sendSmsCode, 'POST', datas, function (data) { if (data.code == 0 && data.err) { alert(data.err); + }else { + //TODO: 根据接口返回的发送结果,区分不同情况 + + //data.rescode == 2, 当天有发送过,但是失败了 + + //data.rescode == 3, 当天有发送过,且成功了 + } }, function (jqXHR, textStatus, errorThrown) { alert('网络请求失败,请重试。');