手把手教程用Java实现微信公众号扫码登录功能

这篇具有很好参考价值的文章主要介绍了手把手教程用Java实现微信公众号扫码登录功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

微信现今是我们必不可少的社交工具了,围绕微信这个生态实际上有很多东西可以做,我们经常会看到一些网站通过微信扫码进如公众号登录。一方面方便了用户登录,另外一方面也可以给公众号带来一定的流量,今天就通过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实现微信公众号扫码登录功能
获取方式一:点击下方链接下载:
Java实现微信公众号扫码登录自己系统的功能,2023最新Java完整代码版本

获取方式二:如果不能下载也可以关注下面公众号与我直接联系。文章来源地址https://www.toymoban.com/news/detail-462536.html

到了这里,关于手把手教程用Java实现微信公众号扫码登录功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java零基础手把手保姆级教程_类和对象(超详细)

    1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合 简单理解:类就是对现实事物的一种描述 类的组成 属性:

    2024年02月05日
    浏览(45)
  • 【抓包教程】微信小程序精准流量抓包教程(超详细 保姆级教程 BP安装证书手把手教)

    1.打开浏览器,右上角打开设置。搜索代理 我们点击最后一个,打开计算机的代理设置。自动跳转到设置界面。 按照如下图配置 这里的地址和端口要和我们BP中的一致,我们需要打开bp看看。 这里配置相同后,我们打开浏览器,输入以下内容,下载证书 点击右上角,会自动下

    2024年02月21日
    浏览(49)
  • 手把手教你实现微信小程序向特定用户推送一次性订阅消息

    目前有一个已 微信认证 的 订阅号 类型公众号,一个 微信认证 小程序,小程序和公众号互相关联。尚不清楚是否必须微信认证或特定类型,因为目前没遇到类型不匹配或相关的问题,发送微信小程序一次性订阅消息的相关限制较少 1、功能介绍 订阅消息推送位置:服务通知

    2024年02月08日
    浏览(52)
  • 100 行代码实现用户登录注册与 RESTful 接口 - 手把手教程附 Python 源码

    在开发大多数应用时,用户系统都是必不可少的部分,而我们总是需要开发围绕用户的登录,注册,获取,更新等接口。在这篇文章将带你用一百多行代码简洁地实现一套这样的用户鉴权与 RESTful 接口,并使用 Session 来处理用户的登录登出 我们将使用 UtilMeta 框架 完成接口开

    2024年02月19日
    浏览(41)
  • 《手把手教你》系列技巧篇(六)-java+ selenium自动化测试-阅读selenium源码(详细教程)

    1.简介 前面几篇基础系列文章,足够你迈进了Selenium门槛,再不济你也至少知道如何写你第一个基于Java的Selenium自动化测试脚本。接下来宏哥介绍Selenium技巧篇,主要是介绍一些常用的Selenium方法或者接口(API),通过这些接口(API)或者方法的具体操作,达到能够熟练使用

    2024年02月03日
    浏览(55)
  • 小白逆袭大神之路:零基础Java教程,手把手教你安装JDK与配置主流IDE

    了解JDK和IDE 首先,让我们来简单了解一下JDK和IDE。 JDK(Java Development Kit) :这是Java开发的核心工具包,包含了Java运行时环境(JRE)、Java编译器(javac)以及其他一些工具。简单来说,没有JDK,你就无法编写或运行Java程序。 IDE(Integrated Development Environment) :这是一个软件

    2024年03月20日
    浏览(48)
  • 手把手教你5种方法实现Java判断字符串是否为数字

    方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; } 方法一通过遍历字符串的每一个字符,并使用 Character.isDigit() 函数检查每一个字符是否是数字。如果字符串中所有字符都是数字,那

    2024年02月07日
    浏览(69)
  • YOLOv8 OBB实现自有数据集缺陷旋转检测,从数据标记格式转换到训练的手把手教程

    💡💡💡 本文内容:YOLOv8 OBB实现自有数据集缺陷旋转检测,从数据标记到训练的手把手教程 YOLO OBB格式通过四个角点指定边界框,坐标在0到1之间归一化。它遵循以下格式: 在内部,YOLO以xywhr格式处理损失和输出,xywhr格式表示边界框的中心点(xy)、宽度、高度和旋转。   直接

    2024年01月16日
    浏览(61)
  • 手把手pip安装教程

    在Python中,pip是最常用的包管理工具之一。它可以用于安装、卸载和管理Python包。在本文中,我们将手把手教你如何安装pip,以便能够更方便地安装和管理Python包。 在安装pip之前,我们需要确认已经正确安装了Python,并确定其版本。在命令行中输入以下命令,确认Python版本:

    2024年02月11日
    浏览(62)
  • 【iOS内购支付】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程)

    Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希望能给正在做uniapp开发ios应用需要使用苹果内购支付的小伙伴一些帮助! 原

    2023年04月25日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包