find(); if(empty($user)){ return Result(1,"未找到此用户"); } $code = self::createcode(); $info = self::where('mobile',$mobile)->find(); self::startTrans(); try{ if(!empty($info)){ $s = strtotime($info->createtime) + 30 - time();//0.5分钟内不能重复发送 if($s>0){ return Result(0,"请".$s."秒后再尝试发送验证码"); } $info->code = $code; $info->timeout = time() + 600; $info->createtime = date('Y-m-d H:i:s'); $res = $info->save(); }else{ $data = [ 'mobile' => $mobile, 'code' => $code, 'timeout' => time() + 600, 'createtime'=> date('Y-m-d H:i:s') ]; (new self)->replace()->save($data); } $provider = sysconfig('sms.provider'); // 腾讯短信 if(1==$provider){ $sms = new \tencent\Sms; $res = $sms->SendSms($mobile,[$code],771289);//腾讯短信验证码模板 if(isset($res['errmsg']) && $res['errmsg']=='OK'){ self::commit(); return Result(1,"发送成功"); }else{ self::rollback(); return Result(0,"发送失败"); } } // 联通短信 elseif(2==$provider){ $sms = new \ums\Sms; $content = "您的帐号正在进行找回密码操作,本次操作验证码为$code,请在10分钟内使用,如非本人操作,请忽略."; $res = $sms->SendSms($mobile,$content,'2431012229821');//联通短信验证码模板 if(0==$res['result']){ self::commit(); WLog('Sms',json_encode($res,JSON_UNESCAPED_UNICODE)); return Result(1,"短信发送成功",$res); }else{ self::rollback(); return Result(0,$res['description'],$res); } } }catch(\Exception $e){ self::rollback(); return Result(0,$e->getMessage()); } } //检查验证码是否正确 static public function check($mobile,$code) { $where = []; $where[] = ['mobile','=',$mobile]; $where[] = ['code','=',$code]; $where[] = ['timeout','>=',time()]; $info = self::where($where)->find(); //验证码仅使用一次,使用过后就删除 if($info){ $info->delete(); } return !empty($info); } //生成短信验证码 static public function createcode() { return mt_rand(1000,9999); } }