Java后台实现网站微信扫码登录功能,获取用户openid,及微信用户信息(小程序码方案),关联微信小程序(个人主体小程序也可以)

微信公众号二维码扫码登录(SpringBoot Java实现) 用户扫描公众号的二维码,实现登录当前平台。 若未关注公众号,则关注后触发登录;若已关注,则直接登录。 登录时通过union_id判断用户是否在系统注册,若未注册则跳转到注册页面或提示未注册。 阅读详情
AI摘要

本文基于微信小程序实现扫码登录功能,用于同步网站与小程序用户数据、获取用户微信基本信息。介绍了注册小程序、获取小程序码、前端处理等操作流程,还给出时序图及方案实现步骤,提供开源项目封装相关接口。

目录

目录

前言

下面展示操作流程

注册微信小程序

通过后台获取小程序码

前端处理

时序图理解

方案实现步骤


前言

很多业务场景之下我们需要实现 微信扫码登录 的需求,如:

  • 同步网站与小程序的用户数据。
  • 需要获取用户微信相关基本信息,如头像、id等

实例:小程序上的用户 收藏内容与网站收藏相同。或登录网站后也 查看自己的订单信息。

本方案将基于 微信小程序 来实现这一功能。(ps:这是实现微信登录的其中一套方案)


前置知识

首先我们要知道微信创建的每一个有 appId 的程序,注册之后,每个微信用户在这个小程序里会有一个唯一用户标识 openid,对于用户相关的业务可以基于这点展开。

整体认证流及获取 小程序码(扫码登录的码)的过程对于第一次接触的人来说有点小复杂,可以看我的 开源项目,已经对这些过程进行了封装。

注:项目提供两套方案:

都是开箱即用,填写配置信息:注册后的信息如 appId等即可直接调用

1、第一套方案,即本博客实现方案,耦合度相对较高,需要设置对应的数据库字段等。

2、无侵入式的方案 ,提供便捷 api 帮助一键直接获取小程序码。灵活插入个人业务逻辑。

直接获取并保存小程序码到磁盘中,简单快捷。

如果项目帮助到你,记得点个 star 哦!🌹

 github地址

https://github.com/Durancer/wx-login-based-on-miniapp.git


 gitee地址:

Wx-login-based-on-miniapp: 基于 springboot 实现微信扫描小程序码登录,获取用户微信信息

下面展示操作流程

  • 注册微信小程序

此方案是基于小程序获取用户信息的方案,因此之前你需要注册一个小程序。

如何注册微信小程序

  • 通过后台获取小程序码

这里先简单介绍 小程序码 和 小程序二维码 的区别。

两个码都差不多都长这个样,实现之后,图标会是自己小程序的图标。

小程序二维码 就是我们平时扫描的,进入小程序的二维码。

而小程序码是我们通过接口生成的 扫描后 可以进入指定页面(这里就是我们的认证界面),并能携带一个参数(scene值),在认证界面进行接收。我们的登录逻辑也将根据这个值展开

可以查看微信开放文档的相关api

获取小程序码 | 微信开放文档

小程序码获取流程

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
  • 在通过 access_token 获取到 小程序码,这里在 postman直接发送请求可以直接获取到图片,发送获取小程序码的请求是需要传入一个 scene 值的(此套扫码登录方案就是在成功创建小程序码后添加一条数据库信息来 检测此码的扫描和认证状态 ),如果是在Java后台发送,我们需要以 InputStream流 的形式来接收。然后通过流的形式来保存图片到本地或者服务器(开源项目里已经都做过封装处理了)

获取不限制的小程序码 | 微信开放文档

POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

注意事项

  • 如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。
  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 接口只能生成已发布的小程序码
  • 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成

因此,我们就是通过 scene 值来区分和标记用户扫的码是哪一张 的

  • 前端处理

PC端扫码

到了这里说明我们已经保存了刚才请求接口所生成的 小程序码 到服务器的某个文件夹下,那么我们只需要通过某种方式将此图片映射到前端上显示即可。可以通过配置 springMVC 静态资源映射(tomcat映射) 或者 nginx 映射 即可。本开源项目使用 tomcat映射。ps:当然图片都保存了,怎么显示要做修改也就简单了

