TP5短信宝发送短信验证码

一、请求发送短信接口

public function sendCode()
    {
        //接收手机号
        $data['phone'] = input('get.phone');
        //判断是否接到手机号
        $validate_res = $this->validate($data,[
            'phone' => 'require|regex:1[3-9]\d{9}',
        ]);

        //手机号格式不正确
        if($validate_res !== true){
            return json(['code'=>400,'msg'=>$validate_res,'data'=>'']);
        }

        //防止多次发送
        if(Cache::has('phone_time_'.$data['phone'])){
            if(time()-Cache::get('phone_time_'.$data['phone']) < 60){
                return json(['code'=>400,'msg'=>'请1分钟后重试','data'=>'']);
            }else{
                //大于60秒 已过期 删除记录的时间
                Cache::rm('phone_time_'.$data['phone']);
            }
        }
        //生成验证码
        $code = mt_rand(1000,9999);
        //发送的信息格式
        $msg = "【健身小程序】您的验证码是{$code},有效时间为30秒.若非本人操作请忽略此消息!";

        //进行发送
        $res = sendMsg($data['phone'],$msg);
        
        //发送失败
        if(!$res){
            return json(['code'=>400,'msg'=>$res,'data'=>'']);
        }
        //将手机号存入缓存 携带生成时间 以及 生成的验证码
        Cache::set('phone_time_'.$data['phone'],time());
        Cache::set('phone_code_'.$data['phone'],$code);
        //设置验证码过期时间 使用的是Cache redis储存方式
        $redis = Cache::store('redis')->handler();
        $redis->expire('phone_code_'.$data['phone'],30);

        //发送成功返回值
        return json(['code'=>200,'msg'=>'发送成功','data'=>$code]);
    }

 

二、登录接口

    public function login()
    {
        //接收登录信息
        $data = input('post.');
        $data = $data['data'];
        $rules = [
            'phone' => 'require',
            'password' => 'require',
            'code' => 'require',
        ];
        $msg = [
            'phone.require' => '手机号不能为空',
            'password.require' => '密码不能为空',
            'code.require' => '验证码不能为空',
        ];
        //进行验证
        $res = $this->validate($data,$rules,$msg);
        //返回错误信息
        if($res !== true){
            return json(['code'=>400,'msg'=>$res,'data'=>'']);
        }
        //查询缓存中是否有验证码
        if(!Cache::has('phone_code_'.$data['phone'])) return json(['code'=>400,'msg'=>'验证码已过期','data'=>'']);
        //从缓存中取出验证码
        $code = Cache::get('phone_code_'.$data['phone']);
        //验证用户输入验证码与手机接收到的验证码是否一致
        if($code != $data['code']){
            return json(['code'=>400,'msg'=>'验证码不一致','data'=>'']);
        }
        unset($data['code']);
        //进行登陆验证
        $log_res = User::where($data)->find();
        //判断登录结果
        if($log_res){
            //登陆成功 获取用户id 生成token
            $user['token'] = Token::getToken($log_res->id);
//            $user['uid'] = $log_res->id;
            return json(['code'=>200,'msg'=>'登陆成功','data'=>$user]);
        }else{
            return json(['code'=>400,'msg'=>'用户或密码错误','data'=>'']);
        }
    }

三、短信宝配置

首先在application/config.php中添加

//短信配置
    'msg' => [
        /*短信宝平台*/
        'smsapi' => 'http://api.smsbao.com/',
        'user' => '',//短信宝平台账号
        'pass' => md5(""),//使用md5加密
    ]

四、在common.php中加入函数 接口方法中发送信息就是调用的此函数

//发送短信
if(!function_exists('sendMsg')){
    //使用curl_request函数调用短信接口发送短信
    function sendMsg($phone, $content)
    {
        //从配置中取出请求地址、账号,密码
        $smsapi = config('msg.smsapi');
        $user = config('msg.user');
        $pass = config('msg.pass');

        //http://api.smsbao.com/sms?u=USERNAME&p=PASSWORD&m=PHONE&c=CONTENT
        $url = $smsapi . 'sms?u=' . $user ."&p=".$pass."&m=".$phone."&c=".urlencode($content);

        //get请求
        $url .= '&mobile=' . $phone . '&content=' . urlencode($content);

        //调用接口数据
        $res = curl_request($url, false, [], true);

        //短信发送失败
        if($res != 0){
            return '短信发送失败';
        }

        //短信发送成功
        return true;
    }
}

 

五、curl请求代码

//curl发送请求(为调用接口而准备的)
if(!function_exists('curl_request'))
{
    //使用curl函数库发送请求
    function curl_request($url, $post=true, $params=[], $https=true)
    {
        //初始化请求
        $ch = curl_init($url);
        //默认是get请求。如果是post请求 设置请求方式和请求参数
        if($post){
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        }
        //如果是https协议,禁止从服务器验证本地证书
        if($https){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        }
        //发送请求,获取返回结果
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $res = curl_exec($ch);

        curl_close($ch);
        return $res;
    }
}

 

六、总结

重点为发送手机验证码的思路,还有走什么流程一定要清楚。可根据以上代码来实现此功能,自己也要理解这个思路,不用短信宝平台也能自己写出来才是真正的掌握!有用的话请给个点赞!谢谢阅读!

上一篇:Java hashCode


下一篇:MySql优化(四)索引优化分析(详细总结)