微信公众号静默授权获取用户信息
前言
猿哥 来做一个公众号静默授权获取用户信息,着急要 今天必须完成。(ps:口吐芬芳…事事着急,你倒是人员配满啊。默默放下手中早餐像资本低头)
正文
回到主题,先扒 微信公众号API,通过API我们可以看到步骤:
1.登录微信公众号平台设置你的授权回调域名,并下载加密文件,将加密文件扔到授权回调域名目录下。
2.拼好链接请求获取code。https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
注意:
回调需要进行URLEncoder.encode();
scope为snsapi_base为静默授权,不弹出授权页面,用户无感知
为snsapi_userinfo显示授权,弹出授权页面(ps:细心同学看到微信API参数图上介绍会发现,只有scope为snsapi_userinfo才可通过openId获取到用户信息,静默授权只可获取到openId,文章不是忽悠人啊!别着急继续看下去)
因为前后端分离这里是将获取code链接返回前端,由前端去请求,微信会携带code调用回调地址。
String url = "";
try {
url = URLEncoder.encode(wxOauthProp.getRedirectUri(), "UTF-8");
logger.info(String.format("转义授权回调链接为:{%s}", url));
} catch (UnsupportedEncodingException e) {
logger.error("转义授权回调链接发生异常", e);
return ReturnInfo.error("转义授权回调链接发生异常")
}
String codeUrl = wxOauthProp.getCodeUrl().replace("APPID",wxOauthProp.getAppid())
.replace("REDIRECT_URI",url)
.replace("SCOPE", "snsapi_base");
return ReturnInfo.success(codeUrl);
3.通过code获取openid:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求参数说明:
String openIdUrl = wxOauthProp.getOpenIdUrl();
String result = openIdUrl.replace("APPID", wxOauthProp.getAppid())
.replace("SECRET", wxOauthProp.getSecret())
.replace("CODE", code);
String r = requestSSL(result, "GET", null);
logger.info("微信返回result == " + r);
r = r.replace("access_token", "accessToken").replace("expires_in", "expiresIn").replace("refresh_token", "refreshToken");
WxOpenIdInfo info = (WxOpenIdInfo) jsonToBean(r.getBytes(), WxOpenIdInfo.class);
if (info == null || StringUtils.isAnyEmpty(info.getOpenid())) {
logger.error("格式化为WxOpenIdInfo类异常:" + r);
return ReturnInfo.error("未获取到openId");
}
返回参数:
4.获取用户信息:
静默授权获取用户信息
接口地址:https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
该接口的access_token 不是第三步返回的授权access_token,而是全局access_token(通过此链接获取 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET) 。
接口返回参数
总结
静默授权和非静默授权区别在于:
1.获取code时候参数scope为snsapi_base,显示授权scope参数为snsapi_userinfo。
2.静默授权通过openid和全局access_token 去https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN获取用户信息,显示授权拿授权access_token(通过 https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 获取)和openid请求https://api.weixin.qq.com/sns/userinfoaccess_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN获取用户信息。
本文地址:https://blog.csdn.net/nigulasi01/article/details/107484174