整合第三方登录之微信扫码登录

news2025/6/11 8:51:43

📂文章目录

  • 🎓前言
  • 🏷️引入相关依赖
  • 🧱操作步骤
    • 📔生成微信登录二维码
    • 📔获取微信用户信息并实现微信注册登录
  • 💗总结


🎓前言

前置条件:具备微信开发者资质。

通过微信开放平台注册、完善开发者资料、申请开发者资质认证(需要300大洋,大概7个工作日内审核)

申请完成之后,在微信开发平台配置扫码登录成功后的重定向url地址即可。


提示:以下是本篇文章正文内容,下面案例可供参考

🏷️引入相关依赖

<!--httpclient-->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>
<!--commons-io-->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
</dependency>
<!--gson-->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>

加粗样式使用到的工具类:

1、HttpClientUtils.java
https://edu-qihang.oss-cn-shenzhen.aliyuncs.com/%E6%95%B4%E5%90%88%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E5%BD%95%E4%B9%8B%E5%BE%AE%E4%BF%A1%E6%89%AB%E7%A0%81%E7%99%BB%E5%BD%95%E6%96%87%E7%AB%A0/HttpClientUtils.java

2、JwtUtils.java
https://edu-qihang.oss-cn-shenzhen.aliyuncs.com/%E6%95%B4%E5%90%88%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E5%BD%95%E4%B9%8B%E5%BE%AE%E4%BF%A1%E6%89%AB%E7%A0%81%E7%99%BB%E5%BD%95%E6%96%87%E7%AB%A0/JwtUtils.java

🧱操作步骤

📔生成微信登录二维码

所需前置参数:app_id、app_secret、redirect_url(资质申请完成后,获取到相应参数信息)

代码如下(示例):

@ApiOperation("生成微信登录二维码")
@GetMapping("/login")
public String getWxCode() {
    // 生成微信二维码的固定写法
    String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
            "?appid=%s" +
            "&redirect_uri=%s" +
            "&response_type=code" +
            "&scope=snsapi_login" +
            "&state=zbinyds" +
            "#wechat_redirect";
    String redirectUrl = '您配置的扫码登录成功后的重定向url地址';
    try {
        // 对url进行编码
        redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        throw new QiHangException("20001", "url编码异常");
    }
    String url = String.format(baseUrl, '您的app_id', redirectUrl);
    return "redirect:" + url;
}

在这里插入图片描述

📔获取微信用户信息并实现微信注册登录

注意:这里接口的请求地址,必须要和您配置的重定向url一致,扫码成功之后就会调用这个接口。

代码如下(示例):

@ApiOperation("获取微信用户信息并实现微信注册登录")
@GetMapping("/callback")
public String getUserInfo(@ApiParam("临时票据") String code, @ApiParam("请求状态") String state) {
    // 获取扫描二维码的微信用户信息
    try {
        /**
         * 第一步:根据code响应码,请求官方提供的指定接口,得到access_token(接口调用凭证)。
         */
        // 拼接好指定接口的参数信息
        String AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
                "?appid=%s" +
                "&secret=%s" +
                "&code=%s" +
                "&grant_type=authorization_code";
        AccessTokenUrl = String.format(
                AccessTokenUrl,
                '您的app_id',
                '您的app_secret',
                code
        );
        // 发送请求,获取到accessTokenInfo,里面包含了我们需要的字段access_token和openid。
        String accessTokenInfo = HttpClientUtils.get(AccessTokenUrl); // 此时类型为String
        log.info("accessTokenInfo:" + accessTokenInfo);
        // 使用Gson进行类型转换,从String转换成Map类型。
        Gson gson = new Gson();
        HashMap accessTokenMap = gson.fromJson(accessTokenInfo, HashMap.class);
        String accessToken = (String) accessTokenMap.get("access_token");
        String openId = (String) accessTokenMap.get("openid"); // 微信用户唯一标识
 
        // 查询该用户是否已注册
        Member member = memberService.getOpenIdMember(openId);
        // 未注册进行注册
        if (Objects.isNull(member)) {
            /**
             * 第二步:根据access_token,请求官方提供的指定接口,得到微信登录用户的基本信息。
             */
            // 拼接获取用户基本信息的url
            String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId;
            String userInfo = HttpClientUtils.get(userInfoUrl);
            log.info("当前登录微信用户的基本信息(用户昵称、头像):" + userInfo);
            // 进行类型转换,从String转换成Map类型。
            HashMap userInfoMap = gson.fromJson(userInfo, HashMap.class);
 
            // 将微信登录用户进行注册
            String headImgUrl = (String) userInfoMap.get("headimgurl"); // 用户头像
            String nickName = (String) userInfoMap.get("nickname"); // 用户昵称
            member = new Member();
            member.setNickname(nickName);
            member.setAvatar(headImgUrl);
            member.setOpenid(openId);
            memberService.save(member);
        }
        // 根据member对象,生成token字符串。
        String token = JwtUtils.getJwtToken(member.getId(), member.getNickname());
 
        // 登录成功,携带token并跳转到首页面。
        return "redirect:http://localhost:3000?token=" + token;
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("请求失败!");
    }
}

