ThinkPHP5聚合数据短信验证码接口实现注册/忘记密码功能

1、前端页面主要代码

这里点击发送验证码按钮通过ajax将相关信息传到后端getSms方法中。

<form class="form-horizontal form-signin" method="post" action="{:url('register/forget')}"><div class="page-header"><h1 class="text-center"><small>Ustate忘记密码small>h1>div><div class="form-group"><label for="mobile" class="sr-only">Mobilelabel><input type="tel" id="mobile" class="form-control" placeholder="手机号" name="mobile" required>div><div class="form-group"><label for="inputMobileCode" class="sr-only">MobileCodelabel><input type="text" id="inputMobileCode" class="form-control" style="display: inline;width: 200px;" name="mobile_code" placeholder="验证码" required><button class="btn btn-info" type="button" id="getyzm" onclick="getCode(document.getElementById('mobile').value)">获取验证码button>div><div class="form-group"><label for="inputPassword" class="sr-only">Passwordlabel><input type="password" id="inputPassword" class="form-control" name="password" placeholder="密码" required>div><div class="form-group"><label for="inputSecondPassword" class="sr-only">SecPasswordlabel><input type="password" id="inputSecondPassword" class="form-control" name="password_confirm" placeholder="确认密码" required>div><a href="{:url('login/index')}" class="button pull-right" style="margin: 0 0 10px 0;">返回登录a><div class="form-group"><button class="btn btn-lg btn-primary btn-block" type="submit">注册button>div>form>

点击发送验证码之后,根据状态码判断是否启动定时器,如果为true则验证码发送成功,定时器启动,如果为false则跳出相关错误信息的弹窗。

function getCode(phone){if(!(/^1[34578]\d{9}$/.test(phone))){alert("手机号码有误,请重填");return ;}$.ajax({type : "post",url : "{:url('getSms')}",data : {'mobile':phone,'type':'forget'},dataType : "json",success:function(result){if(!result.bools){alert(result.msg)}else{showtime(60);
//                    console.log(result.msg);}}})}//显示时间var showtime = function(t){$("#getyzm").attr('disabled',true);for(i=1;i<=t;i++){window.setTimeout(updatetime, i * 1000,i,t);}}//更新时间var updatetime = function(num,t){if(num == t){$("#getyzm").attr('disabled',false);$("#getyzm").text("重新发送");}else{remaintime = t - num;$("#getyzm").text(remaintime + " 秒后重新发送");}

在这里插入图片描述

2、后端主要代码

getSms主要进行一些逻辑性的判断和调用。

//发送验证码public function getSms(){if(!request()->isPost()){$this->error('当前请求非法!');}$data = input('post.');if(!isMobile($data['mobile'])){return json(array('bools'=>false,'msg'=>'手机号码不符合格式'));}//判断是否超过验证码有效期if(Session::has('mobile_code','yzm')){if(time() - session('session_start_time','','yzm') < 60*15){return json(array('bools'=>false,'msg'=>'验证码15分钟内有效'));}else{session('mobile_code',null,'yzm');}}//判断是忘记密码还是注册账户if($data['type'] == 'forget'){$result = AdminModel::hasUser($data['mobile']);if($result['flag']){return $this->sendSms($data['mobile']);}else{return json(array('bools'=>false,'msg'=>'该手机号未注册'));}}if($data['type'] == 'register'){$result = AdminModel::hasUser($data['mobile']);if($result['flag']){return json(array('bools'=>false,'msg'=>$result['msg']));}{return $this->sendSms($data['mobile']);}}}

sendSms为发送验证码的核心方法,sendSms的主要代码在聚合数据给的案例里也有,我这里进行了部分修改。将生成验证码的时间也存储到session中,在上面调用的时候可以对验证码的时效进行严格的控制。

//发送验证码public function sendSms($mobile){$code = rand(1000,9999);session('mobile_code',$code,'yzm');session('session_start_time',time(),'yzm');$params = array('key'   => Config::get('juheSMS')['key'], //您申请的APPKEY'mobile'    => $mobile, //接受短信的用户手机号码'tpl_id'    => Config::get('juheSMS')['tpl_id'], //您申请的短信模板ID,根据实际情况修改'tpl_value' =>'#code#='.$code.'&#company#=蛋叔科技' //您设置的模板变量,根据实际情况修改);$paramstring = http_build_query($params);$content = juheCurl(Config::get('juheSMS')['url'], $paramstring, 1);if($content){$result = json_decode($content, true);$error_code = $result['error_code'];if($error_code == 0){//状态为0,说明短信发送成功return json(array('bools'=>true,'msg'=>'短信发送成功,短信ID:'.$result['result']['sid']));}else{//状态非0,说明失败$msg = $result['reason'];return json(array('bools'=>false,'msg'=>'短信发送失败!('.$error_code.'):'.$msg));}}else{return json(array('bools'=>false,'msg'=>'短信已发送,未收到请重试'));}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部