news 2026/4/17 16:10:35

企业微信扫码登录案例-springboot版

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
企业微信扫码登录案例-springboot版

企业微信扫码登录案例-springboot版

思路:创建应用,拿到copid、agenid、密钥、再企业微信授权登录配置回调地址即可;(扫码后将结果回调你本地)

效果如下:

一、maven坐标

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.40</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.21</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>

二、config、controller

yml配置:

server: port: 8080 wecom: corp-id: xxxxx agent-id: xxxx secret: xxxx-AOfBJ66c # 必须与你在企微后台配置的可信域名一致,且要在该域名下 redirect-uri: http://xxx.cn:28088/api/wecom/callback
import com.alibaba.fastjson2.JSONObject; import cn.hutool.http.HttpUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @Controller public class WeComLoginController { @Value("${wecom.corp-id}") private String corpId; @Value("${wecom.agent-id}") private String agentId; @Value("${wecom.secret}") private String secret; @Value("${wecom.redirect-uri}") private String redirectUri; /** * 1. 访问登录页 * URL: http://yaoqinqin.cn:28088/login */ @GetMapping("/login") public String loginPage(Model model) throws UnsupportedEncodingException { // 将配置传给前端,生成二维码使用 model.addAttribute("corpId", corpId); model.addAttribute("agentId", agentId); // 回调地址必须 URL Encode model.addAttribute("redirectUri", URLEncoder.encode(redirectUri, "UTF-8")); return "login.html"; // 对应 resources/templates/login.html } /** * 2. 扫码后的回调接口 * URL: http://yaoqinqin.cn:28088/api/wecom/callback */ @GetMapping("/api/wecom/callback") @ResponseBody public String callback(@RequestParam("code") String code) { // 第一步:获取 AccessToken // 注意:生产环境 AccessToken 必须缓存(有效期2小时),不能每次请求都去获取,会触发频率限制 String tokenUrl = String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", corpId, secret); String tokenResp = HttpUtil.get(tokenUrl); JSONObject tokenJson = JSONObject.parseObject(tokenResp); if (tokenJson.getIntValue("errcode") != 0) { return "获取 Token 失败: " + tokenResp; } String accessToken = tokenJson.getString("access_token"); // 第二步:获取访问用户身份 (UserId) String userInfoUrl = String.format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=%s&code=%s", accessToken, code); String userInfoResp = HttpUtil.get(userInfoUrl); JSONObject userInfoJson = JSONObject.parseObject(userInfoResp); if (userInfoJson.getIntValue("errcode") != 0) { return "获取用户信息失败: " + userInfoResp; } String userId = userInfoJson.getString("UserId"); return "<h1>登录成功!</h1> <p>企业微信 UserId: " + userId + "</p>"; } }

三、thmeleaf页面

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>企业微信扫码登录</title> <script src="https://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js"></script> <style> body { text-align: center; padding-top: 50px; } #wx_reg { margin: 0 auto; } </style> </head> <body> <h2>欢迎使用扫码登录</h2> <div id="wx_reg"></div> <script th:inline="javascript"> window.onload = function() { // 获取后端传来的参数 var corpId = [[${corpId}]]; var agentId = [[${agentId}]]; var redirectUri = [[${redirectUri}]]; // 已经是 encode 过的 // 实例化二维码 window.WwLogin({ "id": "wx_reg", "appid": corpId, "agentid": agentId, "redirect_uri": decodeURIComponent(redirectUri), // JS SDK内部可能也会处理,通常传入原样字符串或decode一下保险 "state": "STATE_LOGIN", "href": "", }); }; </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:59:53

YOLO模型如何实现端到端的目标检测流程?

YOLO模型如何实现端到端的目标检测流程&#xff1f; 在智能摄像头、自动驾驶车辆和工业质检流水线上&#xff0c;我们常常需要系统在毫秒级时间内识别出画面中的行人、车辆或缺陷部件。这类任务背后&#xff0c;往往离不开一个名字耳熟能详的模型家族——YOLO&#xff08;You O…

作者头像 李华
网站建设 2026/4/18 8:57:42

基于Java的基于RFID医院医疗废物监控智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 基于RFID医院医疗废物监控智慧管理系统能够有效解决传统管理模式中存在的人工记录误差大、信息更新不及时等问题&#xff0c;该系统具备创新性、实用性和高效性。与以往选题相比&#xff0c;本项目更注重实际应用价值及技术融合度&#x…

作者头像 李华
网站建设 2026/4/18 3:50:04

YOLO模型镜像提供性能调优咨询服务

YOLO模型镜像提供性能调优咨询服务 在智能制造工厂的质检线上&#xff0c;摄像头每秒捕捉数百帧图像&#xff0c;系统必须在几十毫秒内完成缺陷识别并触发分拣动作——任何延迟都可能导致次品流入下一环节。类似场景也出现在智慧交通卡口、无人零售货架和无人机巡检中。面对如此…

作者头像 李华
网站建设 2026/4/18 6:45:30

8个降AI率工具推荐!研究生高效降AIGC指南

8个降AI率工具推荐&#xff01;研究生高效降AIGC指南 AI降重工具&#xff0c;让论文更“自然” 随着人工智能技术的不断进步&#xff0c;AI生成内容&#xff08;AIGC&#xff09;在学术领域的应用日益广泛。然而&#xff0c;许多研究生在撰写论文时&#xff0c;都会面临一个共同…

作者头像 李华
网站建设 2026/4/18 8:47:29

2025最新!专科生必看10个AI论文网站:毕业论文写作全测评

2025最新&#xff01;专科生必看10个AI论文网站&#xff1a;毕业论文写作全测评 2025年专科生论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作工具已经成为许多学生提升写作效率、优化内容质量的重要助手。尤其是…

作者头像 李华
网站建设 2026/4/18 6:26:18

Multisim安装教程从零开始:构建个人电路仿真实验室

从零搭建电路仿真实验室&#xff1a;Multisim 安装实战全指南 你是不是也经历过这样的场景&#xff1f; 想验证一个运放电路的频率响应&#xff0c;却苦于没有示波器&#xff1b;设计了一个电源模块&#xff0c;担心接错线烧毁芯片&#xff1b;写完课程作业后不敢确定理论计算…

作者头像 李华