在微信公众号开发中实现微信用户自动登录第三方的功能:json
条件:api
1.公众号必须为微信认证服务号;数组
2.在公众号接口权限->网页帐号 网页受权获取用户基本信息 修改须要OAuth2.0鉴权的域名;微信
关于网页受权的两种scope的区别说明app
以snsapi_base为scope发起的网页受权,静默受权,不弹出受权页面,只能获取微信用户的openid。微信公众平台
以snsapi_userinfo为scope发起的网页受权,弹出受权页面,可经过openid拿到昵称、性别、所在地。而且,即便在未关注的状况下,只要用户受权,也能获取其信息。网站
用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。包括其余微信接口,都是须要该用户(即openid)关注了公众号后,才能调用成功的。url
关于网页受权access_token和普通access_token的区别 spa
在用户赞成受权后获取的access_token是针对于用户的,能够说是微信用户给第三方网站的受权码同样。code
而普通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、4六、6四、9六、132数值可选,0表明640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
unionid 只有在用户将公众号绑定到微信开放平台账号后,才会出现该字段。
到此即可以得到了受权的用户的资料了 至于该用户是否已关注该微信公众平台 须要用户管理类接口中的“获取用户基本信息接口” 去得到。
官网还提供了 刷新access_token的接口 和 检查access_token是否有效的接口,其调用方法与第二三步一致。