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>