当前位置: 首页 > news >正文

微信小程序登录流程详情及Java代码

一、流程图

在这里插入图片描述

说明:

调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取
用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号,调用wx.getPhoneNumber() ,获取加密串
encryptedData 和加密算法的初始向量 ivStr 传到后台,用会话秘钥session_key ,调用
wxMaService.getUserService().getPhoneNoInfo(session_key,encryptedData
,ivStr )获得解密后的数据; 获取其他用户信息,调用wx.getUserInfor() ,获取加密串 encryptedData
和加密算法的初始向量 ivStr 传到后台,用会话秘钥session_key ,调用
wxMaService.getUserService().getUserInfor(session_key,encryptedData
,ivStr )获得解密后的数据; 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
临时登录凭证 code 只能使用一次.
密文串要用 json 格式传输,不能用参数拼接的方式,会把密文串的加号转换为空格,导致解密失败。

二、后端相关代码

1、添加依赖

    <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>4.5.0</version></dependency>

2、微信jar包实体类 WxMaService wxMaService;

3、根据code获取session_key和openId

WxMaJscode2SessionResult sessionResult = wxMaService.jsCode2SessionInfo(code);

4、获取手机号

弃用方法:

WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(SessionKey,EncryptedData,IvStr);

建议使用方法:

 WxMaPhoneNumberInfo  wxMaPhoneNumberInfo = wxMaService.getUserService().getPhoneNoInfo(code);

5、获取用户信息

 WxMaUserInfo  wxMaUserInfo = wxMaService.getUserService().getUserInfo(SessionKey,EncryptedData,IvStr);

