文章目录

  • 前言
  • 一、环境准备
  • 二、使用步骤
    • 1. 使用微信工具包
    • 2. 创建数据表
    • 3. 登录页面代码逻辑
    • 4. 验证微信公众号登录
  • 总结

前言

微信现今是我们必不可少的社交工具了,围绕微信这个生态实际上有很多东西可以做,我们经常会看到一些网站通过微信扫码进如公众号登录。一方面方便了用户登录,另外一方面也可以给公众号带来一定的流量,今天就通过Java SpringBoot项目来用微信公众号参数二维码实现扫码登录。实现的方式很多,今天介绍一下我的思路。


一、环境准备

  1. Linux/Windows服务器
  2. 微信公众号一个
  3. Java SpringBoot开发环境
  4. MySQL数据库
  5. 会写代码的程序员1个
  6. 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实现微信公众号扫码登录功能相关推荐

  1. Java实现微信公众号扫码登录

    前言 1.首先,调用微信公众平台的OAuth2.0授权接口,获取用户的授权信息.具体的,在用户点击授权登录按钮时,向微信服务器发送请求,微信服务器会返回一个授权链接,用户点击授权链接后,微信服务器会跳 ...

  2. 实现支持多公众号的微信公众号扫码登录服务

    实现支持多公众号的微信公众号扫码登录服务 最近,在公司的通行证项目开发过程中,需求方提出了支持微信公众号扫码登录,并且可以支持多公众号接入的需求.研究了一下微信公众号的开发文档,实现微信公众号扫码登录 ...

  3. 微信公众号扫码登录 提示 网络出错了, 轻触屏幕重新加载-1001错误

    iphone 手机扫码或者密码登录, 使用WiFi或者4G扫码 登录微信公众号都提示1001错误 出现问题的场景:调用微信网页授权https://open.weixin.qq.com/connect/ ...

  4. 微信公众号扫码授权登录思路

    引言 上学期研究了一下微信登录相关内容,也写了两三篇笔记,但是最后实际登录流程没有写,主要因为感觉功能完成有所欠缺,一直也没有好的思路:这两天我又看了看官方文档,重新构思了一下微信公众号登录相关的内容 ...

  5. JAVA实现微信公众号扫一扫

    准备环境 1.微信测试公众号申请: 微信公众平台http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.记录下申请的测试公众号的 ...

  6. 提问:微信网页授权到第三方调用错误、调用微信公众号扫码登陆错误、微信SCOP权限错误或没有权限

    总结: 调用微信扫码,但是微信返回提示SCOP错误,我的微信公众号认证了,也把对应的域名填写了,代码上填写的snsapi的路径是填写在对用网页授权域名下的路径. 错误原因: 应该是微信公众号上的配置错 ...

  7. 简单分享微信公众号扫码抽奖活动怎么做

    公众号线上抽奖相比于现场抽奖有很多好处,除了成本更低,宣传范围更广,能够吸引更多的参与,还有一大好处就是,线上抽奖比线下更容易挖掘潜在客户.抽奖活动可以手机客户的手机号,年龄,消费信息等.对流量转化和 ...

  8. [JAVA实现]微信公众号网页授权登录,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. [JAVA实现]微信公众号网页授权登录

    网上搜资料时,网友都说官方文档太垃圾了不易看懂,如何如何的.现在个人整理了一个通俗易懂易上手的,希望可以帮助到刚接触微信接口的你. 请看流程图!看懂图,就懂了一半了: 其实整体流程大体只需三步:用户点 ...

最新文章

  1. 经典算法题每日演练——第二十一题 十字链表
  2. Linux内核中ioremap映射的透彻理解
  3. 深度学习之循环神经网络(3)梯度传播
  4. 逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总
  5. uiwebview 修改html,修改UIWebView加载的html文本属性
  6. 未能加载文件或程序集System.EnterpriseServices
  7. opencv读取文件路径
  8. Python核心编程(第三版)课后习题解答——第二章
  9. 网络摄像头的地盘争夺战——四款僵尸软件的技术解析
  10. 6.Linux中的进程管理
  11. 锐浪报表,用脚本处理字段
  12. win7网络不显示共享计算机,win7系统看不到局域网其他计算机怎么办
  13. 图像处理系列——图像融合之加权平均(WA)
  14. 寒假训练1—H(第一次写出结构体数组)
  15. PICTURE writeup By K龙
  16. 计科实训 餐馆点菜系统
  17. CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”
  18. 识别图片上的文字,如何在线识别?
  19. 天涯论坛为什么不能删除或修改自己发表的贴子
  20. GPT 分区如何调整为 MBR 分区

热门文章

  1. Python django 个人博客系统源码
  2. Qwt笔记(二)之QwtPlot简单使用
  3. 举步维艰——如何调试显示器点亮前的故障
  4. 模式识别 K-mean|KNN
  5. 图书馆中计算机管理属于,在图书馆中使用计算机管理属于________
  6. stm32毕业设计 智能小车 自动泊车系统
  7. (单细胞-SingleCell)Seurat流程文献复现——单细胞实战分析流程
  8. python温度传感器_基于python通过树莓派获取温度传感器的温湿度
  9. php网站开题报告该怎么答辩,建置Web的管理介面for php,毕业论文设计,答辩ppt,开题报告,外文翻译,硕士研究生...
  10. 蚂蚁市值25万亿?互联网的“后棚”买卖,你我都逃不过