|
|
@ -563,6 +563,8 @@ eof; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//短信验证码 10 分钟内有效 |
|
|
|
//短信验证码 10 分钟内有效 |
|
|
|
|
|
|
|
//弃用:@2025-04-24 |
|
|
|
|
|
|
|
//用方法getTodaySmsCode代替,验证码当天有效(00:00:01 - 23:59:59) |
|
|
|
protected function getMySmsCode($cellphone) { |
|
|
|
protected function getMySmsCode($cellphone) { |
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) { |
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) { |
|
|
|
session_start(); |
|
|
|
session_start(); |
|
|
@ -584,30 +586,32 @@ eof; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//保存当天最新发送过的验证码 |
|
|
|
//保存当天最新发送过的验证码 |
|
|
|
|
|
|
|
//改为根据手机号码保存到缓存文件 |
|
|
|
protected function saveTodaySmsCode($cellphone, $sms_code) { |
|
|
|
protected function saveTodaySmsCode($cellphone, $sms_code) { |
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) { |
|
|
|
$cacheKey = $cellphone; |
|
|
|
session_start(); |
|
|
|
$cacheDir = 'sms'; |
|
|
|
} |
|
|
|
$date = date('Ymd'); |
|
|
|
|
|
|
|
$time = time(); |
|
|
|
$_SESSION['randSmsCode_today'] = $sms_code; |
|
|
|
$data = compact('sms_code', 'date', 'time'); |
|
|
|
$_SESSION['randSmsCode_created_date'] = date('Ymd'); |
|
|
|
return Common::saveCacheToFile($cacheKey, $data, $cacheDir); |
|
|
|
$_SESSION['smsCodePhone_today'] = $cellphone; //保存发送验证码的手机号码,便于在登录、注册的时候验证 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $sms_code; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//获取当天最新发送过的验证码 |
|
|
|
//获取当天最新发送过的验证码 |
|
|
|
protected function getTodaySmsCode($cellphone) { |
|
|
|
protected function getTodaySmsCode($cellphone) { |
|
|
|
if(session_status() !== PHP_SESSION_ACTIVE) { |
|
|
|
$cacheKey = $cellphone; |
|
|
|
session_start(); |
|
|
|
$cacheDir = 'sms'; |
|
|
|
|
|
|
|
$cacheTime = 86400; |
|
|
|
|
|
|
|
$cacheData = Common::getCacheFromFile($cacheKey, $cacheTime, $cacheDir); |
|
|
|
|
|
|
|
if (empty($cacheData)) { |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$sms_code = !empty($_SESSION['randSmsCode_today']) ? $_SESSION['randSmsCode_today'] : 0; |
|
|
|
$sms_code = $cacheData['sms_code']; |
|
|
|
$sms_date = !empty($_SESSION['randSmsCode_created_date']) ? $_SESSION['randSmsCode_created_date'] : 0; |
|
|
|
$sms_date = $cacheData['date']; |
|
|
|
$today = = date('Ymd'); |
|
|
|
$sms_created = $cacheData['time']; |
|
|
|
$codeSentPhoneNumber = !empty($_SESSION['smsCodePhone_today']) ? $_SESSION['smsCodePhone_today'] : 0; |
|
|
|
$today = date('Ymd'); |
|
|
|
|
|
|
|
|
|
|
|
if ($today == $sms_date && $cellphone == $codeSentPhoneNumber && !empty($sms_code)) { |
|
|
|
if ($today == $sms_date && !empty($sms_code)) { |
|
|
|
return $sms_code; |
|
|
|
return $sms_code; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -615,10 +619,10 @@ eof; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//获取短信验证码 |
|
|
|
//获取短信验证码 |
|
|
|
//TODO: 调整发送逻辑,发送前,先查询当天发送详情,从而限制一个手机号码每天最多2次发送验证码的机会 |
|
|
|
//@2025-04-24 调整发送逻辑,发送前,先查询当天发送详情,从而限制一个手机号码每天最多2次发送验证码的机会 |
|
|
|
//查询结果判断 |
|
|
|
//查询结果判断 |
|
|
|
//rescode == 2 当天发送过,但是失败了,直接返回验证码,帮用户填上 |
|
|
|
//rescode == 2 当天发送过,但是失败了,直接返回验证码,帮用户填上 |
|
|
|
//rescode == 3 当天发送过,且成功了,需要用户自己填(考虑用户删除了验证码短信,可在距离上一次发送超1小时后当天再给用户一次获取验证码的机会) |
|
|
|
//rescode == 3 当天发送过,且成功了,需要用户自己填(暂不实现:考虑用户删除了验证码短信,可在距离上一次发送超1小时后当天再给用户一次获取验证码的机会) |
|
|
|
//rescode == 0 当天没发送过,则发送验证码 |
|
|
|
//rescode == 0 当天没发送过,则发送验证码 |
|
|
|
public function actionSendsmscode() { |
|
|
|
public function actionSendsmscode() { |
|
|
|
$ip = $this->getUserIp(); |
|
|
|
$ip = $this->getUserIp(); |
|
|
@ -637,6 +641,7 @@ eof; |
|
|
|
$rescode = -1; //短信发送详情结果:-1 默认值,0 - 未发送,1 - 发送中,2 - 发送失败,3 - 发送成功 |
|
|
|
$rescode = -1; //短信发送详情结果:-1 默认值,0 - 未发送,1 - 发送中,2 - 发送失败,3 - 发送成功 |
|
|
|
$msg = ''; |
|
|
|
$msg = ''; |
|
|
|
$err = ''; |
|
|
|
$err = ''; |
|
|
|
|
|
|
|
$autofill = ''; //自动帮用户填上验证码 |
|
|
|
|
|
|
|
|
|
|
|
$postParams = $this->post(); |
|
|
|
$postParams = $this->post(); |
|
|
|
if (!empty($postParams)) { |
|
|
|
if (!empty($postParams)) { |
|
|
@ -666,7 +671,6 @@ eof; |
|
|
|
|
|
|
|
|
|
|
|
$params = array( |
|
|
|
$params = array( |
|
|
|
'phoneNumber' => $cellphone, |
|
|
|
'phoneNumber' => $cellphone, |
|
|
|
'codeNumber' => $sms_code, |
|
|
|
|
|
|
|
'action' => $action, |
|
|
|
'action' => $action, |
|
|
|
); |
|
|
|
); |
|
|
|
$params['sign'] = $this->sign($params, FSC::$app['config']['service_3rd_api_key']); |
|
|
|
$params['sign'] = $this->sign($params, FSC::$app['config']['service_3rd_api_key']); |
|
|
@ -678,10 +682,28 @@ eof; |
|
|
|
|
|
|
|
|
|
|
|
//发送之前先查询当天该手机号码的发送情况,并根据发送结果来决定是否发送验证码短信 |
|
|
|
//发送之前先查询当天该手机号码的发送情况,并根据发送结果来决定是否发送验证码短信 |
|
|
|
$api_query = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/querysendresult/'; |
|
|
|
$api_query = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/querysendresult/'; |
|
|
|
$res_query = $this->request($api, json_encode($params), $timeout, $pc, $headers); |
|
|
|
$res_query = $this->request($api_query, json_encode($params), $timeout, $pc, $headers); |
|
|
|
|
|
|
|
if (!empty($res_query) && $res_query['status'] == 200) { |
|
|
|
|
|
|
|
$resData = json_decode($res_query['result'], true); |
|
|
|
//发送短信验证码 |
|
|
|
if ($resData['code'] == 1) { |
|
|
|
|
|
|
|
if ($resData['rescode'] == 2) { |
|
|
|
|
|
|
|
$code = 1; |
|
|
|
|
|
|
|
$autofill = $sms_code; |
|
|
|
|
|
|
|
$msg = '验证码发送失败了,已帮你自动填上'; |
|
|
|
|
|
|
|
}else if ($resData['rescode'] == 3) { |
|
|
|
|
|
|
|
$code = 1; |
|
|
|
|
|
|
|
$msg = '今天已发送的验证码依然有效,请直接使用'; |
|
|
|
|
|
|
|
}else if ($resData['rescode'] == 1) { |
|
|
|
|
|
|
|
$code = 1; |
|
|
|
|
|
|
|
$msg = '验证码发送中,请耐心等待并查收手机短信'; |
|
|
|
|
|
|
|
}else if ($resData['rescode'] == 0) { |
|
|
|
|
|
|
|
//当天还没发送过,则发送短信验证码 |
|
|
|
|
|
|
|
$params = array( |
|
|
|
|
|
|
|
'phoneNumber' => $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/'; |
|
|
|
$api = FSC::$app['config']['service_3rd_api_domain'] . '/aliyun/sendverifycode/'; |
|
|
|
$res = $this->request($api, json_encode($params), $timeout, $pc, $headers); |
|
|
|
$res = $this->request($api, json_encode($params), $timeout, $pc, $headers); |
|
|
|
|
|
|
|
|
|
|
@ -689,7 +711,7 @@ eof; |
|
|
|
$resData = json_decode($res['result'], true); |
|
|
|
$resData = json_decode($res['result'], true); |
|
|
|
if ($resData['code'] == 1) { |
|
|
|
if ($resData['code'] == 1) { |
|
|
|
$code = 1; |
|
|
|
$code = 1; |
|
|
|
$msg = '短信验证码已成功发送'; |
|
|
|
$msg = '短信验证码已发送,当天有效'; |
|
|
|
}else { |
|
|
|
}else { |
|
|
|
$err = '短信验证码发送失败:' . $resData['message']; |
|
|
|
$err = '短信验证码发送失败:' . $resData['message']; |
|
|
|
} |
|
|
|
} |
|
|
@ -697,9 +719,17 @@ eof; |
|
|
|
$err = '短信验证码发送失败,请稍后再试'; |
|
|
|
$err = '短信验证码发送失败,请稍后再试'; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
|
|
$err = '短信发送详情获取失败:' . $resData['message']; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
|
|
$err = '系统繁忙,请稍后再试'; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return $this->renderJson(compact('code', 'msg', 'err')); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $this->renderJson(compact('code', 'msg', 'err', 'autofill')); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//新用户注册 |
|
|
|
//新用户注册 |
|
|
@ -739,7 +769,7 @@ eof; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//验证短信验证码是否正确 |
|
|
|
//验证短信验证码是否正确 |
|
|
|
$mySmsCode = $this->getMySmsCode($cellphone); |
|
|
|
$mySmsCode = $this->getTodaySmsCode($cellphone); |
|
|
|
if (empty($mySmsCode) || $mySmsCode != $sms_code) { |
|
|
|
if (empty($mySmsCode) || $mySmsCode != $sms_code) { |
|
|
|
$err = "{$sms_code} 验证码已过期或错误,请检查是否输入正确"; |
|
|
|
$err = "{$sms_code} 验证码已过期或错误,请检查是否输入正确"; |
|
|
|
} |
|
|
|
} |
|
|
@ -809,7 +839,7 @@ eof; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//验证短信验证码是否正确 |
|
|
|
//验证短信验证码是否正确 |
|
|
|
$mySmsCode = $this->getMySmsCode($cellphone); |
|
|
|
$mySmsCode = $this->getTodaySmsCode($cellphone); |
|
|
|
if (empty($mySmsCode) || $mySmsCode != $sms_code) { |
|
|
|
if (empty($mySmsCode) || $mySmsCode != $sms_code) { |
|
|
|
$err = "{$sms_code} 验证码已过期或错误,请检查是否输入正确"; |
|
|
|
$err = "{$sms_code} 验证码已过期或错误,请检查是否输入正确"; |
|
|
|
} |
|
|
|
} |
|
|
|