手机号快速验证组件官网地址
在这里插入图片描述
6、 完整代码如下

   /*** 小程序一键登录** @return openId*/@GetMapping("/mini/login")public AjaxResult miniProgramLogin(@RequestParam("code") String code) {return AjaxResult.success(minUserService.miniProgramLogin(code));}/*** 获取手机号** @return com.sense.common.utils.ResultMap* @date 2024/6/21 11:24*/@GetMapping("/mini/getPhoneNoInfo")public AjaxResult getPhoneNoInfo(@RequestParam("code") String code) {return AjaxResult.success(minUserService.getPhoneNoInfo(code));}
    @Overridepublic JSONObject miniProgramLogin(String code) {try {WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);//查询是否存在,不存在则新增用户MinUser minUser = loginOrRegister(session.getOpenid());JSONObject object = new JSONObject();object.put("openId", session.getOpenid());object.put("privacyStatus", minUser.getPrivacyStatus());object.put("sessionKey", session.getSessionKey());log.info("{}-登录成功:{}", minUser.getUserNickName(), session.getOpenid());//记录登录日志iMinOperationLogService.insertMinOperationLog(session.getOpenid(), minUser.getUserNickName(), "小程序登陆");return object;} catch (WxErrorException e) {log.error("获取微信授权信息失败:{}", e.getMessage(), e);throw new ServiceException("登陆失败", HttpStatus.ERROR);}}@Overridepublic WxMaPhoneNumberInfo getPhoneNoInfo(String code) {try {return wxMaService.getUserService().getPhoneNoInfo(code);} catch (WxErrorException e) {log.error("获取用户手机号失败: {}", e.getMessage());throw new ServiceException("获取用户手机号失败");}}

相关文章:

微信小程序登录流程详情及Java代码

一、流程图 说明&#xff1a; 调用 wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。 调用 auth.code2Session 接口&#xff0c;换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号&#xff0c;调用wx.getPhoneNumber() &#xff0c;获取加密…...

c++qt合并两张灰度图像

需求&#xff1a;将两张尺寸相同的灰度图像进行合并&#xff0c;合并后的图像&#xff0c;每个像素点灰度值为两张原图对应像素点灰度值之和。若超过255&#xff0c;则最大为255。 方法一&#xff1a; 将图像读取为cv::Mat&#xff0c;再调用opencv的cv::add方法&#xff0c;进…...

Uniapp通过年月日时间转变星期格式

效果图 参靠微信小程序&#xff1a;日常记一记 代码 <view v-for"(d,index) in dataList" >{{getWeekDay(d.ctime)}} //时间格式&#xff1a;2024-06-21</view> js export default {data(){return {dataList:[],//时间数组}},onLoad() {this.loadList…...

如何编写和执行高效的测试计划

如何编写和执行高效的测试计划 1. 测试计划概述2. 测试阶段详解3. 测试计划模板4. 关键注意事项总结 1. 测试计划概述 测试计划是指导整个测试过程的重要文档&#xff0c;其中包含了测试策略、资源分配、进度安排以及风险评估等内容。 一个完善的测试计划应当包括以下几个主要…...

【MySQL连接器(Python)指南】03-MySQL连接器(Python)安装

文章目录 前言1. 从二进制发行版中安装连接器1.1 使用pip安装MySQL连接器1.2 使用MySQL Yum Repository安装1.3 使用Debian软件包安装连接器2. 从源代码发行版安装连接器2.1 在Windows上源码安装2.2 在类Unix系统上源码安装3. 验证连接器安装总结前言 MySQL连接器(Python),用于…...

Spring Boot组件化与参数校验

Spring Boot组件化与参数校验 Spring Boot版本选择 2.3.x版本 2.6.x版本 Spring Boot核心思想 约定大于配置&#xff0c;简化繁琐的配置 Spring Boot自动配置原理 SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类&#xff0c;Spr…...

实现可扩展的电商返利平台:技术选型与挑战

实现可扩展的电商返利平台&#xff1a;技术选型与挑战 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在当今数字化和电商兴盛的时代&#xff0c;返利平台成为…...

从0开始C++(三):构造函数与析构函数详解

目录 构造函数 构造函数的基本使用 构造函数也支持函数重载 构造函数也支持函数参数默认值 构造初始化列表 拷贝构造函数 浅拷贝和深拷贝 析构函数 总结 练习一下ヽ(&#xffe3;▽&#xffe3;)&#xff89; 构造函数 构造函数的基本使用 构造函数是一种特殊的成…...

行车记录仪文件夹“0字节”现象解析与恢复策略

一、行车记录仪文件夹“0字节”现象描述 行车记录仪作为现代驾驶中的必备设备&#xff0c;其储存的视频数据对于事故记录和取证至关重要。然而&#xff0c;有时车主们可能会遇到这样一个问题&#xff1a;行车记录仪的某个文件夹内的文件突然变成了0字节大小&#xff0c;无法正…...

呼叫中心系统的功能都有哪些?okcc呼叫中心pscc磐石云呼叫系统部署

当前电话营销普及到各行各业&#xff0c;方便快捷成了大部分企业在宣传自己公司的产品时必用的一种营销方式&#xff0c;但是电话营销在管理上也存在许多问题。例如&#xff1a;销售员与客户沟通前&#xff0c;未能详细了解客户的资料&#xff1b;多名销售员重复拨打同一个客户…...

2024.06.08校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、提前批 | 中电锦江2025届提前批招聘 提前批 | 中电锦江2025届提前批招聘 2、实习 | 国电电力2025届暑期实习生计划启动&#xff01; 实习 | 国电电力2025届暑期实习生计划启动&#x…...

Polyplus——转染试剂专业供应商

PolyPlus-transfection是一家专业的转染试剂研发和生产的生物技术公司&#xff0c;拥有20年的的转染试剂研发经验&#xff0c;通过创新的核酸转染解决方案支持基因和细胞治疗、生物制剂制造和生命科学研究。目前已经通过了ISO 9001: 2000质量体系认证&#xff0c;已经开发了一系…...

微服务架构-线上治理、线下治理与架构演进

目录 一、线上治理 1.1 概述 1.2 线上预案体系 1.2.1 概述 1.2.2 变更引起的故障 1.2.3 流量和容量变化引起的故障 1.2.4 依赖故障 1.2.5 机房、网络等硬件和环境故障 1.2.6 其他 1.2.7 故障的场景化 1.3 基于Metric的预案自动触发 1.4 治理参数动态调整 1.4.1 举例…...

网络安全:什么是SQL注入

文章目录 网络安全&#xff1a;什么是SQL注入引言SQL注入简介工作原理示例代码 攻击类型为什么SQL注入危险结语 网络安全&#xff1a;什么是SQL注入 引言 在数字化时代&#xff0c;数据安全成为了企业和个人最关心的问题之一。SQL注入&#xff08;SQL Injection&#xff09;是…...

从零开始精通Onvif之网络配置

&#x1f4a1; 如果想阅读最新的文章&#xff0c;或者有技术问题需要交流和沟通&#xff0c;可搜索并关注微信公众号“希望睿智”。 概述 网络配置是Onvif规范中的重要组成部分&#xff0c;允许用户通过网络远程配置和管理设备的网络设置&#xff0c;比如&#xff1a;DHCP、IP地…...

在 macOS 上使用 Homebrew 安装和配置 Python 及 Tk 库

在 macOS 上&#xff0c;系统自带的 /usr/bin/python3 版本较旧&#xff0c;且直接升级系统自带的 Python 版本可能会影响系统稳定性。因此&#xff0c;推荐使用 Homebrew 来安装和管理 Python 及其相关库。本文将详细介绍如何通过 Homebrew 安装和配置 Python 3 及 Tk 库&…...

【机器学习 复习】第2章 线性回归及最大熵模型

一、概念 1.回归就是用一条曲线对数据点进行拟合&#xff0c;该曲线称为最佳拟合曲线&#xff0c;这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归&#xff0c;大于一个自变量 叫 多元线性回归。 &#xff08;1&#xff09;多元回归&#xff1a;两个x&#xff0c;一个…...

关于椭圆的方程(有Python画的动图)

关于椭圆的方程&#xff08;有Python画的动图&#xff09; flyfish 几何定义 椭圆是平面上所有到两个固定点&#xff08;焦点&#xff09;的距离之和为常数的点的集合。这两个固定点叫做焦点。 解析几何描述 设椭圆的两个焦点为 F 1 F_1 F1​ 和 F 2 F_2 F2​&#xff…...

selenium常见难点解决方案

勾选框勾选问题 勾选框代码逻辑实现过程&#xff1a; 第一步&#xff1a;首先找到勾选框的元素&#xff1b; 第二步&#xff1a;检查它是否已经被勾选。如果已经勾选&#xff0c;则进行取消勾选操作&#xff1b;如果未勾选&#xff0c;则进行点击勾选操作&#xff1b; 以下是一…...

【Python高级编程】 综合练习-使用OpenCV 进行视频数据处理

综合练习 读取一个视频文件&#xff0c;对其进行处理后保存为一个新的视频文件。具体的处理步骤包括调整帧大小、转换为灰度图像、垂直翻转画面以及添加高斯噪声。 下面是代码的详细实现&#xff1a; import cv2 import numpy as np# 定义一个函数&#xff0c;用来给图像添加…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...