TP5.0手机号注册 短信宝发送短信验证码

1.后端

 1 public function phone(Request $request)
 2     {
 3         //接收参数
 4         $params = $request->post();
 5         //验证参数
 6         $validate = Loader::validate('Phone');
 7         if(!$validate->scene('phone')->check($params)){
 8             $msg = $validate->getError();
 9             return getJsonData(500,$msg);
10         }
11         //验证码校验  先获取发送的验证码
12         $code = cache('register_code_'.$params['phone']);
13         //用表单输入的验证码做对比
14         if ($code != $params['code']){
15             getJsonData(500,'验证码错误');
16         }
17         //验证成功后将失效 清除缓存的验证码
18         cache('register_code_'.$params['phone'],null);
19         //密码加密存入数据库
20         $params['password'] = md5($params['password']);
21         //添加
22         $result = User::insertUser($params);
23         if (!$result){
24             return getJsonData(500,'注册失败');
25         }else{
26             return getJsonData(200,'注册成功',$result);
27         }
28     }
29 
30     /**
31      * 短信验证码发送接口 短信宝
32      *
33      * @param Request $request
34      * @return \think\response\Json
35      */
36     public function sendCode(Request $request)
37     {
38         //接收参数
39         $params = $request->post();
40         //验证参数
41         $validate = Loader::validate('Phone');
42         if(!$validate->scene('sendcode')->check($params)){
43             $msg = $validate->getError();
44             return getJsonData(500,$msg);
45         }
46         //同一个手机号 一分钟只能发送一次请求
47         $last_time = cache('register_time_'.$params['phone']);//上次发送短信验证码的时间
48         $second_time = time();//当前发送的时间
49         if (time()-$last_time < 60){
50             return getJsonData(500,'发送太频繁');
51         }
52         //发送验证码
53         $code = mt_rand(1000,9999);//验证码
54         //短信内容
55         $content = "【品优购】您的验证码是:{$code},三分钟内有效!";
56         $result = senddxb($params['phone'],$content);
57 
58         if ($result===true){
59             //发送成功后将验证码存到缓存里面
60             cache('register_code_'.$params['phone'],$code,180);
61             //记录发送的时间
62             cache('register_time_'.$params['phone'],time(),180);
63             return getJsonData(200,'短信发送成功',$code);
64         }else{
65             return getJsonData(500,'验证码发送失败');
66         }
67     }

2.封装curl函数短信宝接口

 1  //使用curl函数库发送请求
 2     function curl_request($url, $post=true, $params=[], $https=true)
 3     {
 4         //初始化请求
 5         $ch = curl_init($url);
 6         //默认是get请求。如果是post请求 设置请求方式和请求参数
 7         if($post){
 8             curl_setopt($ch, CURLOPT_POST, true);
 9             curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
10         }
11         //如果是https协议,禁止从服务器验证本地证书
12         if($https){
13             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
14         }
15         //发送请求,获取返回结果
16         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
17         $res = curl_exec($ch);
18         /*if(!$res){
19             $msg = curl_error($ch);
20             dump($msg);die;
21         }*/
22         //关闭请求
23         curl_close($ch);
24         return $res;
25     }
26  //使用curl_request函数调用短信接口发送短信
27     function senddxb($phone, $content)
28     {
29         $statusStr = array(
30             "0" => "短信发送成功",
31             "-1" => "参数不全",
32             "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
33             "30" => "密码错误",
34             "40" => "账号不存在",
35             "41" => "余额不足",
36             "42" => "帐户已过期",
37             "43" => "IP地址限制",
38             "50" => "内容含有敏感词"
39         );
40         $smsapi = "http://api.smsbao.com/";
41         $user = ""; //短信平台帐号
42         $pass = md5(""); //短信平台密码
43         $sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
44         $result =curl_request($sendurl,false,[],true) ;
45         if ($result==0) {
46             //短信调用成功
47             return true;
48         }else{
49             return $statusStr[$result];
50         }
51     }

在前端防止重复注册

 1 <script>
 2     //发送短信验证码
 3     $("#dyMobileButton").click(function () {
 4         var phone = $("#phone").val();//获取手机号
 5         //验证手机号是否为空 是否合法
 6         if (phone==''){
 7             $("#phone").next().html('手机号不能为空');
 8             return false;
 9         }else if (!/^1[3578]\d{9}$/.test(phone)){
10             $("#phone").next().html('手机号不正确');
11             return false;
12         }else {
13             $("#phone").next().html('');
14         }
15 
16         var time = 60;
17         //设置定时器 在时间类 获取验证码按钮不可点击
18         var timer = setInterval(function () {
19             time--;
20             if (time > 0){
21                 //倒计时
22                 $("#dyMobileButton").html('重新发送:'+time+'秒');
23                 //不可点击
24                 $("#dyMobileButton").prop('disabled',true);
25             }else {
26                 //停止倒计时
27                 $("#dyMobileButton").html('发送验证码');
28                 $("#dyMobileButton").prop('disabled',false);
29                 clearInterval(timer);
30             }
31         },1000)
32 
33         //满足条件后发送ajax 请求到后端
34         $.ajax({
35             url:'',
36             type: 'post',
37             data: {
38                 'phone':phone,
39             },
40             dataType: 'json',
41             success:function (res) {
42                 alert(res.msg);return;
43             }
44         })
45     })
46     
47     //注册
48     $("#reg_btn").click(function () {
49         var phone = $("#phone").val();//手机号
50         var code = $("#code").val();//验证码
51         var password = $("#password").val();//密码
52         var repassword = $("#repassword").val();//再次确认密码
53 
54         $.ajax({
55             url:'',//后端地址
56             type:'post',
57             data:{
58                 'phone':phone,
59                 'code':code,
60                 'password':password,
61                 'repassword':repassword,
62             },
63             dataType:'json',
64             success:function (res) {
65                 console.log(res);
66                 if (res.code==200){
67                     location.href='/home/index/index';
68                 }else {
69                     alert(res.msg);
70                 }
71             }
72         })
73 
74     })
75 </script>

实现签到 https://www.cnblogs.com/gj210623/p/15349679.html

实现邮件发送  https://www.cnblogs.com/gj210623/p/15349692.html

posted @ 2021-09-26 20:46  晚夜聆风  阅读(262)  评论(0编辑  收藏  举报