同福

使用微信公众号开发用户网页授权(获取用户信息)功能

介绍

介绍

福哥需要在分享给微信朋友圈的页面里获得访问用户的信息,这个就需要用到微信的用户网页授权功能了,通过用户网页授权功能,我们可以得到访问用户的基本信息,包括用户昵称,用户头像等等

教程

登录

登录微信公众号后台,进入开发 > 基本配置页面

9fa6e5a24cede838.jpg

设置开发者密码

注册了微信公众号就会有一个开发者ID(AppID),要使用页面用户授权功能还需要开启开发者密码(AppSecret)

591d088832b5b148.jpg

设置IP白名单

有了AppID和AppSecret之后,还需要将我们的服务器IP地址填写到IP白名单里面,否则微信服务器会拒绝我们连接

468726e5a61e6262.jpg

网页授权域名

为了安全起见,我们还需要设置回调URL的域名,保证只有我们的域名才能使用这个网页授权功能

ea64c10603a3cafd.jpg

开发网页授权

网页授权基于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