💗总结

到这里,就是项目整合微信登录的全过程啦~

官方文档参考

1.如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞”✍️评论” “💙收藏” 一键三连哦!
2.💗【👇🏻👇🏻👇🏻关注我| 💬获取更多源码 | 优质文章】 带您学习各种前端插件、3D炫酷效果、图片展示、文字效果、以及整站模板 、大学生毕业HTML模板 、期末大作业模板 、等! 「在这里有好多
前端 开发者,一起探讨 前端 Node 知识,互相学习」!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Contest2874 - 【在线编程平台】2022年计算机类数据结构作业14.20221215-1220

目录 问题 A: 大顶堆还是小顶堆&#xff1f; 问题 B: sort by age 问题 C: 统计字母个数 问题 D: 字母排序 问题 E: 算法10-6~10-8&#xff1a;快速排序 问题 A: 大顶堆还是小顶堆&#xff1f; 内存限制&#xff1a;128 MB时间限制&#xff1a;1.000 S标准输入输出 题目类…

数学建模国赛 2020B-穿越沙漠 第二关至第六关思路分享

穿越沙漠第二关至第六关思路 开始讲题之前唠嗑一下&#xff1a; 很感谢所有读者和粉丝对上一篇的第一关解题博文的喜欢&#xff0c;也收到很多人的称赞&#xff0c;我很高兴大家能喜欢我写的东西。 其实这道题的模型在建立之处就是对着六关通用的目标去写的&#xff0c;因为本…

现货黄金时间表怎么安排?

现货黄金交易时间表&#xff0c;最好每一个投资者打印一份出来&#xff0c;放在你的电脑旁边。为什么呢&#xff1f;以前我对现货黄金交易时间表也没有特别关心&#xff0c;为什么在二十四小时的全天候交易要花时间到这里面来呢&#xff1f; 黄金市场是一个全球性的市场&#x…

APP测试技术:ADB——安卓手机测试一座神奇的“桥”

前言&#xff1a; 近年移动互联网好比IT界的一条浩瀚银河&#xff0c;安卓手机测试可谓其中最璀璨的一颗明珠&#xff0c;这里有一座你不得不熟悉的桥--ADB 曾见过不少相关的文章或培训&#xff0c;不乏空谈多&#xff0c;实战少&#xff1b;期望大&#xff0c;效果差。也见过…

idea上传代码到GitHub,每一步附带注意事项(炒鸡炒鸡详细)

1. idea配置git 2. 在idea里面登录自己的GitHub账号 需要到GitHub生成token 点击后&#xff0c;翻到最底部&#xff0c;点击左侧导航栏的Developer settings&#xff0c;到达下面这张图 最后点击最底部的绿色按钮&#xff0c;然后复制token即可。 3. 在创建本地仓库&#xff0…

【强化学习基础】强化学习的基本概念:状态、动作、智能体、策略、奖励、状态转移

文章目录1.状态&#xff08;State&#xff09;2.动作&#xff08;Action&#xff09;3.智能体&#xff08;Agent&#xff09;4.策略&#xff08;Policy&#xff09;5.奖励&#xff08;Reward&#xff09;6.状态转移&#xff08;State transition&#xff09;7.智能体与环境交互…

生成模型6-重参数技巧

Stochastic Back Propagation &#xff08;Reparametrization Trick&#xff09; 本章主要介绍的是&#xff0c;神经网络用函数逼近器&#xff0c;那么我们将想想神经网络和概率图模型之间有什么关系呢&#xff1f;能不能用NN去逼近一个概率分布呢&#xff1f;把他们两结合到一…

如今的测试行业都怎么了?面试题有必要出这么难吗?

在测试行业摸爬滚打了十年左右的我&#xff0c;时不时会被公司要求去做面试官面试别人。在这段期间我也收到了不少的简历&#xff0c;面试了各种技术不一的人。许多候选人的工作年限都不少&#xff0c;基本都是在3~5年左右&#xff0c;但他们做的都是一些非常传统的项目&#x…

VB知识点-学业水平考试

