当前位置: 首页 > news >正文

Java 实现企业微信扫码登录

一、场景

Web 系统登录页面“企业微信”图标,点击后调取企业微信扫码登录页面,扫码成功后判断系统账号与企业微信用户ID绑定情况,有则直接登录,无则跳转到绑定登录页面,用户手动输入个人账号密码进行绑定,首次绑定后后续无需再绑定。

二、企业微信应用相关配置

1、新建企微应用

进入企微管理后台,应用管理模块,点击创建应用,填写应用名称、介绍,设置应用Logo,点击创建应用。

image

 2、应用 ID 和 Secret

创建好应用后,保存好应用的 AgentId 和 Secret,后续系统调用企微接口会用到。

image

以及企业ID(在管理后台 - 我的企业中查看)。

image

 3、配置可信域名、授权回调域、企业可信IP

如果系统地址为 http://www.oa.com:8099,则可信域名、授权回调域填写 www.oa.com:8099。并且确保系统授权流程中的回调接口地址也是 http://www.oa.com:8099/xxx/xxx 格式,有任意一处对不上,进行扫码登录时会提示:edirect_uri 与配置的授权完成回调域名不一致 问题。

配置可信域名时可能会让进行域名归属认证,下载认证文件,放到域名访问根目录下,确保 http://www.oa.com:8099/WW_verify_xxxxxxx.txt,在浏览器可访问(会显示WW_verify_xxxxxxx.txt内的内容),具体实现方式根据系统的部署方式决定,可根据系统的部署方式询问AI。

image

 三、Java 流程实现

常量参数:

// 企微企业 ID
String wxworkCorpId = xxx;
// 企微应用 AgentId
String wxworkAgentId = xxx;
// 企微应用 Secret
String wxworkSecret = xxx;
// 登录回调地址
String wxworkRedirectUri = "http://www.oa.com:8099/wxwork/callback";

跳转到企微登录页:

    /*** 跳转到企业微信扫码登录页面*/@GetMapping("/wxwork/login")public void wxworkLogin(HttpServletResponse response) throws Exception {// 企业微信网页扫码授权 URLString authUrl = "https://open.work.weixin.qq.com/wwopen/sso/qrConnect?"+ "appid=" + wxworkCorpId+ "&agentid=" + wxworkAgentId+ "&redirect_uri=" + URLEncoder.encode(wxworkRedirectUri, "UTF-8")+ "&state=meiqu_erp";response.sendRedirect(authUrl);}

企业微信登录回调:

    @GetMapping("/wxwork/callback")public String wxworkCallback(@RequestParam("code") String code,@RequestParam(value = "state", required = false) String state,HttpServletRequest request) throws Exception {// 1. 获取企业微信 access_tokenString accessToken = getWxworkAccessToken();// 2. 用 code 换取用户的 UserIdString userId = getWxworkUserId(accessToken, code);if (StringUtils.isBlank(userId)) {return "redirect:/login?error=wxwork_auth_failed";}// 3. 根据企业微信 userId 查找绑定的系统用户// 3.1 userId 没有匹配到系统用户,跳转到绑定页面,让用户首次手动输入系统账户密码进行绑定// 3.2 userId 匹配到系统用户,跳转登录。}   

获取企业微信 access_token:

    /*** 获取企业微信 access_token* 接口:GET https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=xxx&corpsecret=xxx*/private String getWxworkAccessToken() throws Exception {String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"+ "corpid=" + wxworkCorpId+ "&corpsecret=" + wxworkSecret;String result = getJson(url);return JSON.parseObject(result).getString("access_token");}

用 Code 换取用户的 UserId:

/*** 用 code 换取企业微信用户的 UserId* 接口:GET https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=xxx&code=xxx*/private String getWxworkUserId(String accessToken, String code) throws Exception {String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?"+ "access_token=" + accessToken+ "&code=" + code;String result = getJson(url);JSONObject json = JSON.parseObject(result);// errcode=0 表示成功,UserId 为企业内用户IDif (json.getIntValue("errcode") == 0) {return json.getString("UserId");}return null;}

 

http://www.jsqmd.com/news/457511/

相关文章:

  • 开源字体多语言支持全面指南:从技术架构到全球化落地
  • 讲讲2026年贵人家源家具,质量好不好、雕花工艺精细吗、运输服务如何 - myqiye
  • CoPaw完整部署指南:打造专属AI智能助理,附雨云积分兑换福利
  • 每次打开webstorm需要重新source才能找到node,Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.74.dylib
  • 开源工具WaveTools:突破鸣潮帧率限制,解锁120帧极致体验
  • 2026美国投资移民中介哪家好?行业资深机构推荐 - 品牌排行榜
  • 心瞳无限元仿真: 今日正式开宗立派
  • 2026年宁波地区诚信且实力强的安装玻璃用的玻璃吸盘车租赁公司推荐 - 工业推荐榜
  • 解锁系统级权限管理:NSudo系统工具全方位操作指南
  • 如何用Steam成就管理器轻松掌控游戏进度
  • 2026年FRP采光瓦精品定制厂家排名,潍坊泰霖建材服务超靠谱 - mypinpai
  • 3步精通Blender模型导出:OGRE引擎无缝对接指南
  • 深港陆运通关平台提升跨境运输效率
  • Xbox控制器性能分析工具:精准测量输入延迟与优化游戏体验
  • 细软发质发膜黑榜:5款让你头发更塌的产品 - 博客万
  • 开源工具RePKG:Wallpaper Engine资源处理与高效转换全指南
  • ncmdump:突破NCM格式限制的音频解密工具,让音乐自由播放
  • 发膜真实用户报告:大数据揭秘哪款卖最好 - 博客万
  • 如何突破Windows系统限制实现Android应用无缝体验?WSABuilds带来的一站式解决方案
  • 掌握ok-ww:从环境配置到智能应用的高效自动化解决方案
  • 3大创新突破:Godot卡牌游戏框架高效开发实战指南
  • 基于MATLAB的复杂环境移动机器人路径规划算法研究
  • CPU ↔ DRAM(内存总线)的可持续数据传输带宽
  • OpenCore Configurator:黑苹果配置神器,让新手也能轻松玩转引导
  • Blender 3MF插件完全指南:从价值认知到专业应用
  • 京东e卡怎么换成现金,闲置购物卡处理指南 - 猎卡回收公众号
  • AMD锐龙处理器电源管理完全指南:释放硬件潜能的终极工具
  • 哪家果茶包机构有保障
  • 智能视频帧提取技术:让幻灯片自动浮出水面的AI解决方案
  • 华琰兴特钢:立足无锡,深耕长三角钢材现货供应 - 资讯焦点