用户在微信客户端中访问第三方网页,公众号能够经过微信网页受权机制,来获取用户基本信息,进而实现业务逻辑。html
在微信公众号请求用户网页受权以前,开发者须要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页账号 - 网页受权获取用户基本信息”的配置选项中,修改受权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,所以请勿加 http:// 等协议头;json
受权回调域名配置规范为全域名,好比须要网页受权的域名为:www.qq.com,配置之后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 均可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com没法进行OAuth2.0鉴权api
微信提供了两种受权方式来应对不一样的使用场景。经过网页受权做用域 scope
参数控制。微信
openid
,没法得到用户的其余信息。scope: snsapi_base
scope: snsapi_userinfo
,也是静默受权,用户无感知。scope: snsapi_userinfo
code
code
换取网页受权 access_token
和 openid
,静默受权到这步结束access_token
获取用户信息引导用户跳传至该连接app
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
url
用户赞成受权或静默受权后将跳转至 redirect_url?code=CODE&state=STATE
这个地址并带上生成的 code
。code
code
做为换取access_token
的票据,只能使用一次,5分钟未使用自动过时。htm
参数说明blog
code
换取网页受权 access_token
注意,这里的 access_token
和 调用公众平台API所需的基础 access_token
不是一个东东,只是名字同样而已。token
这一步是在服务端完成的,须要公众号的 secret
,access_token
也不能够传给客户端。
请求接口
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
返回
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
当网页受权做用域为 snsapi_userinfo
时,开发者经过 access_token
和 openid
获取用户信息。
请求接口
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回
{ "openid": "OPENID", "nickname": "NICKNAME", "sex": "1", "province": "PROVINCE" "city": "CITY", "country": "COUNTRY", "headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege": [ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }