网页授权回调域名
要想实现微信公众号之用户授权,首先要去这里设置一下:
这是我的回调域名(不要写http)
网页授权的两种scope,文档里说有snsapi_base与snsapi_userinfo两种,而经过实测,好像并不是这样,这俩玩意好像都能获取用户信息。蛋两者应该还是有区别的,正常来说,用snsapi_base是静默授权,用户感知不到,而snsapi_userinfo是要用户点击确认授权的(我用的snsapi_userinfo)。
微信网页授权是通过OAuth2.0机制实现的
用户同意授权后公众号可以获取一个网页授权特有的接口调用凭证,也就是access_token,准确来说应该是“网页授权access_token”,与之前我写的微信开发之access_token不是一个东西(其他微信的接口,均需要调用获取access_token的接口,这是基础支持)
关于UnionID
如果有需求,可以通过UnionID实现在多个公众号下统一用户账号的操作。因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的,一句话,区分用户的唯一性。
下面上干货
第一步:用户同意授权,获取code(其实就是引导用户打开这个页面)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若应用授权作用域是userinfo,在这里出来以一个授权页面。header()函数跳到url,跳转回调redirect_uri,此处自己写一个方法接受回调
redirect_uri : 授权后重定向的回调链接地址,也就是授权后跳回到哪个页面,规定用 urlencode 对链接进行处理
$redirect_uri='http://www.laravel.com/wechat/code';
code作为换取access_token的票据,每次用户授权带上的code将不一样,所以只能使用一次,5分钟未被使用自动过期。
第二步:通过code换取网页授权access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
注意,换取的是网页授权的access_token.
由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
这里与文档上说的不一样,snsapi_userinfo也可以获取网页授权access_token与openid
第三步:无需刷新,直接获取用户基本信息
https://api.weixin.qq.com/sns/oauth2/refresh_token?
appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN