注意:此access_token和基础支持的access_token不同(此access_token相当于用户的token,基础的access_token相当于应用的token)

微信授权的流程:

详细的流程:

登录微信公众号——>设置与开发——接口权限——找到网页授权进行修改(必须配置了你的域名,你的重定向地址才能被微信所允许)

下载上面微信验证服务器的文件

// 如果你想直接用一个springboot完成一系列的测试的话
// 写这么一个接口返回你配置域名时下载的文件内容
// 此处我的文件名-MP_verify_2F6tdhplFiueD8UJ.txt  内容-2F6tdhplFiueD8UJ
@RequestMapping("MP_verify_2F6tdhplFiueD8UJ.txt")
public String wxCheck(){//直接返回你下载的授权文件里的内容就好return "2F6tdhplFiueD8UJ";
}

配置公众号自定义菜单中的跳转地址,直接配置第一步

通过微信浏览器获取对应的code为后面获取token(注意:这个重定向路径需要在微信公众号的后台进行配置)

redirect_uri:域名/getUserInfo 此处需要公网上的ip或者域名,如果你是局域网需要内网穿透

https://open.weixin.qq.com/connect/oauth2/authorize?appid=@{Appid}&redirect_uri=@{redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect

示例代码

@RestController
public class HelloController {// 1.使用httpClient@RequestMapping(value="/getUserInfo")public void getUserInfo(String code) throws IOException {String appId = "你的AppID";String secret = "你的AppSecret";CloseableHttpClient httpClient = HttpClients.createDefault();// 拼接URLString url = getAccessTokenUrl.replace("@{appId}", appId).replace("@{secret}", secret).replace("@{code}", code);// httpClient发送get请求HttpGet get = new HttpGet(url);// 获取结果实体HttpEntity entity = httpClient.execute(get).getEntity();JSONObject accessTokenObject = null;if (entity != null) {// 按指定编码转换结果实体为String类型String json = EntityUtils.toString(entity, "UTF-8");accessTokenObject = JSONObject.parseObject(json);}String openid = (String) accessTokenObject.get("openid");String accessToken = (String) accessTokenObject.get("access_token");// 获取用户信息String getUserInfoUrl = getUserInfo.replace("@{accessToken}",accessToken).replace("@{openId}",openid);HttpGet get1 = new HttpGet(getUserInfoUrl);HttpEntity UserInfo = httpClient.execute(get1).getEntity();if (UserInfo != null) {// 按指定编码转换结果实体为String类型String json = EntityUtils.toString(UserInfo, "UTF-8");JSONObject jsonObject= JSONObject.parseObject(json, WxIndividualMessage.class);System.out.println(jsonObject.toString());}// 释放response的流EntityUtils.consume(entity);EntityUtils.consume(UserInfo);}
}

可能碰到的异常:

如果弹出(请在微信客户端打开链接)异常,说明链接需要在微信浏览器中打开

如果弹出(redirect_uri参数错误)异常,证明前面的微信公众号后台域名未配置

附赠:

使用resttemplate进行请求,不过需要配置restTemplate配置类

@Configuration
public class RestTemplateConfig {/*** http连接管理器* @return*/@Beanpublic HttpClientConnectionManager poolingHttpClientConnectionManager() {PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();// 最大连接数poolingHttpClientConnectionManager.setMaxTotal(200);// 并发数poolingHttpClientConnectionManager.setDefaultMaxPerRoute(20);return poolingHttpClientConnectionManager;}/*** httpClient* @param httpClientConnectionManager* @return*/@Beanpublic HttpClient httpClient(HttpClientConnectionManager httpClientConnectionManager) {HttpClientBuilder httpClient = HttpClientBuilder.create();// 设置http连接管理器httpClient.setConnectionManager(httpClientConnectionManager);return httpClient.build();}@Beanpublic ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient) {// httpClient创建器HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);// 连接超时时间/毫秒(连接上服务器(握手成功)的时间,超出抛出connect timeout)clientHttpRequestFactory.setConnectTimeout(5000);// 读取超时时间/毫秒(从服务器读取数据的时间,超出抛出read timeout)clientHttpRequestFactory.setReadTimeout(10000);// 连接不够用的等待时间/毫秒(connect timeout的延迟)clientHttpRequestFactory.setConnectionRequestTimeout(10000);return clientHttpRequestFactory;}@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory) {List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();StringHttpMessageConverter messageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);messageConverters.add(messageConverter);RestTemplate restTemplate = new RestTemplate(messageConverters);restTemplate.setRequestFactory(clientHttpRequestFactory);return restTemplate;}
}
@RestController
public class HelloController {@RequestMapping(value="/getUserInfoByRestTemplate")public void getUserInfoByRestTemplate(@RequestParam("code")String code){String appId = "你的AppID";String secret = "你的AppSecret";// 获取accessToken和openIdString baseUrl = getAccessTokenUrl.replace("@{secret}", secret);baseUrl = baseUrl.replace("@{appId}", appId);baseUrl = baseUrl.replace("@{code}", code);String mapString = restTemplate.getForObject(baseUrl, String.class);JSONObject map = (JSONObject) JSONObject.parse(mapString);// 获取用户信息String openid = (String) map.get("openid");String accessToken = (String) map.get("access_token");String url = getUserInfo.replace("@{accessToken}",accessToken);url = url.replace("@{openId}",openid);String mapString1 = restTemplate.getForObject(url, String.class);JSONObject map1 =   JSONObject.parseObject(mapString1, WxIndividualMessage.class);System.out.println(map1.toString());System.out.println(map1.getNickname());}
}

初入博客,有问题请直言

微信公众号获取用户信息(新)相关推荐