目录 一、VB中常用的几个基本控件 二、VB工程常识 三、VB常用的基本数据类型​编辑 四、VB常用的标准函数 五、VB的基本运算 六、VB语句 &#xff08;1&#xff09;符号常量定义语句 &#xff08;2&#xff09;变量定义语句 &#xff08;3&#xff09;赋值语句 &…

BAT大厂Python面试题精选,看完后离拿到offer只有一步之遥(含答案)

Python是目前编程领域最受欢迎的语言。在本文中&#xff0c;我将总结华为、阿里巴巴等互联网公司Python面试中最常见的30个问题。每道题都提供参考答案&#xff0c;希望能够帮助你在求职面试中脱颖而出&#xff0c;找到一份高薪工作。这些面试题涉及Python基础知识、Python编程…

AOP注解方式进行增强接口

&#x1f4da;目录&#x1f4da;简介&#xff1a;&#x1f4a8;进阶版&#x1f5fa;️未实现AOP效果&#x1f3a2;创建注解&#xff1a;&#x1f4ad;创建注解切面&#x1f680;使用方式&#xff1a;&#x1f389;结束&#xff1a;&#x1f4da;简介&#xff1a; 需要对AOP有一…

【电商】电商系统---供应商管理

本文以电商系统中的供应商管理为讨论对象&#xff0c;分析了其中的管理、属性、流程等内容&#xff0c;希望能给你带来启发与思考。 前言 前天写了一篇“以商品流转了解系统模块”介绍&#xff0c;里面啰里啰唆的说了很多模块&#xff0c;每个都是系统的组成部分&#xff0c;都…

数字化程度持续推进,元宇宙逐步走向成熟

元宇宙是人类数字化生存的最高形态 根据观研报告网发布的《2022年中国元宇宙行业分析报告-行业现状与发展趋势分析》显示&#xff0c;元宇宙是一个平行于现实世界&#xff0c;又独立于现实世界的虚拟空间&#xff0c;是映射现实世界的在线虚拟世界&#xff0c;是越来越真实的数…

美国访问学者签证材料清单

美国访问学者签证材料清单&#xff1a; 1、有效护照&#xff1a;如果您的护照将在距您预计抵美日期的六个月内过期、或已损坏、或护照上已无空白的签证签发页, 请在前来面谈之前先申请一本新护照。 2、一张照片:于6个月内拍摄的5 X5厘米正方形白色背景的彩色正面照。请将照片用…

【多聚焦图像:GAN:无监督】

MFF-GAN: An unsupervised generative adversarial network with adaptive and gradient joint constraints for multi-focus image fusion &#xff08;MFF-GAN: 具有自适应和梯度联合约束的无监督生成对抗网络&#xff0c;用于多焦点图像融合&#xff09; 从梯度的角度来进行…

【蓝桥杯】第12届Scratch国赛中级组第7题 -- 博士汪出题

[导读]&#xff1a;蓝桥杯大赛是工业和信息化部人才交流中心举办的全国性专业信息技术赛事。蓝桥杯大赛首席专家倪光南院士说&#xff1a;“蓝桥杯以考促学&#xff0c;塑造了领跑全国的人才培养选拨模式&#xff0c;并获得了行业的深度认可。” 春雷课堂计划推出Scratch蓝桥杯…

业务中台的架构案例

业务中台目标 目标&#xff1a; 整体目标&#xff1a;高内聚、低耦合&#xff0c;便于开发和维护。五个方向&#xff1a;性能、可用性、扩展性、伸缩性、安全性。 原因&#xff1a; 单体架构的大泥球会导致业务迭代困难、无法针对性伸缩、故障没有隔离等问题&#xff0c;需要向…

Python核心编程三大神兽——迭代器、生成器 、以及装饰器

装饰器 装饰器概述 装饰器本质&#xff1a;函数闭包的语法糖&#xff0c;一个函数&#xff0c;该函数用来处理其他函数&#xff0c;在不改变源函数的情况下添加功能&#xff0c;装饰器的返回值可以是一个函数对象 使用场景&#xff1a;插入日志&#xff0c;事务处理&#xf…

网心科技入选亿欧《2022年中国边缘计算产业研究报告》

近日,亿欧智库对外发布了《2022年中国边缘计算产业研究报告》,《报告》公布了“边缘计算产业图谱”和“行业新锐:中国边缘计算技术领先企业榜单”两项,网心科技(OneThing)均成功入选,彰显了网心科技在边缘计算领域的技术实力和市场领先地位。 当前,边缘计算与千行百业的深度融合…

51单片机实训day2——创建Keil工程

以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01; 内 容&#xff1a;Keil工程创建 学 时&#xff1a;2学时 知识点&#xff1a;开发固件库介绍…