微信开放官方文档

https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

微信测官方测试号

http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

微信授权

一.先准备内网穿透

在此采用的是natapp 最好配置端口号为80 项目暂时也改成80

二.配置微信官方测试


流程说明

三.代码部分

         <!--糊涂工具类 ps:需要里面的http客户端发送工具--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.7</version></dependency>

还有一些没有添加上的依赖在此就不在添加了 主要是 校验之类的一些内容自行判断一下几个包括返回对象

微信公众号工具类

package com.dog.common.utils.wx;import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.dog.common.exception.CustomException;
import com.dog.common.utils.StringUtils;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** @program: dog* @description: 微信工具类* @author: @DogElder* @create: 2021-04-13 23:51**/
@Log4j2
@Service
public class WxUtils {/*** 微信公众号appid*/private static final String APPID = "*****";/*** 微信公众号secret*/private static final String SECRET = "*****";/*** 域名 域名和图中配置的不一样 域名更改记得和微信配置保持一致*/private static final String DOMAIN_NAME = "http://8sg95s.natappfree.cc";/*** 获取微信的code** @param response 响应体* @return 重定向*/public String getWxCode(HttpServletResponse response) {// 第一步:用户同意授权,获取codeStringBuilder path = new StringBuilder();//微信公众号appidpath.append("https://open.weixin.qq.com/connect/oauth2/authorize?appid=").append(APPID);//重定向的地址path.append("&redirect_uri=").append(DOMAIN_NAME).append("/getWxgzhUser");path.append("&response_type=code");/**以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)*以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。*/path.append("&scope=").append("snsapi_userinfo");path.append("&state=STATE");path.append("&connect_redirect=1#wechat_redirect");try {response.sendRedirect(path.toString());} catch (IOException e) {log.error("获取微信code失败: " + e.getMessage());}//必须重定向,否则不能成功return "redirect:" + path.toString();}/*** 获取openid和access_token 这里的 access_token与基本的access_token不是一个东西具体看官方文档* @param code 微信code 可以通过后台获取 或者 让前端传过来* @return*/public Map<String, Object> getOpenId(@NotBlank(message = "微信code不能为空/空串") String code) {return this.getOpenId(APPID, SECRET, code);}/*** 获取openid和access_token 这里的 access_token与基本的access_token不是一个东西具体看官方文档* @param appid  微信公众号appid* @param secret 微信公众号secret* @param code   微信code 可以通过后台获取 或者 让前端传过来* @return*/public Map<String, Object> getOpenId(@NotBlank(message = "微信appid不能为空/空串") String appid, @NotBlank(message = "微信secret不能为空/空串") String secret, @NotBlank(message = "微信code不能为空/空串") String code) {StringBuilder path = new StringBuilder();path.append("https://api.weixin.qq.com/sns/oauth2/access_token?appid=").append(appid);path.append("&secret=").append(secret);path.append("&code=").append(code);path.append("&grant_type=authorization_code");//发送请求 响应微信返回的参数String res = HttpUtil.get(path.toString());JSONObject jsonObject = JSONUtil.parseObj(res);String openid = jsonObject.getStr("openid");String access_token = jsonObject.getStr("access_token");if (StringUtils.isEmpty(openid) || StringUtils.isEmpty(access_token)) {log.error("openid或access_token参数为空");throw new CustomException("openid或access_token参数为空");}Map<String, Object> map = new HashMap<String, Object>();map.put("openid", openid);map.put("access_token", access_token);return map;}/*** 获取用户信息** @param openid 用户openid* @param accessToken 用户access_token* @return*/public Map<String, Object> getUserInfo(@NotBlank(message = "微信openid不能为空/空串")String openid,@NotBlank(message = "微信accessToken不能为空/空串") String accessToken) {StringBuilder path = new StringBuilder();path.append("https://api.weixin.qq.com/sns/userinfo?access_token=").append(accessToken);path.append("&openid=").append(openid);String res = HttpUtil.get(path.toString());JSONObject jsonObject = JSONUtil.parseObj(res);Map<String, Object> map = jsonToMap(jsonObject);return map;}/*** @Description: json对象转为map* @Param: jsonObject* @return: Map* @Author:@Dog_Elder* @Date: 2021/4/14*/public static Map<String,Object> jsonToMap(JSONObject jsonObject){Map<String, Object> map = new HashMap<String, Object>();Iterator it = jsonObject.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();map.put(entry.getKey(), entry.getValue());}return map;}}

Controller

/*** @program: dog* @description:* @author: @Dog_Elder* @create: 2021-03-13 16:26**/
@RestController
public class DemoController {@Autowiredprivate WxUtils wxUtils;/*** 前端向服务器获取微信的code*/@GetMapping("/getWxCode")public void getWxCode(HttpServletResponse response) {wxUtils.getWxCode(response);}/*** 根据获取code的重定向方法 获取openId和access_token** @param request* @return*/@GetMapping("/getWxgzhUser")public AjaxResult getWxgzhApi(HttpServletRequest request) {String code = request.getParameter("code");return AjaxResult.success(wxUtils.getOpenId(code));}/*** 获取用户信息* 必须是用户手动授权才可以获取用户信息 否则 无法获取** @param openid      用户openid* @param accessToken 用户access_token* @return*/@GetMapping("/getWxUserInfo")public AjaxResult getWxUserInfo(@NotBlank(message = "openid不能为空/空串") String openid, @NotBlank(message = "accessToken/空串") String accessToken) {return AjaxResult.success(wxUtils.getUserInfo(openid, accessToken));}}

四.测试部分

