介绍
介绍
福哥需要在分享给微信朋友圈的页面里获得访问用户的信息,这个就需要用到微信的用户网页授权功能了,通过用户网页授权功能,我们可以得到访问用户的基本信息,包括用户昵称,用户头像等等
教程
登录
登录微信公众号后台,进入开发 > 基本配置页面
设置开发者密码
注册了微信公众号就会有一个开发者ID(AppID),要使用页面用户授权功能还需要开启开发者密码(AppSecret)
设置IP白名单
有了AppID和AppSecret之后,还需要将我们的服务器IP地址填写到IP白名单里面,否则微信服务器会拒绝我们连接
网页授权域名
为了安全起见,我们还需要设置回调URL的域名,保证只有我们的域名才能使用这个网页授权功能
开发网页授权
网页授权基于OAuth2认证模式,按照OAuth2认证模式对接即可
获取code
拼凑获取code的请求URL,重定向到这个请求URL
AppID:微信公众号的AppID
RedirectUri:回调URL,必须是基于网页授权域名的URL
https://open.weixin.qq.com/connect/oauth2/authorize?appid=[AppID]&redirect_uri=URLEncode([RedirectUri])&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
通过微信服务器验证之后返回到指定回调URL,回调URL会携带code参数
Code:微信服务器分配的code参数
[RedirectUri]?code=[Code]&state=STATE
获取access_token
拿到code参数后,加上增加的AppID和AppSecret就可以去换取openid和access_token数据了
AppID:微信公众号的AppID
AppSecret:微信公众号的AppSecret
Code:微信服务器分配的code参数
https://api.weixin.qq.com/sns/oauth2/access_token?appid=[AppID]&secret=[AppSecret]&code=[Code]&grant_type=authorization_code
返回的JSON数据里包括openid和access_token,这个openid就是授权给我们的用户的ID,而access_token就是临时令牌,通过openid和access_token就可以获取用户的信息了
这里面还包含一个refresh_token,这个用来刷新access_token的令牌后面会说到
注意:每一个用户针对每一个公众号会有一个唯一的openid
{ "access_token":"36_XPDFIuXRkXdfKjlFwF0EM2GFbjQBqdykek-YybjOA7A_S9kyohjMrateFgBD0vxGDzIhcbU6rY-pNYOlewAsIOCeV_gMwqiwRztSlR2p49M", "expires_in":7200, "refresh_token":"36_uovb3Om4SR-1jnA9kRa0cax9Tyw9t407lB0wiqRtUYxzCpdfZCVfH9H04T-NkIOme-SD-67Qud6NfgBxvvfv3FUlXtbIrfNsw_2UXvLFP18", "openid":"owjatjtCyBtlhdcHRwcaSG-STZ2A", "scope":"snsapi_base" }
获取用户信息
拿到openid和access_token后就可以获取授权我们的用户的信息了
AccessToken:临时令牌
OpenID:用户ID(针对当前公众号的)
https://api.weixin.qq.com/sns/userinfo?access_token=[AccessToken]&openid=[OpenID]&lang=zh_CN
获得的信息如下
{ "openid":"owjnyjsCyFtlhdcHMweaSG-SMZ2A", "nickname":"福哥", "sex":1, "language":"zh_CN", "city":"北京", "province":"东城", "country":"中国", "headimgurl":"http:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/Q0j4TwGTfTK17fliafV4oSgE4z4NsX0oZ4D495TooBONCTQsYyxSoDLOpwjz8fn6k3RfGOib8ZibH3OFLiaA7DFk1g\/132", "privilege":[], "unionid":"oNyZVs-1C4NgtKWBGsxlTXiAg-OI" }
刷新access_token
我们拿到的access_token临时令牌的有效时间是7200秒(2小时),过期后需要重新操作一遍
根据OAuth2认证模式规范,微信公众号提供了一个刷新access_token的接口,用来在令牌过期之前刷新一下,从而延长access_token的有效时间
AppID:微信公众号的AppID
RefreshAccessToken:更新令牌专用的临时令牌
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=[AppID]&grant_type=refresh_token&refresh_token=[RefreshAccessToken]
返回的JSON数据和获取access_token时候一样的结构,也包含一个refresh_token,也就是说我们可以在过期时间继续刷新access_token