在微信公众号开发中实现微信用户自动登陆第三方的功能:
条件:
1.公众号必须为微信认证服务号;
2.在公众号接口权限->网页账号 网页授权获取用户基本信息 修改需要OAuth2.0鉴权的域名;
关于网页授权的两种scope的区别说明
以snsapi_base为scope发起的网页授权,静默授权,不弹出授权页面,只能获取微信用户的openid。
以snsapi_userinfo为scope发起的网页授权,弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息。
用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
关于网页授权access_token和普通access_token的区别
在用户同意授权后获取的access_token是针对于用户的,可以说是微信用户给第三方网站的授权码一样。
而普通access_token则类似于公众平台给于第三方网站调用接口的凭借。
根据官网的步骤:
第一步 获取code:
需要第三方网站进行重定向到包装后的授权地址 如下
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxPayConfig::APPID."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=success#wechat_redirect"; header("Location:".$url);
appid 为微信公众平台提供的
redirect_ur 是用户同意授权后进入的页面
scope 为上面所提的两种scope 若是需要微信用户的其他资料需要snsapi_userinfo类型(不管用户是否关注公众号都可以获得资料,可以用来第三方平台的用户资料保留和填充) 若只是希望得到openid则可以使用snsapi_base类型
state 其他携带的参数
第二步 将利用第一步获取的code换取该用户授权的access_token:
$code = $_GET[‘code‘]; $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; //通过get发送 $token_data = file_get_contents($token_url); $token_arr = json_decode($token_data,true);
appid 为微信公众平台提供的APPID
secret 为微信公众平台提供的APPSECRET
code 第一步获取的code
获取到的参数 进行json_decode转化成数组 返回的数据如下
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔
第四步:拉取用户信息(需scope为 snsapi_userinfo)
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $resdata = file_get_contents($url); $data = json_decode($resdata,true);
此处于第二步做法一致
access_token 第二步获取的access_token
openid 第二步获取的openid
获取到的参数 进行json_decode转化成数组 返回的数据如下
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
到此便可以获得了授权的用户的资料了 至于该用户是否已关注该微信公众平台 需要用户管理类接口中的“获取用户基本信息接口” 去获得。
官网还提供了 刷新access_token的接口 和 检查access_token是否有效的接口,其调用方法与第二三步一致。