简介

微信公众号开发中,必不少可少的一环:公众号授权登录、获取微信用户信息。

本地完整运行环境准备

内网渗透=>生成本地指定端口映射的外网域名

传送门:内网渗透工具Natapp使用详解
域名生成之后修改配置文件:

注册并配置微信测试公众号

  1. 注册地址:微信公众平台 测试账号申请,扫码登录,并关注该测试号

  2. 获取测试号appid和appsecret

3…配置网页授权域名**(使用通过Natapp生成的域名)**

下载微信开发者工具

下载: 微信开发者工具

流程

文字简述

  1. 进入公众号首页,判断是否已经授权
  2. 未授权,则重定向到微信授权页面,拉起授权弹框,传入回调路径,回调路径必须是外网可访问同时对应域名以在微信公众号后台配置
  3. 点击允许授权,微信服务器回调上一步传入的回调路径,传入code参数
  4. 后台根据code参数和appid、appsecret调用微信api,获取openId、access_token,授权成功!
  5. 微信用户信息获取:根据openId、access_token获取微信用户信息

代码

1.首页判断是否已授权

Java后台跳转登录页面,返回配置和回调路径信息

    @Autowiredprivate WxConfig wxConfig;@RequestMappingpublic String index(Model model) throws UnsupportedEncodingException {model.addAttribute("wxConfig",wxConfig);// 进行编码model.addAttribute("redirectUri", URLEncoder.encode(wxConfig.getServer()+"/webAuthLogin/getCode","UTF-8"));return "login";}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1" /><title>微信授权登录示例</title><script src="http://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body style="text-align: center;"><h2>欢迎您:[[${session.userInfo?.nickname}]]!</h2><hr/><span>用户信息:[[${session.userInfo}]]</span>
<script th:inline="javascript">var sceneStr;var t;var userInfo = [[${session.userInfo}]];var appId = [[${wxConfig.appId}]];var openId = [[${session.openId}]];var redirectUri = [[${redirectUri}]];console.log("======用户信息  开始=========");console.log(userInfo);if(userInfo != null){alert("您好:"+userInfo.nickname);}console.log("======用户信息  结束=========");$(function () {if (openId == null) {window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId +'&redirect_uri='+redirectUri +'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';}else{alert("您好:"+userInfo.nickname+",已经授权成功!");}})
</script>
</body>
</html>

2.回调方法,接受code参数返回openId和用户信息,重定向到首页

@Controller
@RequestMapping("webAuthLogin")
public class WebAuthLoginController {//获取openid和access_token的连接private static String getOpenId = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code";//获取用户基本信息的连接private static String getUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";@Autowiredprivate WxConfig wxConfig;@Autowiredprivate HttpSession httpSession;/***  微信网页授权回调* @param code* @return*/@RequestMapping("getCode")public String getCode(String code){String getOpenIdUrl = getOpenId.replace("APPID", wxConfig.getAppId()).replace("APPSECRET", wxConfig.getAppSecret()).replace("CODE", code);String response = HttpClientUtil.doGet(getOpenIdUrl);JSONObject jsonObject = JSONObject.parseObject(response);String accessToken = jsonObject.get("access_token") == null ? null :jsonObject.get("access_token").toString();String openId = jsonObject.get("openid") == null ? null : jsonObject.get("openid").toString();httpSession.setAttribute("accessToken",accessToken);httpSession.setAttribute("openId",openId);httpSession.setAttribute("userInfo",getUserInfo(openId,accessToken));return "redirect:/";}/***  获取微信用户信息* @param openId* @param accessToken* @return*/private JSONObject getUserInfo(String openId,String accessToken){String userInfoUrl = getUserInfo.replace("ACCESS_TOKEN",accessToken).replace("OPENID", openId);String userInfo = HttpClientUtil.doGet(userInfoUrl);JSONObject jsonObject = JSONObject.parseObject(userInfo);return jsonObject;}
}

3.回调结束,回到首页返回微信用户信息

结果演示

打开微信开发者工具,输入首页地址

第一次拉起授权页面,手动允许授权

在授权有效期间,自动跳转

授权结束跳转到首页

源码

微信公众号授权登录

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

  1. Spring Boot + 微信公众号授权登录获取用户信息

    通过微信公众平台的官方文档,总结出网页授权流程分为: 1.引导用户进入授权页面同意授权,获取code 2.通过code换取网页授权access_token(与基础支持中的access_token不同) ...

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

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

  3. java实现微信公众号授权登录获取用户信息(一)

    参考文章:https://blog.csdn.net/Santiago_M/article/details/79109154 : https://www.cnblogs.com/jilu/p/6123 ...

  4. 微信公众号授权(获取用户信息)

    需要的工具: 微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了) 服务器(可以自行购买,我使用的是新浪的sae.) 编辑器(随意,不做推荐) 微信公众号开发文档(地址) !!!!!完 ...

  5. 微信小程序授权登录获取用户信息详解

    今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...

  6. 基于Spring Boot实现电脑端网页微信扫码授权登录方式一(附带完整源码)

    简介 电脑端微信网页扫码授权登录有2种方式: 第一种:基于微信公众号,单独获取登录二维码扫码,然后扫码登录,程序控制跳转逻辑,例如CSDN: 第二种:基于微信开放平台,跳转到微信二维码页面进行扫码登录 ...

  7. 微信公众号授权登录获取code获取openid注意事项(采坑解决方案)

    (重要)不管是正式还是测试微信公众号按照官方下载好txt文件并在服务器上配置好对应路径,最好是根目录下(微信文档上面说可以放在根目录或某个文件夹下面,但是我之前就是放在某个文件夹下面导致配置一直不对, ...

  8. 微信公众号接入和获取用户信息

    主要原理: 1.从微信公众号发来的get请求为验证服务器安全性的 2.从微信公众号发来的post请求为接受和回复用户信息的 3.先根据是否有code来进行判断,如果有code的话,根据code换取op ...

  9. 微信公众号开发之获取用户信息

    微信获取用户信息的方式有两种,静默授权(无需用户同意)和非静默授权(需要用户" 手动点击 "拉取授权,可以用户无需关注公众号即可获取用户信息) 整体的代码请查看最后,前边为原理介绍 ...

最新文章

  1. pyspark import 可以通过 --py-files
  2. Struts1和Struts2的区别和对比
  3. RabbitMQ Topic交换机的作用
  4. [mybatis]log4j
  5. Activiti 简易教程
  6. ctype.h,ctype.c 结构分析 \linux-1.0\linux\include\linux\ctype
  7. java 三级考试_java三级考试理论题
  8. [PAL规范]SAP HANA PAL演绎推理算法Apriori编程规范APRIORIRULE
  9. 【Maven】maven如何配置本地仓库?
  10. linux 内核 addr2line,内核调试 arm-none-linux-gnueabi-addr2line 工具使用
  11. 数电模电基础(1)分压电路
  12. DHT11修改stm32引脚的笔记
  13. 计算机英语作文初中,初中关于电脑的英语作文
  14. bat使用命令解析-详细(转)
  15. Oracle---SQL语句
  16. Windows 7 更新补丁大包子
  17. Unity Shader - Get Screen Pos
  18. ECharts - 14.小例子:实现日历图
  19. 读《遥远的救世主》与观看电视剧天道
  20. 漂浮式半潜风机(一)稳性分析

热门文章

  1. UG\NX二次开发 加密锁(加密狗)加密exe
  2. 删除的备忘录内容怎么恢复?
  3. 搜索引擎面面观[转]
  4. java基础登陆界面
  5. 开发和研发:区别很大
  6. Request method ‘GET‘ not supported,不支持GET形式访问
  7. 如何在nuxt项目中使用iconfont
  8. 获奖丨泽信荣获“第十届艾景奖”2020年度十佳景观设计奖
  9. 时代催生枭雄——XFS应运而生
  10. JS 中并发和并行的区别