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