手把手教程用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<String, String> map = new HashMap<String, String>();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就是联系二维码和登录状态的中间参数。
<div><img style="width:160px;" src="${qrcodeUrl}" />
</div>
这个参数给到前端,前端会一直带着这个qrcodeTicket每隔3s轮训发起请求,用户扫码登录成功之后,会对这个qrcodeTicket生成一个session_code,当发现这个session_code不为空时候表示用户登录成功了。就可以带着跳转到目标页面了。通过这个session_code去授权。
<script>
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}}})
}
</script>
java后端代码检查登录情况。
@GetMapping("/checkLogin")
@ResponseBody
public UserLoginSession checkLogin(@RequestParam String qrcodeTicket)
{HashMap<String, String> map = new HashMap<String, String>();return userLoginSessionService.findByQrcodeTicket(qrcodeTicket);
}
4. 验证微信公众号登录
微信公众号登录成功后,会触发handle方法,这个时候需要在这个方法里面处理相关逻辑,生成sessionCode。核心代码如下。
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> 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微信公众号扫码登录功能。有疑问的地方,欢迎下方留言讨论哦,或者想获取更完整的代码可关注下面公众号与我直接联系。更多精彩内容,即将呈现。
手把手教程用Java实现微信公众号扫码登录功能相关推荐
- Java实现微信公众号扫码登录
前言 1.首先,调用微信公众平台的OAuth2.0授权接口,获取用户的授权信息.具体的,在用户点击授权登录按钮时,向微信服务器发送请求,微信服务器会返回一个授权链接,用户点击授权链接后,微信服务器会跳 ...
- 实现支持多公众号的微信公众号扫码登录服务
实现支持多公众号的微信公众号扫码登录服务 最近,在公司的通行证项目开发过程中,需求方提出了支持微信公众号扫码登录,并且可以支持多公众号接入的需求.研究了一下微信公众号的开发文档,实现微信公众号扫码登录 ...
- 微信公众号扫码登录 提示 网络出错了, 轻触屏幕重新加载-1001错误
iphone 手机扫码或者密码登录, 使用WiFi或者4G扫码 登录微信公众号都提示1001错误 出现问题的场景:调用微信网页授权https://open.weixin.qq.com/connect/ ...
- 微信公众号扫码授权登录思路
引言 上学期研究了一下微信登录相关内容,也写了两三篇笔记,但是最后实际登录流程没有写,主要因为感觉功能完成有所欠缺,一直也没有好的思路:这两天我又看了看官方文档,重新构思了一下微信公众号登录相关的内容 ...
- JAVA实现微信公众号扫一扫
准备环境 1.微信测试公众号申请: 微信公众平台http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.记录下申请的测试公众号的 ...
- 提问:微信网页授权到第三方调用错误、调用微信公众号扫码登陆错误、微信SCOP权限错误或没有权限
总结: 调用微信扫码,但是微信返回提示SCOP错误,我的微信公众号认证了,也把对应的域名填写了,代码上填写的snsapi的路径是填写在对用网页授权域名下的路径. 错误原因: 应该是微信公众号上的配置错 ...
- 简单分享微信公众号扫码抽奖活动怎么做
公众号线上抽奖相比于现场抽奖有很多好处,除了成本更低,宣传范围更广,能够吸引更多的参与,还有一大好处就是,线上抽奖比线下更容易挖掘潜在客户.抽奖活动可以手机客户的手机号,年龄,消费信息等.对流量转化和 ...
- [JAVA实现]微信公众号网页授权登录,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- [JAVA实现]微信公众号网页授权登录
网上搜资料时,网友都说官方文档太垃圾了不易看懂,如何如何的.现在个人整理了一个通俗易懂易上手的,希望可以帮助到刚接触微信接口的你. 请看流程图!看懂图,就懂了一半了: 其实整体流程大体只需三步:用户点 ...
最新文章
- 经典算法题每日演练——第二十一题 十字链表
- Linux内核中ioremap映射的透彻理解
- 深度学习之循环神经网络(3)梯度传播
- 逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总
- uiwebview 修改html,修改UIWebView加载的html文本属性
- 未能加载文件或程序集System.EnterpriseServices
- opencv读取文件路径
- Python核心编程(第三版)课后习题解答——第二章
- 网络摄像头的地盘争夺战——四款僵尸软件的技术解析
- 6.Linux中的进程管理
- 锐浪报表,用脚本处理字段
- win7网络不显示共享计算机,win7系统看不到局域网其他计算机怎么办
- 图像处理系列——图像融合之加权平均(WA)
- 寒假训练1—H(第一次写出结构体数组)
- PICTURE writeup By K龙
- 计科实训 餐馆点菜系统
- CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”
- 识别图片上的文字,如何在线识别?
- 天涯论坛为什么不能删除或修改自己发表的贴子
- GPT 分区如何调整为 MBR 分区
热门文章
- Python django 个人博客系统源码
- Qwt笔记(二)之QwtPlot简单使用
- 举步维艰——如何调试显示器点亮前的故障
- 模式识别 K-mean|KNN
- 图书馆中计算机管理属于,在图书馆中使用计算机管理属于________
- stm32毕业设计 智能小车 自动泊车系统
- (单细胞-SingleCell)Seurat流程文献复现——单细胞实战分析流程
- python温度传感器_基于python通过树莓派获取温度传感器的温湿度
- php网站开题报告该怎么答辩,建置Web的管理介面for php,毕业论文设计,答辩ppt,开题报告,外文翻译,硕士研究生...
- 蚂蚁市值25万亿?互联网的“后棚”买卖,你我都逃不过