移动端认证

扫描小程序码将进入我们编写的指定页面,我们只要拿到scene值,就可以开始进行业务逻辑处理了。

获取 scene 值

  • scene 字段的值会作为 query 参数 传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后,开发者可以获取到二维码中的 scene 值,再做处理逻辑。
  • 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 encodeURIComponent

也就是说,每一张生成的小程序码都是不一样的,它除了能够进行扫码进到指定的页面,还会携带一个 scene 参数,让我们进行需要的业务逻辑。同时scene值也保证了小程序码的 唯一性

我们需要在小程序中写一个,类似这样的界面,扫描二维码,将进入这个界面

在页面的js文件中,我们可以这样获取到这个 scene值

Page({
  onLoad (query) {
    // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
    const scene = decodeURIComponent(query.scene)
  }
})

接下来就可以进行我们需要的业务逻辑了,本文主要描述登录的需求。在文首文末的开源项目里有完整认证逻辑参考的 js 文件

时序图理解

为了更好的理解登陆逻辑我们可以先来看看登录的 时序图

方案实现步骤

 准备工作。我们需要准备两个表 一个是用户信息表,一个是 小程序码状态表 也就是存放 scene值 的表,当然,这个表在认证成功之后需要关联用户id,来告知前端认证用户的信息。

小程序码状态表为 status 扫码状态、scene场景值

  • 获取小程序码时,在后台数据库创建一条数据,并返回前端scene值。如下图所示

此时user_id是没有值的,并且状态是等待扫码。

  • 之后网站端根据 scene值 轮询 该条数据的认证状态。用扫码状态作为是否继续轮询的依据
  • 扫码进入后更新扫码状态为 正在扫码。(即在 onload函数发送请求,修改数据库)

  • 用户点击认证或者取消认证,更改扫码状态为对应的状态。当web端获取到的 状态为 取消认证或已认证时,即可结束轮询。已认证将在修改状态之前先插入用户信息。(因为认证了才知道用户信息)

先插入用户表用户信息,(用户数据就是在小程序得到的,可以调用小程序的api获取)

 同样,根据scene值,修改登录表

可以看到到这一步,扫码状态已经变成了 success,表示认证成功,如果用户取消认证将为 cancel

并且有了userId。

  • 我们将查询 status为 success 的数据,如果是已认证,我们需要先结束轮询。该项数据库数据将会携带刚才加入的 userId,如上图所示。web端可以根据userId查询到认证用户的信息。
  • 为了避免造成资源的浪费和数据库垃圾信息。在已认证或取消认证后应该删除登录表有关信息

然后完成登录相关的操作,当然关于 token 相关的内容需要在业务中再添加,本篇主要关注于 如何实现扫码得到用户 openid

这些操作的接口我都已经在开源项目

 github:

https://github.com/Durancer/wx-login-based-on-miniapp.git


 gitee:

Wx-login-based-on-miniapp: 基于 springboot 实现微信扫描小程序码登录,获取用户微信信息

做好了封装,有不理解的地方可以到 github、gitee 上提 issue,

如果觉得本文和项目项目有帮助的话,欢迎大家star项目。

最后可以看看我的其它开源项目软件: i集大校园

开源地址:GitHub - Durancer/JMU-Campus: i集大校园软件服务端,基于SpringCloud Alibaba 微服务组件及部分分布式技术实现服务之间关联及协作进行前后端分离项目实现。计划实现微信小程序和app两端同步。

使用技术栈为:Spring Boot、Spring Cloud Alibaba、rabbitMQ、JWT、minIO、mysql、redis、ES、docker

前端使用 微信小程序编写。

欢迎一起参加贡献和star项目哈!

PC网站实现微信扫码登录功能(二) 上篇我们介绍了怎么申请账号以及最后拿到appId和appSecret,如果有不清楚的可以看一下 PC网站实现微信扫码登录功能(一) 下面我就来说一下怎样在PC端怎么实现扫码登录功能。 一、进入官方文档网站 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 其实官网对过程描述的已经非常细致了。并且提供了两种扫码方式。一种是跳转二维码扫描页面,另一种是内嵌式二维码。大家可以 阅读详情

相关推荐

JAVA版微信公众号获取openId,微信用户信息

一. 前端页面js 1.获取页面传来的数据 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != ...

434494584_磊 4731

Java实现微信扫码登录

微信扫码授权登录

Cike___的博客 1万+

【AWS】创建aws云服务器EC2实例

本文介绍了如何创建aws的EC2云服务器,并介绍了如何使用Xshell远程连接上云服务器

Marcos921的博客 2500

Java 实现微信扫码登录方法(提供前端及后端核心代码)

Java 实现微信扫码登录方法(提供前端及后端核心代码)

gdgztt的专栏 4031

【FPGA】DDR3调试总结

DDR3管脚根据不同的功能可以分为:数据组、地址组、控制组和电源组。如图上所示,共96个管脚。

m0_51679724的博客 4965

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

微信扫码登录(java)

操作流程:在微信的登录界面上,用户可以选择“扫码登录”选项。此时,系统会生成一个二维码,并提示用户使用另一台设备(如手机)打开微信扫一扫功能进行扫描。在另一台设备上打开微信扫一扫功能后,将摄像头对准二维码进行扫描,微信会自动识别并验证二维码的有效性。验证成功后,登录设备将显示用户的微信账号信息,用户只需点击确认登录按钮即可完成登录过程。应用场景:微信扫码登录广泛应用于各种场景,如电脑端微信登录、网页版微信登录、小程序登录等。此外,许多第三方应用也支持微信扫码登录功能,方便用户快速登录并授权访问相关信息。

zip7986的博客 6514

CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式

由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。

shmily_i的博客 1939

Java 读写二维码

Java 使用Zxing生成二维码、读取二维码内容

Mointor 1855

30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践

在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能

weixin_29032489的博客 1445

SAP成本计划BAPI接口BAPI_COSTACTPLN_POSTPRIMCOST深度解析与实战指南

在SAP ERP系统中,成本计划是财务与控制模块的核心功能,它涉及对企业未来成本支出的预测与规划。其原理是通过结构化数据模型,将成本要素分配到具体的成本对象上,以实现预算编制和成本控制。这一技术的核心价值在于实现成本数据的标准化、自动化处理,从而提升财务流程效率与数据准确性。在应用场景上,成本计划广泛应用于年度预算编制、项目成本预测、系统间数据集成以及历史数据迁移等关键业务环节。本文聚焦于实现上述流程自动化的关键技术——SAP标准接口BAPI_COSTACTPLN_POSTPRIMCOST,并深入探讨其在高

weixin_29657209的博客 349

java扫一扫登录微信

在你的后端服务器上,使用Java编写代码调用微信提供的API生成网页授权的二维码。你需要提供你的公众号的AppID和AppSecret等信息来获取access_token,然后用access_token来请求生成二维码的URL。用户扫描二维码后,微信会将扫描结果(包括用户的openid和授权信息)发送到你指定的回调URL。首先,你需要在微信公众平台注册一个公众号或小程序,以获取必要的API权限和凭证。将生成的二维码图片URL返回给前端,前端在页面上展示二维码给用户扫描。

zhichengcloub的博客 1034

1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务

本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1796

java实现微信二维码登录(公众号)

要设置推送消息的url接口和token,目的:之前关注过公众号或者扫码后关注公众号,微信会调用我们这里填写的url接口(像回调,但微信文档说的是推送消息,很多事件都会用到这个接口)如果你想要通过openId获取unionId等用户信息,可以调用下面的方法(测试号没办法获取unionId)3.接收推送消息的代码,就是我们配置url和token的内容调用的接口(放入前面的controller中)2.使用微信公众平台的二维码登录(对接公众号)1.使用微信开放平台的二维码登录(对接微信)2.生成二维码的代码。

weixin_45441597的博客 3368

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 281

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java实现微信扫码登录并实现认证授权

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的 AppID 和 AppSecret,申请微信登录且通过审核后,可开始接入流程。

dedede001的博客 6999

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

微信扫码登录-java

步骤:1.微信开放平台注册2.完善开发者信息3.申请创建4.填写对应信息 然后坐等审核通过申请创建网站应用 授权回调地址 必须是域名 不能用ip 不能带端口。

墙上的向日葵。 851

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java 实现微信扫码授权登录

背景知识,如果用户没有点击授权信息的话,从微信扫码只能够获得用户的 OpenId,其他信息都获取不到,但是一般我们登录流程的话是需要用户的昵称,头像,通过用户的授权,我们就可以直接获取到了,不用用户再次设置,这里用户的手机号也是不能获取到的。用户扫码(只能或者一个带有参数的url,要转化成二维码,这里没有用前端了直接用草料二维码进行转换),如果用户扫码了以后没有关注公众号,那么当用户点击关注以后才会推送扫码关注事件,如果用户已经关注了那么手机会直接定位到会话页面用测试生成url@Autowired。

Go_ahead_forever的博客 2086

java读写条形码、二维码

【代码】java读写条形码、二维码。

qq_38759137的博客 1297

微信二维码扫码获取openid

扫描二维码后,通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。第一步 确定回调域名,即扫描二维码后你需要跳转的后台URL,例如:http://myWechatTest.top/myProject/wechat_queueInfo.do?user=abc&pwd=123456http://myWechatTest.top  --> 我的外网域名,类似于localhost:8...

steven.yang 3万+

java微信二维码登录

1、注册 微信开放平台:https://open.weixin.qq.com 2、邮箱激活 3、完善开发者资料 4、开发者资质认证 准备营业执照,1-2个工作日审批、300元 5、创建网站应用 提交审核,7个工作日审批 6、内网穿透 ngrok的使用 2.2 授权流程 参考文档:微信开放文档 说明:微信登录二维码我们是以弹出层的形式打开,不是以页面形式,所以做法是不一样的,参考如下链接,上面有相关弹出层的方式 准备工作 | 微信开放文档 如图: 开发步骤 ..

weixin_67601403的博客 5727

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

微信现今是我们必不可少的社交工具了,围绕微信这个生态实际上有很多东西可以做,今天就通过`Java SpringBoot`项目来用微信公众号参数二维码实现扫码登录。实现的方式很多,今天介绍一下我的思路。

黑夜开发者的博客 5261

基于java服务端实现二维码扫描

在Java中,可以使用第三方库来识别二维码内容。一个常用的库是ZXing(Zebra Crossing),它提供了强大的二维码处理功能。首先,确保已将ZXing库添加到项目中。可以手动下载ZXing JAR文件,也可以使用构建工具(如Maven或Gradle)来管理依赖。在上述代码中,首先通过方法将二维码图片加载为对象。然后,创建对象,它将作为参数。接下来,使用将转换为。使用创建Reader对象,并调用decode()方法传入来解码二维码。最后,通过Result对象获取二维码的内容。

不爱运动的跑者 6840

Java实现扫码微信登陆(获取登陆成功的用户信息 + 包含使用vue怎么显示登陆二维码)

Java实现扫码微信登陆

GSZTK的博客 4428

记录:Java实现微信扫码登录

微信开放平台进行开发者资质认证(只有企业才能认证),然后得到appid和app_secret,然后配置’redirect_url’也就是扫码成功后跳转的地址。

weixin_45947759的博客 2572

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

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

Hi,我是 pengles,一名专注于全栈开发的工程师。 3401
上一篇: 使用 SpringBoot 轻松实现网站微信扫码支付 以及 支付后回调逻辑处理(含代码示例,基于JavaJDK实现)
下一篇: 基于Redis中 Zset数据类型实现各类高性能排行榜日榜、周榜(附上整合SpringBoot示例代码)
durancer
博客等级 码龄6年 5130粉丝 22原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

durancer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值