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); } }