微信小程序授权登录

  最近做微信小程序,需要用户授权登录和获取微信绑定的手机号。

  首先我是个渣渣,看微信文档理解不了人家的逻辑,所以。。。我觉得微信小程序的文档写的简直是一坨粑粑,好了吐槽完毕,进入正文

  首先这个流程是怎么样的呢?他这个流程图还是很ok的  

 

简单来说就是通过wx.log方法获取当前的code,用这个code来向微信服务器验证,然后拿到openid和sessionkey,然后在用openid来获得授权,嘛,我是后端,没写过前端,所以,不晓得怎么获取code,我们接着说 后台怎么获得授权吧,就这样子

'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';

我们通过访问人家的接口,获取数据嘛,最简单了,来看地址的参数 appid和secret都是成为开发者就能获取到的,还要个code就是前段传过来的。上代码

 public function openid(){
        $code= input('code');
        $appid = '*************';
        $secret = '************';  //secret
        if (!$code) {
            return json(array('code'=>"0",'msg'=>'缺少code参数!'));
        }
        if (!$appid || !$secret) {
            return json(array('code'=>"0",'msg'=>'参数错误!'));
        }
        $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
        function getcurl($url){
            $ch = curl_init();
            curl_setopt ($ch,CURLOPT_URL,$url);
            curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt ($ch,CURLOPT_TIMEOUT,30);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 设置是否检查服务器端的证书
            $content=curl_exec($ch); //获取结果
            $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE );
            if($status==404)
            {
                return  "";
            }
            curl_close($ch);
            return $content;
        }
        
        //code换取openid
        $res= getcurl($url);

        return json(array('code'=>"0",'msg'=>'获取成功!','data'=>json_decode($res)));
    }

然后前段就可以获取到代表用户的openid和sessionkey了,然后就是我们需要授权下,

//授权登录接口
    public function authlogin(){
       
        $openid = input('openid');
        if (!$openid) {
            return json(array('code'=>"1",'msg'=>'授权失败!'));
        }
        $con = array();
        $con['wxid']=trim($openid);
       
        $uid = db('user')->where($con)->value('id'); //查询是否有openid
        if ($uid) { //如果有openid
           
            $userinfo = db('user')->where('id='.$uid)->find(); //查询wxid是否为0

            $err = array(); //用来存放查询出来的用户id,昵称和头像
            $err['id'] = $uid;
            $err['nickname'] = $userinfo['nname'];
            $err['phono'] = $userinfo['phono'];
            $err['touxiang'] = $userinfo['touxiang'];
    
            return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
        }else{ //如果用户首次登录,就是注册
            $data = array();
            $data['nname'] = input('nname'); //获取用户名
            $data['touxiang'] = input('touxiang'); //头像地址
            $data['phono'] = input('phono'); //手机号
           
            $data['sex'] = input('sex');  //性别
            
            $data['wxid'] = $openid; //openid
            $data['retime'] = time(); //当前时间
 
            if (!$data['wxid']) {
                return json(array('code'=>"1",'msg'=>'授权失败!'));
            }
            $res = db('user')->insertGetId($data);
            if ($res) {
                $err = array();
                $err['id'] = $res;
                $err['nickname'] = urldecode($data['nname']);
                $err['phono'] = urldecode($data['phono']);
                $err['icon'] = $data['touxiang'];
                return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
            }else{
                return json(array('code'=>"1",'msg'=>'授权失败!'));
            }
        }
    }

嗯,大概就这样子

原文地址:https://www.cnblogs.com/cyk2/p/11328634.html