  1. Thinkphp5下微信公众号获取用户信息

    前言 一直在用整理下tp5 开发微信公众号获取用户信息的简单笔记 废话不多说 直接贴代码如下: 正文 准备工作 在微信公众平台的开发者工具中申请公众平台测试账号如下图 在网页账号中 修改网页授权获取基 ...

  2. 通过微信公众号获取用户信息(java版)

    最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了. 1.首先需要到微信网站去设置一下,我是直接用的微信测试号. 接口配置 ...

  3. php公众号用户关注,微信公众号获取用户信息(用户关注公众号)

    一 获取用户基本信息 用户在关注公众号之后,你可以获取到用户的openID(加密后的微信号,每个用户对应每个公众号的openID是唯一的).通过openID可以获取到包括昵称.头像.性别.所在城市.语 ...

  4. 微信公众号获取用户信息

    微信公众号开发中有时会有获取用户信息的需求.我这里是点击某个按钮直接获取用户的信息,不需要用户授权(就是所谓静默授权). 主要分以下几步: 1.在微信公众平台,公众号设置中设置网页授权域名: 2.请求 ...

  5. 解决微信公众号获取用户信息报48001错误

    报错信息如下: {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCl ...

  6. 微信公众号获取用户信息采坑指南

    1. OAuth2.0网页授权 这里一定不要在前面加上"http://"等字符,否则就会出现"redirect_uri参数错误": 2.获取code 官方说明如 ...

  7. 微信公众号获取用户位置定位信息入库asp代码

    微信公众号获取用户位置定位信息入库asp代码,可以获取微信用户的坐标和地址信息入库,代码简洁: <% if request("action")="" th ...

  8. 微信公众号获取用户头像昵称,用户信息

    1.关注了公众号,获取用户信息 https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&a ...

  9. 微信公众号获取用户openId(扩展:小程序获取openId和手机号)

    微信公众号获取用户openId 拼接的参数[可以直接配菜单中]: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb2363dd ...

最新文章

  1. ASP在中小企业中具有巨大的潜在市场
  2. java如何打logo,利用java给网站图片打上文本或图片logo
  3. uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具
  4. unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等
  5. Windows环境下的Oracle数据库备份策略
  6. ControllerBrokerRequestBatch分析
  7. java设置文件为文件夹_如何为文件夹及其所有子文件夹和文件设置chmod? [关闭]...
  8. 闭包Closures
  9. java day11【final、权限、内部类、引用类型】
  10. python分离数字_python从字符串中提取数字_filter
  11. 瑞星杀毒软件linux序列号,瑞星杀毒软件2007光盘零售版是面向 Linux的?
  12. SpringBoot实现Excel导出并设置表格属性(easyExcel)
  13. 重温计算机简史:IBM的风云父子兵和硅谷的诞生
  14. 十种做Flash游戏赚钱的方法
  15. ARM固件开发(LPC1768启动初始化代码)
  16. windows 批量 jpg 转 bmp 方法
  17. Android指南针代码示例
  18. k-选取问题之快速选取策略quickSelection
  19. windows自带截图键(shift+ win + s)没有反应,一招教你快速解决!
  20. C++中类(class)和结构(struct)的区别

热门文章

  1. 音视频开发系列(15):视频与音频同步
  2. .properties文件加载失败
  3. 护肤品行业竞争格局:2022年外资品牌护肤品占据主导地位
  4. 数字空间中的二值形态学
  5. idea紫色主题+背景图配置
  6. HANA学习季(一) :HANA的基本概念
  7. MKL_THREADING_LAYER=INTEL is incompatible with libgomp.so.1 library
  8. 傲梅轻松备份成为超越Ghost的国产备份软件
  9. 北交计算机学院推荐理由,北京交通大学计算机与信息技术学院赵守国老师介绍...
  10. 平塘天眼和大数据有什么关系_“中国天眼”选址贵州平塘的缘由