用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
微信提供了两种授权方式来应对不同的使用场景。通过网页授权作用域 scope
参数控制。
openid
,无法获得用户的其他信息。scope: snsapi_base
scope: snsapi_userinfo
,也是静默授权,用户无感知。scope: snsapi_userinfo
code
code
换取网页授权 access_token
和 openid
,静默授权到这步结束access_token
获取用户信息引导用户跳传至该链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
用户同意授权或静默授权后将跳转至 redirect_url?code=CODE&state=STATE
这个地址并带上生成的 code
。
code
作为换取access_token
的票据,只能使用一次,5分钟未使用自动过期。
参数说明
code
换取网页授权 access_token
注意,这里的 access_token
和 调用公众平台API所需的基础 access_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"
}