前言
在微信公众平台开发中,经常会需要获取用户信息。获取用户信息的方法很简单,传入ACCESS_TOKEN和OPENID,直接请求微信给出的接口就可以了。
本文中,参照方倍工作室的分类方法,把access_token分为两种。一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局access_token和授权access_token。
全局access_token
获取全局access_token
传入APPID和APPSECRET,请求微信给出的接口,就可以获取到全局access_token。
1 | https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET |
返回结果:
1 | { |
获取openid
用户关注以及回复消息的时候,均可以获得用户的OpenID。
1 | <xml> |
其中的FromUserName就是OpenID。
获取用户信息
有了access_token和openid,请求如下接口:
1 | https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN |
获取到的用户信息数据格式如下:
1 | { |
授权access_token
微信配置
假设M站的网址为http://wx.voidking.com
,那么在微信公众平台上,JS接口安全域名修改为wx.voidking.com
,网页授权获取用户基本信息修改为wx.voidking.com
。
获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
1 | https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect |
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
获取授权access_token和openid
获取code后,请求接口:
1 | https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code |
返回数据如下:
1 | { |
获取用户信息
获取code时,如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。请求接口如下:
1 | https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN |
返回数据如下:
1 | { |
Node端源码
https://github.com/voidking/nodebase/blob/master/controllers/weixin.js
两种方法的对比
接口
全局access_token获取用户信息接口为https://api.weixin.qq.com/cgi-bin/user/info
。
授权access_token获取用户信息接口为https://api.weixin.qq.com/sns/userinfo
。
返回数据
全局access_token获取用户信息返回数据为:
授权access_token获取用户信息返回数据为:
小结
通过授权access_token无法得知用户是否关注了公众号,必须通过全局access_token。
后记
有问题,看文档。经历了四年发展的微信公众平台,文档已经越来越完善。
书签
微信公众平台开发(76) 获取用户基本信息
http://www.cnblogs.com/txw1958/p/weixin76-user-info.html
微信公众平台开发者文档——获取用户基本信息
http://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html
微信公众平台开发者文档——网页授权获取用户基本信息
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
微信公共平台Node库 API
http://doxmate.cool/node-webot/wechat-api/api.html