  1. 先关注微信测试公众号

  2. 链接需要通过微信浏览器打开 用 手机微信或电脑微信或微信开发工具打开

此时已经拿到了access_tokenopenid 注意想获取用户的基本信息必须是用户手动授权的才可以获取用户信息

微信公众号授权,获取code获取openId获取用户基本信息相关推荐

  1. 微信公众号现金红包红包 企业付款openid 获取

    微信公众号 必须是服务号和企业号 1.微信公众号 发红包  主要问题是要上传发红包的OpenID文件 2.企业付款openid 查询对方openid openid怎么获取 ,可以通过 "小C ...

  2. uni-app 对FastAdmin微信公众号授权登录实例

    uni-app 对FastAdmin微信公众号授权登录实例 uniapp 微信公众号授权登录代码 跳转获取code 提交fastadmin 第三方登录插件 进行登录验证 存储token onLoad( ...

  3. uniapp微信公众号授权登录,本地调试

    在项目如何集中微信公众号授权登录 后端跳转获取code码,最后拼接, //保留登录前的页面参数.为了不让参数传到后台,并且在微信授权链接带来带去,可以将参数和登录前的地址存到本地缓存let route ...

  4. 微信公众号授权获取用户OpenID和UnionId然后发生消息通知

    微信公众号授权获取用户OpenID和UnionId然后发生消息通知 1.获取微信公众号code 1.微信公众拿取公众号appid和appSecret 2.网页域名授权,这里的域名拼接上html所在位置 ...

  5. vue h5微信公众号授权获取用户信息

    vue h5微信公众号授权获取用户信息 1.申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.修改网页授权 ...

  6. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  7. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  8. 获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-40164

    获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-40164,错误信息-invalid ip, not in whitelist hint: [] 通过开发者ID及密码调用获 ...

  9. 急急急求微信公众号开发接口-php如何实现获取用户发送的微信表情,并返回一个链接,用户点击进去链接就是刚才发的表情,用户可以保存表情?

    求微信公众号开发接口-php如何实现获取用户发送的微信表情,并返回一个链接,用户点击进去链接就是刚才发的表情,用户就可以保存表情到手机? 需求描述 1.用户在公众号对话框发送微信表情(GIF) 2.公 ...

最新文章

  1. SpringCloud 之 Zuul 网关搭建及配置
  2. Linux内核中max()宏的奥妙何在?(一)
  3. Graph Theory 图论 贪心 栈 思维
  4. 2013\National _C_C++_A\4.约数倍数选卡片
  5. matplotlib安装失败_Python | 安装中遇到“0x80072f7d 未指定的错误”
  6. 卡巴2009与word冲突完美解决方案,经测试几十台计算机全部通过
  7. 并发请求多 服务器响应慢 post,【转】吞吐量、QPS(TPS)、并发数、RT性能指标及ab并发测试...
  8. 【转】如何通过事物代码查找对应BAPI
  9. 致敬ATSS | Dynamic ATSS再造ATSS辉煌!!!
  10. 1.59TB《全球 12.5 米高程DEM for WeServer》发布
  11. 【回归预测-LSTM预测】基于布谷鸟算法优化LSTM实现数据回归预测含Matlab代码
  12. 2022 腾讯云 阿里云返佣政策对比
  13. 实例分割:R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN
  14. 【mysql】MySQL中的锁原理(表锁、行锁、间隙锁、共享锁、排他锁)
  15. USACO-Section 3.2 Feed Ratios(枚举)
  16. Excel 使用技巧集锦
  17. 各朝代灭亡原因,这才是真正学历史!
  18. 隐私保护计算技术指南-1
  19. 求助 MOR-Tales of seafaring
  20. Carla release与ros-bridge

热门文章

  1. 街头篮球服务器未响应,肝的飞起 《街头篮球》魔王试炼FAQ
  2. IOS自动化第二篇:WebDriverAgent安装、编译和appium使用
  3. 生成式模型、判别式模型的区别?
  4. 开题报告:基于java摄影图片分享网站系统 毕业设计论文开题报告模板
  5. 百度打击低质违规站点,你中招了吗?
  6. 流水的“互联网老公”,铁打的女性消费
  7. edge浏览器使用ie兼容模式以及不安全的TLS设置
  8. 字符串匹配之includes方法介绍
  9. IOS学习——数据持久化(二):初识CoreData
  10. SLAM中常用的相机模型及标定工具