thinkphp5前后端分离获取微信公众号的openid

大家对openid都或多或少有些了解,在小程序里openid是,通过前端获取code传给后端,而在公众号里,前端没有传code的接口,这就导致了,code必须后端自己取出来,我让前端循环访问的的wucode的接口,如果没有code就继续执行微信的而链接去换取code,如果有code就把code换取openid,头像和昵称;如果有code就执行youcode接口,这是后端判断的

 public function wucode($user_token = '',$yq_openid =''){
        if(!empty($yq_openid)){
            Session::set('yq_openid',$yq_openid);
        }
        if(empty($user_token)){
            $user_token = Session::get('user_token');
            if(empty($user_token)){
                $user_token=time().rand(100000,999999);
            }
        }
        $user_data = Db::table('xc_member')->where(['user_token'=>$user_token])->find();
        //$yq_openid = Session::get('yq_openid');
        if(!empty($user_data) && empty($yq_openid)){
            return  json(['code'=>1000,'data'=>$user_data['uid'],'msg'=>'openid获取成功']);
        }elseif(!empty($user_data) && !empty($yq_openid)){
            $this->redirect('http://yfj.sharexwd.top/dist'); 
        }else{
            Session::set('user_token',$user_token);
            $wechat = Config::get('wechat');
            $url = 'https://open.weixin.qq.com/connect/oauth2/authorize';
                $url .= '?appid=' . $wechat['appid'];
                $url .= '&redirect_uri=' . urlencode('http://yfj.sharexwd.top/index/login/youcode');
                $url .= '&response_type=code';
                $url .= '&scope=snsapi_userinfo';
                $url .= '&state=' . rand(10,99);
                $url .= '#wechat_redirect';
            $this->redirect($url);
        }
    }

    public function youcode($code = ''){
        $wechat = Config::get('wechat');
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token';
        $url .= '?appid=' . $wechat['appid'];
        $url .= '&secret=' . $wechat['appsecret'];
        $url .= '&code=' . $code;
        $url .= '&grant_type=authorization_code';
        $result = file_get_contents($url);
        $result = json_decode($result, true);
        if (isset($result['errcode'])) {
            $this->error('失效的参数,请重新授权');
        }
        //通过access_token和openid获取用户信息
        $url = 'https://api.weixin.qq.com/sns/userinfo';
        $url .= '?access_token=' . $result['access_token'];
        $url .= '&openid=' . $result['openid'];
        $url .= '&lang=zh_CN';
        $result = file_get_contents($url);
        $result = json_decode($result, true);
        if (isset($result['errcode'])) {
            $this->error('失效的参数,请重新授权');
        }
        $data = [
            'openid'=>$result['openid'],
            'username'=>$result['nickname'],
            'headimage'=>$result['headimgurl']
        ];
        $user_token = Session::get('user_token');
        //查询对应的openid是否已经有了
        $user_data = Db::table('xc_member')->where(['uid'=>$result['openid']])->find();
        if($user_data){
            Db::table('xc_member')->where(['uid'=>$result['openid']])->update(['user_token'=>$user_token]);
            $this->redirect('http://yfj.sharexwd.top/dist');  
        }else{
            $dbi=db('xc_member');
            $list=$dbi->insert([
                'uid'=>$result['openid'],
                'nicheng'=>$result['nickname'],
                'touxiang'=>$result['headimgurl'],
                'user_token'=>$user_token
            ]);
            //绑定上级
            $yq_openid = Session::get('yq_openid');
            Session::set('yq_openid',null);
            if(!empty($yq_openid)){
          //这里写自己的操作
            $this->redirect('http://yfj.sharexwd.top/dist');  
        }  
    }

前端无限循环访问wucode接口就可以获取所有信息

猜你喜欢

转载自blog.csdn.net/qq_41381202/article/details/81217035
今日推荐