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

微信小程序登陆

一  问题引入

我们之前的登陆都是:网页http传来请求,我们java来做这个请求的校验。

但是如果微信小程序登陆,就要用到相关的api来实现。

二  快速入门

1  引入依赖

官方依赖,在里面找合适的,去设置版本号。由于我这里在父工程就设置过了,所以省略

Maven Repository: com.github.binarywang » weixin-java-miniapp (mvnrepository.com)

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

2  配置类

使用微信小程序api要设置微信小程序的id和密钥。我们在yml文件设置,并自己设置配置类来读取

wx:miniapp:appId: 你的微信小程序id  # 小程序微信公众平台appIdsecret: 你的微信小程序id秘钥  # 小程序微信公众平台api秘钥
@Component
@Data
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxConfigProperties {private String appId;private String secret;
}

3  将微信小程序对象放入spring中

package com.atguigu.daijia.customer.config;import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class WxConfigOperator {@Autowiredprivate WxConfigProperties wxConfigProperties;@Beanpublic WxMaService wxMaService() {//微信小程序id和秘钥WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();wxMaConfig.setAppid(wxConfigProperties.getAppId());wxMaConfig.setSecret(wxConfigProperties.getSecret());WxMaService service = new WxMaServiceImpl();service.setWxMaConfig(wxMaConfig);return service;}
}

4  具体实现登陆

service层

实现思路:前端约定,从前端传来code,传回去用户的id。

我们先用微信小程序的方法来解析code,获得openid。判断是否是第一次登陆。如果是,则将信息保存到数据库,并返回用户id。如果不是直接返回用户id。

package com.atguigu.daijia.customer.service.impl;import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.atguigu.daijia.customer.mapper.CustomerInfoMapper;
import com.atguigu.daijia.customer.mapper.CustomerLoginLogMapper;
import com.atguigu.daijia.customer.service.CustomerInfoService;
import com.atguigu.daijia.model.entity.customer.CustomerInfo;
import com.atguigu.daijia.model.entity.customer.CustomerLoginLog;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, CustomerInfo> implements CustomerInfoService {@Autowiredprivate WxMaService wxMaService;@Autowiredprivate CustomerInfoMapper customerInfoMapper;@Autowiredprivate CustomerLoginLogMapper customerLoginLogMapper;// 微信小程序登陆@Overridepublic Long login(String code) {//1 获取code值,使用微信工具包对象,获取微信唯一标识openidString openid = null;try {WxMaJscode2SessionResult sessionInfo =wxMaService.getUserService().getSessionInfo(code);openid = sessionInfo.getOpenid();} catch (WxErrorException e) {throw new RuntimeException(e);}//2 根据openid查询数据库表,判断是否第一次登录//如果openid不存在返回null,如果存在返回一条记录//select * from customer_info ci where ci.wx_open_id = ''LambdaQueryWrapper<CustomerInfo> lqw =  new LambdaQueryWrapper<>();lqw.eq(CustomerInfo::getWxOpenId, openid);CustomerInfo customerInfo = customerInfoMapper.selectOne(lqw);//3 如果第一次登录,添加信息到用户表if(customerInfo == null) {customerInfo = new CustomerInfo();customerInfo.setNickname(String.valueOf(System.currentTimeMillis()));customerInfo.setAvatarUrl("https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg");customerInfo.setWxOpenId(openid);customerInfoMapper.insert(customerInfo);}//4 记录登录日志信息CustomerLoginLog customerLoginLog = new CustomerLoginLog();customerLoginLog.setCustomerId(customerInfo.getId());customerLoginLog.setMsg("小程序登录");customerLoginLogMapper.insert(customerLoginLog);//5 返回用户idreturn customerInfo.getId();}
}

相关文章:

微信小程序登陆

一 问题引入 我们之前的登陆都是&#xff1a;网页http传来请求&#xff0c;我们java来做这个请求的校验。 但是如果微信小程序登陆&#xff0c;就要用到相关的api来实现。 二 快速入门 1 引入依赖 官方依赖&#xff0c;在里面找合适的&#xff0c;去设置版本号。由于我这…...

SQL - 存储过程

假设你在开发一个应用&#xff0c;应用有一个数据库&#xff0c;你要在哪里写SQL语句&#xff1f;你不会在你的应用代码里写语句&#xff0c;它会让你的应用代码很混乱且难以维护。具体在哪里呢&#xff1f;在存储过程中或函数中。存储过程是一组为了完成特定功能的SQL语句集合…...

RabbitMQ环境搭建

2.5.RabbitMQ 安装 a.docker方式安装&#xff1a; 1.在我的docker学习笔记中具有详细的安装过程 b.rpm包方式安装&#xff1a; 1.MQ下载地址2.这里是提前下载好后上传安装包到服务器得opt目录下&#xff1a; 3.安装MQ需要先有Erlang语言环境&#xff0c;安装文件的Linux命令…...

多视点抓取(Multi-View Grasping)

目录 前言 一、在机器人抓取检测领域里&#xff0c;多视点抓取是什么意思 二、以GG-CNN为例&#xff0c;GG-CNN是怎么结合多个视点进行抓取预测的 前言 多视点抓取&#xff08;Multi-View Grasping&#xff09;是机器人抓取和检测领域的一个重要概念&#xff0c;它涉及到机器…...

【人工智能】对智元机器人发布的远征A1所应用的AI前沿技术进行详细分析,基于此整理一份学习教程。

智元机器人在其新品发布中应用了多项AI前沿技术。我们可以从以下几个方面来分析和整理这些技术&#xff0c;并基于此整理一份学习教程&#xff1a; 一、智元机器人应用的关键AI技术 自然语言处理 (NLP) 语音识别: 利用先进的语音识别技术&#xff0c;如OpenAI的Whisper&#x…...

影刀RPA--如何获取网页当页数据?

&#xff08;1&#xff09;点击数据抓取-选择需要获取数据的地方-会弹出是否是获取整个表格&#xff08;当前页面&#xff09; &#xff08;2&#xff09;点击“是”&#xff1a;则直接获取整个表格数据-点击完成即可 &#xff08;3&#xff09;点击“否”&#xff1a;如果你想…...

Bean对象生命周期流程图

Bean生命周期流程图&#xff1a;https://www.processon.com/view/link/5f8588c87d9c0806f27358c1 Spring扫描底层流程&#xff1a;https://www.processon.com/view/link/61370ee60e3e7412ecd95d43...

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…...

【Linux学习】Linux开发工具——vim

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a;Linux学习 目录 &#x1f308;前言&#x1f525;vim的基本概念&#x1f525;vim的基本操作&#x1f525;vim命令模式的命令集&#x1f525;简单vim配置⭐一键配置美观的vim安装方法卸载方…...

【2025校招】4399 NLP算法工程师笔试题

目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间&#xff1a;2024/08/19 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;2h 本试卷分为单选&#xff0c;自我评价题&#xff0c;编程题 单选和自我评价这里不再介绍&#xff0c;4399的编程题一如既往地抽象&#xff…...

数据库原理--关系1

目录 一、表的基本构成要素 二、域(Domain) 三、笛卡尔积 四、关系模式 五、关系模式与关系 六、关系的特性 一、表的基本构成要素 表又被叫做关系&#xff0c;在数据库当中&#xff0c;我们可以把行叫做元组和记录&#xff0c;而列在数据库当中通常被我们叫做字段或者…...

【人工智能】AI工程化是将人工智能技术转化为实际应用、创造实际价值的关键步骤

AI工程化是将人工智能技术转化为实际应用、创造实际价值的关键步骤。以下是对AI工程化的详细介绍&#xff1a; 一、概念与定义 AI工程化是使用数据处理、预训练模型、机器学习流水线等技术开发AI软件的过程&#xff0c;旨在帮助企业更高效地利用AI创造价值。它是软件工程在AI…...

《C语言实现各种排序算法》

文章目录 一、排序1、排序的各种方式分类 二、插入排序1、直接插入排序2、希尔排序3、希尔排序时间复杂度分析 三、选择排序1、直接选择排序2、堆排序 四、交换排序1、冒泡排序2、快速排序3、快速排序hoare找基准值4、快排挖坑法找基准值5、前后指针法6、快速排序非递归实现 五…...

【888题竞赛篇】第五题,2023ICPC澳门-传送(Teleportation)

这里写自定义目录标题 更多精彩内容256题算法特训课&#xff0c;帮你斩获大厂60W年薪offer 原题2023ICPC澳门真题传送B站动画详解 问题分析思路分析图的构建最短路径算法具体步骤 算法实现Dijkstra 算法图的构建 代码详解标准代码程序C代码Java代码Python代码Javascript代码 复…...

javascript写一个页码器-SAAS本地化及未来之窗行业应用跨平台架构

一代码 接引入 <script type"text/javascript" src"CyberWin_APP_Page.js" alt"未来之窗页码"></script>function 未来之窗页面触发器(页码){console.log("当前用户新"页码);}CyberWin_Page.set_callback(未来之窗页面触发…...

微信小程序如何自定义一个组件

微信小程序支持组件化开发&#xff0c;这有助于我们复用代码&#xff0c;提高开发效率。下面我将给出一个简单的微信小程序组件化示例&#xff0c;包括一个自定义组件的创建和使用。 1. 创建自定义组件 首先&#xff0c;在项目的 components 目录下创建一个新的组件文件夹&am…...

【数学建模备赛】Ep05:斯皮尔曼spearman相关系数

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、斯皮尔曼spearman相关系数&#xff1a;☀️☀️☀️1. 回顾皮尔逊相关系数2. 斯皮尔曼spearman相关系数3. 斯皮尔曼相关系数公式4. 另外一种斯皮尔曼相关系数定义5. matlab的用法5. matlab的用法 三、对斯皮尔曼相…...

MATLAB进行神经网络建模的案例

下面是一个使用MATLAB进行神经网络建模的案例&#xff0c;该案例涉及使用神经网络来逼近一个未知系统的输入输出关系。这个案例与您提到的学习资料中的实例类似&#xff0c;但我会简化并解释每个步骤。 案例背景 假设我们有一组输入和输出数据&#xff0c;我们希望通过建立一…...

每天一个数据分析题(四百八十九)- 主成分分析与因子分析

关于主成分分析和因子分析的区别&#xff0c;下列描述正确的是&#xff08; &#xff09; A. 主成分分析是一种无监督学习算法&#xff0c;而因子分析是一种有监督学习算法 B. 主成分分析是一种线性变换方法&#xff0c;而因子分析是一种非线性变换方法 C. 主成分分析的结果…...

Java RPC、Go RPC、Node RPC、Python RPC 之间的互相调用

Java RPC、Go RPC、Node RPC、Python RPC 之间的互相调用是完全可以实现的&#xff0c;但需要满足一些条件和依赖于特定的工具和协议。以下是如何实现不同语言之间的RPC互相调用的详细解释&#xff1a; 1. 使用通用协议和标准&#xff1a;gRPC gRPC 是一个高性能、开源的RPC框…...

高效漫画收藏解决方案:打造你的离线数字漫画库

高效漫画收藏解决方案&#xff1a;打造你的离线数字漫画库 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...

从梁模型到软体手指:Abaqus仿真进阶,如何为超弹性材料模型设置Ogden参数?

从梁模型到软体手指&#xff1a;Abaqus仿真进阶&#xff0c;如何为超弹性材料模型设置Ogden参数&#xff1f; 在工程仿真领域&#xff0c;线性分析往往只是起点。当面对像软体机器人手指这样的柔性结构时&#xff0c;传统梁模型已无法准确描述其大变形行为。硅胶等超弹性材料的…...

GTE-Pro语义检索系统国际化支持:中英混合Query与多语言文档联合检索

GTE-Pro语义检索系统国际化支持&#xff1a;中英混合Query与多语言文档联合检索 1. 引言&#xff1a;当搜索不再受限于语言 想象一下&#xff0c;你在一家跨国公司的技术文档库里查找资料。你的脑海里蹦出一个问题&#xff1a;“How to configure the 负载均衡器 for high av…...

为什么头部AI团队已弃用Triton+ONNX Runtime?Cuvil架构设计图暴露Python推理第三条路!

第一章&#xff1a;Cuvil编译器在Python AI推理中的应用全景概览Cuvil编译器是一款面向AI工作负载的轻量级领域专用编译器&#xff0c;专为优化Python生态中基于PyTorch、ONNX及自定义计算图的推理流程而设计。它不替代传统Python解释器&#xff0c;而是通过源码到IR&#xff0…...

Docker测试学习思路

Docker 核心概念学习与实战指南本文系统梳理 Docker 学习的核心思路与方法&#xff0c;用通俗类比帮助理解 Docker 的本质&#xff0c;涵盖镜像构建、容器运行、网络通信、数据持久化、资源限制五大核心能力&#xff0c;适合初学者建立清晰的 Docker 知识框架。一、Docker 到底…...

3分钟搞定百度网盘提取码!这款免费神器让你告别繁琐搜索

3分钟搞定百度网盘提取码&#xff01;这款免费神器让你告别繁琐搜索 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘资源提取码而烦恼吗&#xff1f;每次遇到需要密码的分享链接&#xff0c;你是不是都要在评论…...

千问3.5-2B参数详解教程:max_new_tokens=192与temperature=0.7如何影响图文理解质量

千问3.5-2B参数详解教程&#xff1a;max_new_tokens192与temperature0.7如何影响图文理解质量 1. 认识千问3.5-2B视觉语言模型 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;它能够同时理解图片内容和生成文本回答。这个模型特别适合需要结合视觉和语言理解的任务场…...

30分钟搞定OpenClaw:Qwen3-4B镜像云端体验与技能测试

30分钟搞定OpenClaw&#xff1a;Qwen3-4B镜像云端体验与技能测试 1. 为什么选择云端体验OpenClaw 上周我在本地尝试部署OpenClaw时&#xff0c;被各种环境依赖和配置问题折磨得够呛。正当我准备放弃时&#xff0c;偶然发现星图平台提供了预置OpenClaw和Qwen3-4B模型的完整镜像…...

OpenClaw版本升级指南:Qwen3-4B模型平滑迁移到v2.0

OpenClaw版本升级指南&#xff1a;Qwen3-4B模型平滑迁移到v2.0 1. 为什么需要这份升级指南 上周五晚上&#xff0c;当我准备将本地OpenClaw从v1.8升级到v2.0时&#xff0c;原本以为只需要简单执行npm update就能搞定。没想到这个看似常规的操作&#xff0c;却让我的Qwen3-4B模…...

【2026年最新600套毕设项目分享】springboot足球训练营系统(14309)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...