欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信公众号静默授权获取用户信息

程序员文章站 2024-01-20 16:26:58
微信公众号静默授权获取用户信息前言正文功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言猿哥 来做一个公众号静默授权获取用户信息,着急要 今天必须完成。(ps:口吐芬芳...事事着急,你倒是人员配满啊。默默放下手中早餐像资本...

微信公众号静默授权获取用户信息

前言

猿哥 来做一个公众号静默授权获取用户信息,着急要 今天必须完成。(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

相关标签: 微信 java