微信第三方授权获取UNIONID和用户信息

时间:2021-02-09 05:46:29

微信第三方授权获取UNIONID和用户信息
目的:
通过获取用户授权,取得用户信息.
步骤如下:
一.登陆微信公众平台,点击右上角的用户名称,进入公众号设置菜单.
菜单中包含两个面板,一个是账号详情,一个是功能设置,点击功能设置.面板中有一个网页授权域名选项,点击设置.
微信第三方授权获取UNIONID和用户信息
配置网页授权域名
微信第三方授权获取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 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
该链接中主要注意三个参数:
,APPID 在微信开发者平台>>开发>>基本配置中.
Redirect_uri 授权后重定向的回调链接地址——本地接收数据的接口
Scope 应用授权作用域 用户授权作用域分为两种
[]1]、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
[]2]、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

在用户同意授权后,页面将跳转值redirect_uri所对应的参数所在的地址,同时传递两个值,一个是CODE,一个是STATE.
Code是换取access_token的票据,每次用户授权带上的code均不一样,code只能使用一次,5分钟未使用自动过期.
然后,使用code换取网页授权的access_token,下面为自己封装的一个方法.
微信第三方授权获取UNIONID和用户信息
该方法传入连接之后,将返回结果流.
使用code换取access_token的方法,就是发送一个https请求至微信服务器.
链接的构造如下:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&sec ret=SECRET&code=CODE&grant_type=authorization_code
微信第三方授权获取UNIONID和用户信息
这一步需要用到secret参数,该参数和appid一样,均在基本配置中.
微信第三方授权获取UNIONID和用户信息
拼接整个URL,其中WeChatUtils是自己封装的一个工具类,其中封装了三个参数,以及刚才使用到的方法.
微信第三方授权获取UNIONID和用户信息
WeChatUtils提供的属性:
微信第三方授权获取UNIONID和用户信息
然后获取返回流,获取JSON对象中的unionid值.
微信第三方授权获取UNIONID和用户信息
返回流格式如下:
微信第三方授权获取UNIONID和用户信息
当发生错误时,微信将会返回一个包含错误码的json数据包:
微信第三方授权获取UNIONID和用户信息
根据errcode中的参数可以在开发者文档的接口返回码说明中查找对应的报错信息.

最后一步,拉取用户信息.
如果获取授权时,scope的值snsapi_userinfo,我们就可以发送请求:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN &openid=OPENID&lang=zh_CN
来获取用户信息.
微信第三方授权获取UNIONID和用户信息

返回的json数据包信息:
微信第三方授权获取UNIONID和用户信息
同时文档中还提供了检验access_token(网页授权凭证)是否有效的方式:
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&op enid=OPENID
微信第三方授权获取UNIONID和用户信息