手把手教程用Java实现微信公众号扫码登录功能 |
您所在的位置:网站首页 › 完美中国服务号公众号扫二维码就能看到证明产品是真的 › 手把手教程用Java实现微信公众号扫码登录功能 |
文章目录
前言一、环境准备二、使用步骤1. 使用微信工具包2. 创建数据表3. 登录页面代码逻辑4. 验证微信公众号登录
总结
前言
微信现今是我们必不可少的社交工具了,围绕微信这个生态实际上有很多东西可以做,我们经常会看到一些网站通过微信扫码进如公众号登录。一方面方便了用户登录,另外一方面也可以给公众号带来一定的流量,今天就通过Java SpringBoot项目来用微信公众号参数二维码实现扫码登录。实现的方式很多,今天介绍一下我的思路。 ⭐⭐⭐ 文末附完整代码获取方式。 ⭐⭐⭐ 一、环境准备 Linux/Windows服务器微信公众号一个Java SpringBoot开发环境MySQL数据库会写代码的程序员1个com.github.binarywang:weixin-java-mp:3.3.0 微信工具包 二、使用步骤 1. 使用微信工具包build.gradle里面加入如下代码后重新获取依赖 dependencies { ... compile 'com.github.binarywang:weixin-java-mp:3.3.0' ... } 2. 创建数据表数据表是两边沟通的桥梁,qrcode_ticket 主要是参数二维码的主要信息,session_code是用户的登录会话标识。open_id为公众号产生的open_id。 CREATE TABLE `user_login_session` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qrcode_ticket` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `session_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `open_id` varbinary(255) DEFAULT NULL, `create_time` timestamp NULL DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `qrcode_ticket` (`qrcode_ticket`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 3. 登录页面代码逻辑后端逻辑,当用户没有session_code的时候跳转到登录页面,这个时候登录页面需要展示一个带参数的二维码。后端核心代码逻辑如下。 @GetMapping("/login") public ModelAndView login() { HashMap map = new HashMap(); String marketQrcode; //这里是生成一个任意随机字符串 String qrcodeTicket = RandomUtil.generateDeviceToken(); try{ String scene = "login_" + qrcodeTicket; WxMpQrCodeTicket ticket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(scene,600); marketQrcode = UserService.SHOW_QRCODE_WX_BASE_URL + ticket.getTicket(); }catch (Exception e) { marketQrcode = ""; } map.put("qrcodeUrl", marketQrcode); map.put("qrcodeTicket", qrcodeTicket); //存到上面的表里面 userLoginSessionService.create(qrcodeTicket); return new ModelAndView("login", map); }前端登录页面显示出来二维码。通过上面代码可以看到qrcodeUrl就是要展示的二维码的地址,qrcodeTicket就是联系二维码和登录状态的中间参数。 这个参数给到前端,前端会一直带着这个qrcodeTicket每隔3s轮训发起请求,用户扫码登录成功之后,会对这个qrcodeTicket生成一个session_code,当发现这个session_code不为空时候表示用户登录成功了。就可以带着跳转到目标页面了。通过这个session_code去授权。 loopTimes = 0; var timer1 = setInterval(function(){ checkLogin() },3000) function checkLogin() { loopTimes ++ if(loopTimes > 30){ clearInterval(timer1) } $.ajax({ type: 'get', url: '/target/checkLogin', dataType: 'json', data: { qrcodeTicket: '${qrcodeTicket}' }, success:function(res){ // 如果生成了sessionCode表示登录成功 if(res.sessionCode) { window.location.href = "/target/go?sessionCode=" + res.sessionCode } } }) }java后端代码检查登录情况。 @GetMapping("/checkLogin") @ResponseBody public UserLoginSession checkLogin(@RequestParam String qrcodeTicket) { HashMap map = new HashMap(); return userLoginSessionService.findByQrcodeTicket(qrcodeTicket); } 4. 验证微信公众号登录微信公众号登录成功后,会触发handle方法,这个时候需要在这个方法里面处理相关逻辑,生成sessionCode。核心代码如下。 @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) { String eventKey = wxMessage.getEventKey(); String scanQrcodeInfo = eventKey.startsWith("qrscene_") ? eventKey.replace("qrscene_", "") : eventKey; String qrcodeTicket = scanQrcodeInfo.replaceAll("login_", ""); String sessionCode = RandomUtil.generateDeviceUuid(); userLoginSessionService.updateSessionCode(qrcodeTicket, sessionCode, wxMessage.getFromUser()); return msg("登录成功", wxMessage); }通过以上的操作,基本上就实现了微信公众号扫码登录的功能。 总结以上就是今天要讲的内容,本文介绍并实现了Java微信公众号扫码登录功能。有疑问的地方,欢迎下方留言讨论哦。更多精彩内容,即将呈现。 ⭐⭐⭐ 完整代码获取方式如下 ⭐⭐⭐ 最近不少小伙伴关注到我这篇文章,想要完整的代码,拿到完整的代码请记得一定要先看配置说明。 获取方式二:如果不能下载也可以关注下面公众号与我直接联系。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |