微信 静默 授权登录 获取openid 实现方法

N年前用的微信登录,一直以来都用的显式登录,就是会出现一个页面,给你个确定按钮点击确定授权登录。半年前有朋友来找我,说到静默登录,期间有研究过,现在刚好用到,乘热打铁,给大家讲解下如何使用。

解决方案


//判断是在微信里面打开
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') == true) {           

        //配置参数的数组
        $CONF =  array(
            '__APPID__' =>'wx5fedcbb0e466f727',
            '__SERECT__' =>'470c85e41ffd32861128fb99bc8428a2',
            '__CALL_URL__' =>urlencode('http://***') //当前页地址 注意这里要urlencode()过的地址才成哦
        );

        //没有传递code的情况下,先登录一下
        if(!isset($_GET['code']) || empty($_GET['code'])){

            $getCodeUrl  =  "https://open.weixin.qq.com/connect/oauth2/authorize".
                            "?appid=" . $CONF['__APPID__'] .
                            "&redirect_uri=" . $CONF['__CALL_URL__']  . 
                            "&response_type=code".
                            "&scope=snsapi_base". #!!!scope设置为snsapi_base !!!
                            "&state=1";

            //跳转微信获取code值,去登陆   
            header('Location:' . $getCodeUrl);
            exit;
        }

        $code     		=	trim($_GET['code']);
        //使用code,拼凑链接获取用户openid 
        $getTokenUrl    =  "https://api.weixin.qq.com/sns/oauth2/access_token".
                            "?appid={$CONF['__APPID__']}".
                            "&secret={$CONF['__SERECT__']}".
                            "&code={$code}".
                            "&grant_type=authorization_code";

        //拿到openid              
        $openid 		=	(json_decode(file_get_contents($getTokenUrl),true))['openid'];

    }

官方的解释

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

简单讲就是 把scope设置为snsapi_base就可以使用静默登录了,不过这个生成的token是不能用来获取用户详细信息的,看具体业务应用吧。

防扒网页

版权声明:本文转载自: //blog.csdn.net/weixin_36333654/article/details/52882287

猜你喜欢

转载自blog.csdn.net/zhanjianjiu/article/details/79552746