概念
- 网页授权:在微信访问第三方网页时,通过授权的方式,使第三方网站可以获取用户的基本信息
过程
授权方式获取用户基本信息
- 使用户授权时,将真正路径MD5后存入redis,加密后的值为key,真正路径存入redis中;
- 将路径的key存入state 参数 ,redirect_uri 参数设置为本地接收对应回调的路径。拼接 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect (参数顺序要相同)
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 公众号的唯一标识 |
redirect_uri | 是 | 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理 |
response_type | 是 | 返回类型,请填写code(固定字符串) |
scope | 是 | 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 ) |
state | 否 | 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节 |
#wechat_redirect | 是 | 无论直接打开还是做页面302重定向时候,必须带此参数 |
- redirect_uri 只是授权后的回调路径,在state值中存入用户真正要访问的路径(可以将真正的路径存入redis中,在state中存入key);授权后的路径为 redirect_uri/?code=CODE&state=STATE。
- 本地服务器接收redirect_uri对应的路径,以state中的值为key,从缓存中取出真正用户访问的路径,同时,获取code参数
- 拼接参数 访问 https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 返回值为授权access_token;当作用域为snsapi_base,此时即可终止,返回access_token时会附带有openid,此时及使没有关注公众号,也会产生唯一的openid。
- 此时获取的tocken有效期为两个小时,可以通过在refresh_token参数中拼接access_token值,访问https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN,获取长期tocken,有效期为30天(再次过期则需要用户重新授权)
- 当需要获取用户详细信息时,以上述步骤得到的access_token,作为tocken,正常查询详细信息。
- 查询到用户的详细信息后,执行业务过程后重定向到用户真正需要跳转的路径。