news 2026/4/15 8:43:07

企业微信扫码登录案例-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/14 19:36:20

【Java毕设全套源码+文档】基于springboot的商城停车场管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/14 11:43:29

【Java毕设全套源码+文档】基于springboot的零食批发商仓库管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/10 19:37:57

【Java毕设全套源码+文档】基于springboot的旅游门票信息系统设计与实现_(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/11 6:28:53

【Java毕设全套源码+文档】基于springboot的篮球馆会员信息管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/13 23:17:11

【Java毕设全套源码+文档】基于springboot的智能健康饮食系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/14 22:10:02

YOLO模型推理支持异步模式,适合长耗时任务

YOLO模型推理支持异步模式&#xff0c;适合长耗时任务 在智能制造产线高速运转的场景中&#xff0c;每秒流过数十件产品的视觉质检系统&#xff0c;常常面临一个棘手问题&#xff1a;即便使用了YOLO这样以“快”著称的目标检测模型&#xff0c;系统帧率依然上不去。画面卡顿、丢…

作者头像 李华