530 lines
14 KiB
PHP
530 lines
14 KiB
PHP
<?php namespace App\Http\Controllers;
|
|
|
|
use App\Services\AptchaVerifier;
|
|
use App\Utils\IP;
|
|
use App\Jobs\CheckMobile;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Message;
|
|
use App\Utils\Str;
|
|
use App\Utils\Messenger;
|
|
use App\Http\Requests;
|
|
use App\Models\Paas;
|
|
use App\Repositories\Eloquent\SmsRepository as Sms;
|
|
use App\Contracts\SmsContract;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class SmsController extends Controller
|
|
{
|
|
|
|
/**
|
|
* @var Sms
|
|
*/
|
|
protected $sms;
|
|
protected $smsCon;
|
|
/**
|
|
* SmsController constructor.
|
|
* @param Sms $sms
|
|
*/
|
|
public function __construct(Sms $sms, SmsContract $smsCon)
|
|
{
|
|
$this->sms = $sms;
|
|
$this->smsCon = $smsCon;
|
|
}
|
|
|
|
|
|
//发送注册验证码
|
|
public function sendResetCode(Request $request){
|
|
$mobile = $request->input('mobile');
|
|
|
|
if(strlen($mobile) == 11){
|
|
// $result = $this->checkMobile($mobile);
|
|
// if(!$result){
|
|
// return $this->failure('手机号无效!');
|
|
// }
|
|
}
|
|
|
|
$ip = IP::getip();
|
|
//限制请求次数
|
|
$key = $mobile.'sendResetCode';
|
|
$is_request = Redis::get($key);
|
|
if($is_request){
|
|
return $this->failure('请求频率过快');
|
|
}
|
|
Redis::setex($key, 60, 1);
|
|
|
|
if(false){
|
|
//todo 是否为友福用户
|
|
return $this->failure('手机号不未注册友福!');
|
|
}
|
|
|
|
|
|
$result = $this->sendCode($mobile, 'reset');
|
|
return $result;
|
|
}
|
|
|
|
/** 发送重置验证码 */
|
|
public function sendRegisterCode(Request $request){
|
|
$mobile = $request->input('mobile');
|
|
if(false){
|
|
//todo 是否已注册友福用户
|
|
return $this->failure('手机号不未注册友福!');
|
|
}
|
|
|
|
$result = $this->sendCode($mobile, 'register');
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 登录验证码
|
|
*/
|
|
public function sendLoginCode(Request $request){
|
|
$mobile = $request->input('mobile');
|
|
if(false){
|
|
//todo 是否已注册友福用户
|
|
return $this->failure('手机号未注册友福!');
|
|
}
|
|
if(strlen($mobile) != 11){
|
|
return $this->failure('手机号码格式错误');
|
|
}
|
|
// $result = $this->sendCode($mobile, 'login');
|
|
if (env('APP_ENV') == 'production') {
|
|
$result = $this->smsCon->sendCode($mobile, 'login');
|
|
if (empty($result)) return $this->failure('验证码发送失败,请稍后再试');
|
|
if ($result && is_array($result) && $result['code']) return $this->failure($result['msg']);
|
|
}else{
|
|
$result = $this->sendCode($mobile, 'login');
|
|
}
|
|
|
|
return $this->success('ok');
|
|
}
|
|
|
|
public function sendOfficialRegisterCode(Request $request){
|
|
$mobile = $request->input('mobile');
|
|
if(strlen($mobile) == 11){
|
|
// $result = $this->checkMobile($mobile);
|
|
// if(!$result){
|
|
// return $this->failure('手机号无效!');
|
|
// }
|
|
}
|
|
$ip = IP::getip();
|
|
//限制请求次数
|
|
$key = $mobile.'sendOfficialRegisterCode';
|
|
$is_request = Redis::get($key);
|
|
if($is_request){
|
|
return $this->failure('请求频率过快');
|
|
}
|
|
Redis::setex($key, 60, 1);
|
|
|
|
|
|
|
|
if(false){
|
|
//todo 是否已注册友福用户
|
|
return $this->failure('手机号不未注册友福!');
|
|
}
|
|
$result = $this->sendCode($mobile, 'register', ['paas'=>$request->input('paas')]);
|
|
return $result;
|
|
}
|
|
|
|
//发送通用验证码
|
|
public function sendGeneralCode(Request $request){
|
|
$mobile = $request->input('mobile');
|
|
if(empty($mobile)){
|
|
if(!\Auth::user()){
|
|
return $this->failure('未登录');
|
|
}
|
|
$mobile = auth()->user()->mobile;
|
|
}
|
|
$result = $this->sendCode($mobile, 'general');
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* do send code
|
|
* @param [type] $mobile mobile number
|
|
* @param [type] $key [description]
|
|
* @param array $params [description]
|
|
* @return [type] [description]
|
|
*/
|
|
|
|
private function sendCode($mobile, $key, $params=[]){
|
|
if(!Str::isMobile($mobile)){
|
|
return $this->failure('手机号无效');
|
|
}
|
|
|
|
$now_time = date('Y-m-d H:i:s');
|
|
$start_time = date('Y-m-d 00:00:00');
|
|
$end_time = date('Y-m-d 23:59:59');
|
|
//一分钟内不能多次发送
|
|
$created_at = Message::where('phone', $mobile)->orderBy('id', 'desc')->value('created_at');
|
|
if ($created_at) {
|
|
$created_at = $created_at->toDateTimeString();
|
|
$result = time() - strtotime($created_at);
|
|
if ($result < 60) {
|
|
return $this->failure('操作频繁,请稍后再试');
|
|
}
|
|
}
|
|
//该手机号是否到达限制
|
|
$count = Message::where('phone', $mobile)->whereBetween('created_at', [$start_time, $end_time])->count();
|
|
if ($count > 50) {
|
|
return $this->failure('短信发送失败, 短信服务次数限制');
|
|
}
|
|
$this->sms->create([
|
|
'phone' => $mobile,
|
|
'message' => [$key, $params],
|
|
'ip' => request()->ip(),
|
|
'confirmed' => 0
|
|
]);
|
|
|
|
|
|
return $this->success('短信已发送');
|
|
}
|
|
|
|
/**
|
|
* 所有短信的发送记录
|
|
*/
|
|
public function messages()
|
|
{
|
|
|
|
$list = $this->sms->list();
|
|
return $this->success('message lists', $list);
|
|
}
|
|
|
|
//发送普通消息
|
|
function sentMessage($mobile, $message){
|
|
$this->model->create([
|
|
'phone'=>$mobile,
|
|
'message'=>$message,
|
|
'confirmed' => 1,
|
|
'ip' => request()?request()->ip():'127.0.0.1',
|
|
]);
|
|
Messenger::sendSMS($mobile, $message);
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* 检查是否合法
|
|
* 1. 正常返回false
|
|
* 2. 失败返回原因
|
|
*
|
|
* todo:
|
|
* 1. 只有最近, 旧的失效
|
|
*/
|
|
function check($mobile, $code){
|
|
if(!$code){
|
|
return '请填写验证码';
|
|
}
|
|
|
|
//测试用万能验证码
|
|
// if(/*(config('app.testing') && $code=='999999999')*/ $code=='999999999' || $mobile=='13800138000'){
|
|
// Message::where('phone', $mobile)->update(['confirmed'=>1]);
|
|
// return false;
|
|
// }
|
|
|
|
$record = Message::where(['phone'=>$mobile, 'code'=>$code])/*->orderBy('id', 'desc')*/->first();
|
|
|
|
if(empty($record)){
|
|
return '验证码有误';
|
|
}
|
|
|
|
if($record->created_at->timestamp < (time()-10*60)){
|
|
return '验证码过期';
|
|
}
|
|
|
|
if($record->confirmed){
|
|
return '验证码已使用';
|
|
}
|
|
|
|
Message::where('id', $record->id)->update(['confirmed'=>1]);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
public function getIdiom(){
|
|
$idiom_config = [
|
|
"久负盛名",
|
|
"鱼米之乡",
|
|
"星罗棋布",
|
|
"前车之鉴",
|
|
"莫名其妙",
|
|
"沆瀣一气",
|
|
"家喻户晓",
|
|
"权宜之计",
|
|
"百发百中",
|
|
"风驰电掣",
|
|
"刚正不阿",
|
|
"五彩缤纷",
|
|
"登峰造极",
|
|
"刀山火海",
|
|
"锦绣前程",
|
|
"安然无恙",
|
|
"明知故问",
|
|
"重见天日",
|
|
"大智若愚",
|
|
"水乳交融",
|
|
"心猿意马",
|
|
"名落孙山",
|
|
"鸡飞狗跳",
|
|
"春暖花开",
|
|
"目不转睛",
|
|
"衣锦还乡",
|
|
"守株待兔",
|
|
"风雨同舟",
|
|
"七嘴八舌",
|
|
"鹰击长空",
|
|
"胸有成竹",
|
|
"山清水秀",
|
|
"千方百计",
|
|
"锦上添花",
|
|
"耳濡目染",
|
|
"如火如荼",
|
|
"日新月异",
|
|
"纸上谈兵",
|
|
"珠光宝气",
|
|
"大海捞针",
|
|
"珠联璧合",
|
|
"谈笑风生",
|
|
"花花公子",
|
|
"雪上加霜",
|
|
"纸醉金迷",
|
|
"杯弓蛇影",
|
|
"赤子之心",
|
|
"鹤立鸡群",
|
|
"雷霆万钧",
|
|
"画蛇添足",
|
|
"弄巧成拙",
|
|
"金玉满堂",
|
|
"百里挑一",
|
|
"翻山越岭",
|
|
"江山如画",
|
|
"呆若木鸡",
|
|
"苦心孤诣",
|
|
"张牙舞爪",
|
|
"坐井观天",
|
|
"井底之蛙",
|
|
"苦心积虑",
|
|
"涸辙之鲋",
|
|
"凤毛麟角",
|
|
"涓滴不漏",
|
|
"拔苗助长",
|
|
"欲盖弥彰",
|
|
"闭门造车",
|
|
"画龙点睛",
|
|
"鹤发童颜",
|
|
"虚与委蛇",
|
|
"相濡以沫",
|
|
"眉飞色舞",
|
|
"心有灵犀",
|
|
"临渴掘井",
|
|
"弱不禁风",
|
|
"百折不挠",
|
|
"舍生忘死",
|
|
"吃里扒外",
|
|
"指鹿为马",
|
|
"以逸待劳",
|
|
"废寝忘食",
|
|
"投笔从戎",
|
|
"顺水推舟",
|
|
"谁为情种",
|
|
"有口无心",
|
|
"杀鸡取卵",
|
|
"背水一战",
|
|
"衣食父母",
|
|
"一石二鸟",
|
|
"入木三分",
|
|
"以卵击石",
|
|
"一箭双雕",
|
|
"五光十色",
|
|
"一身是胆",
|
|
"一视同仁",
|
|
"瓜田李下",
|
|
"苦海无边",
|
|
"白云苍狗",
|
|
"白头偕老",
|
|
"骑虎难下",
|
|
"拔刀相助",
|
|
"东山再起",
|
|
"一败涂地",
|
|
"遗臭万年",
|
|
"鸡犬不宁",
|
|
"三长两短",
|
|
"一诺千金",
|
|
"九牛一毛",
|
|
"一曝十寒",
|
|
"朝三暮四",
|
|
"一鼓作气",
|
|
"一败涂地",
|
|
"两败俱伤",
|
|
"一丝不苟",
|
|
"一举两得",
|
|
"有口难言",
|
|
"一言为定",
|
|
"不偏不倚",
|
|
"无与伦比",
|
|
"千军万马",
|
|
"熟能生巧",
|
|
"白马王子",
|
|
"一无是处",
|
|
"一日千里",
|
|
"自相矛盾",
|
|
"人山人海",
|
|
"一波三折",
|
|
"一年四季",
|
|
"三人成虎",
|
|
"二八佳人",
|
|
"百折不挠",
|
|
"百发百中",
|
|
"三十而立",
|
|
"一心一意",
|
|
"四分五裂",
|
|
"三生有幸",
|
|
"十全十美",
|
|
"一事无成",
|
|
"一语中的",
|
|
"一泻千里",
|
|
"三更半夜",
|
|
"四通八达",
|
|
"一本正经",
|
|
"六亲不认",
|
|
"一箭双雕",
|
|
"三长两短",
|
|
"百战百胜",
|
|
"万马奔腾",
|
|
"四面楚歌",
|
|
"三顾茅庐",
|
|
"百折不挠",
|
|
"一语成谶",
|
|
"百家争鸣",
|
|
"五彩缤纷",
|
|
"六亲不认",
|
|
"十室九空",
|
|
"三生有幸",
|
|
"百折不挠",
|
|
"四面楚歌",
|
|
"五光十色",
|
|
"百花齐放",
|
|
"六道轮回",
|
|
"七上八下",
|
|
"八仙过海",
|
|
"九死一生",
|
|
"十拿九稳",
|
|
"百折不挠",
|
|
"千载难逢",
|
|
"万紫千红",
|
|
"一鸣惊人",
|
|
"九霄云外",
|
|
"一笑倾城",
|
|
"百里挑一",
|
|
"三生有幸",
|
|
"千山万水",
|
|
"一石二鸟",
|
|
"四面楚歌",
|
|
"五光十色",
|
|
"六亲不认",
|
|
"七嘴八舌",
|
|
"风和日丽",
|
|
"笑逐颜开",
|
|
"急功近利",
|
|
"悠然自得",
|
|
"无所作为",
|
|
"坐井观天",
|
|
"孤芳自赏",
|
|
"开门见山",
|
|
"百折不挠",
|
|
"独具匠心",
|
|
"百发百中",
|
|
"百花齐放",
|
|
"口若悬河",
|
|
"纸上谈兵",
|
|
"水到渠成",
|
|
"随波逐流",
|
|
"春风得意",
|
|
"鞭长莫及",
|
|
"青出于蓝",
|
|
"纸包不住",
|
|
"文质彬彬",
|
|
"望洋兴叹",
|
|
"人云亦云",
|
|
"秋高气爽",
|
|
"心有灵犀",
|
|
"言而无信",
|
|
"欣欣向荣",
|
|
"望穿秋水",
|
|
"水深火热",
|
|
"心领神会",
|
|
"草木皆兵",
|
|
"笨鸟先飞",
|
|
"井底之蛙",
|
|
"见仁见智",
|
|
"粉墨登场",
|
|
"开宗明义",
|
|
"形影不离",
|
|
"言简意赅",
|
|
"跳梁小丑",
|
|
"形影相吊",
|
|
"栩栩如生",
|
|
"言过其实",
|
|
"如鱼得水",
|
|
"涛声依旧",
|
|
"珠光宝气",
|
|
"锦上添花",
|
|
"锦绣前程",
|
|
"水滴石穿",
|
|
"涸辙之鲋",
|
|
"秀外慧中",
|
|
"枝繁叶茂",
|
|
"心照不宣",
|
|
"相辅相成",
|
|
"心悦诚服",
|
|
"心平气和",
|
|
"相见恨晚",
|
|
"莺飞草长",
|
|
"相得益彰",
|
|
"草木皆兵",
|
|
"鹤立鸡群",
|
|
"守株待兔",
|
|
"柳暗花明",
|
|
"龙马精神",
|
|
"弱不禁风",
|
|
"口是心非",
|
|
"哑口无言",
|
|
"势如破竹",
|
|
"抱薪救火",
|
|
"守口如瓶",
|
|
"百家争鸣",
|
|
"刚柔并济",
|
|
"纸短情长",
|
|
"贵而贱目",
|
|
"掩耳盗铃",
|
|
"欲速不达",
|
|
"勇往直前",
|
|
"山穷水尽",
|
|
"沧海桑田",
|
|
"龙潭虎穴",
|
|
"鱼贯而入",
|
|
"星罗棋布",
|
|
"雷霆万钧",
|
|
"花好月圆",
|
|
"雪上加霜",
|
|
"马到成功",
|
|
"金玉满堂",
|
|
"鸟语花香",
|
|
"一波三折",
|
|
"柳暗花明",
|
|
"天长地久",
|
|
"水落石出",
|
|
"山穷水尽",
|
|
"强弩之末",
|
|
"金蝉脱壳",
|
|
"狐假虎威",
|
|
"狼狈为奸",
|
|
"虎头蛇尾",
|
|
"龙飞凤舞",
|
|
];
|
|
// 从数组中随机取一个成语
|
|
$idiom = $idiom_config[array_rand($idiom_config)];
|
|
return $this->success('ok',$idiom);
|
|
}
|
|
}
|