ps:springboot结合mybatisPlus、mysql实现,简单易懂,一件粘贴使用,详细往下看↓

步骤:

        

1.注册微信开发平台账号,并创建小程序,获取小程序的AppID和AppSecret。
2.在小程序中引导用户点击按钮触发微信登录,获取到code。
3.将code发送到后端,后端通过code获取用户的openid和session_key。
4.使用session_key对用户数据进行解密,获取用户信息、头像、手机号等数据。
5.将用户数据保存到数据库中,或者通过其他方式进行业务处理。
详细代码及步骤:

1:创建数据库

首先需要创建一个MySQL数据库,命名为 wechat_mini_program,并创建以下数据表:
CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `open_id`
varchar(255) DEFAULT NULL COMMENT '用户唯一标识', `session_key` varchar(255) DEFAULT
NULL COMMENT '会话密钥', `nickname` varchar(255) DEFAULT NULL COMMENT '用户昵称',
`avatar_url` varchar(255) DEFAULT NULL COMMENT '用户头像', `gender` tinyint(1)
DEFAULT NULL COMMENT '用户性别(0:未知,1:男性,2:女性)', `country` varchar(255) DEFAULT
NULL COMMENT '用户所在国家', `province` varchar(255) DEFAULT NULL COMMENT '用户所在省份',
`city` varchar(255) DEFAULT NULL COMMENT '用户所在城市', `phone_number` varchar(20)
DEFAULT NULL COMMENT '用户手机号', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT
CHARSET=utf8mb4 COMMENT='用户表';
2:引入依赖

在 pom.xml 文件中添加以下依赖:
<dependencies> <!-- Spring Boot 相关依赖 --> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis
Plus 相关依赖 --> <dependency> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version>
</dependency> <dependency> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId> <version>3.4.3.1</version>
</dependency> <dependency> <groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId> <version>2.2</version>
</dependency> <!-- MySQL 驱动依赖 --> <dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <version>8.0.27</version>
</dependency> <!-- 微信小程序 SDK 依赖 --> <dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId> <version>3.8.0</version>
</dependency> </dependencies>
3:配置文件

在 application.yml 文件中添加以下配置:
spring: datasource: url:
jdbc:mysql://localhost:3306/wechat_mini_program?useUnicode=true&characterEncoding=utf8mb4&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus: mapper-locations: classpath:mapper/*.xml type-aliases-package:
com.example.demo.entity global-config: db-config: id-type: auto table-prefix:
mp_ field-strategy: not_empty #
4:实体类

创建一个 User 实体类,用于表示用户信息:
package com.example.demo.entity; import
com.baomidou.mybatisplus.annotation.IdType; import
com.baomidou.mybatisplus.annotation.TableField; import
com.baomidou.mybatisplus.annotation.TableId; import
com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data
@TableName("user") public class User { @TableId(value = "id", type =
IdType.AUTO) private Long id; @TableField("open_id") private String openId;
@TableField("session_key") private String sessionKey; @TableField("nickname")
private String nickname; @TableField("avatar_url") private String avatarUrl;
@TableField("gender") private Integer gender; @TableField("country") private
String country; @TableField("province") private String province;
@TableField("city") private String city; @TableField("phone_number") private
String phoneNumber; }
5:Mapper接口

创建一个 UserMapper 接口,用于定义对 user 表的操作:
package com.example.demo.mapper; import
com.baomidou.mybatisplus.core.mapper.BaseMapper; import
com.example.demo.entity.User; public interface UserMapper extends
BaseMapper<User> { }
6:Service层

创建一个 UserService 接口,用于定义对用户信息的操作:
package com.example.demo.service; import
com.baomidou.mybatisplus.extension.service.IService; import
com.example.demo.entity.User; public interface UserService extends
IService<User> { User getUserByOpenId(String openId); boolean
saveOrUpdateUser(User user); }
创建一个 UserServiceImpl 类,实现 UserService 接口:
package com.example.demo.service.impl; import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import
com.example.demo.entity.User; import com.example.demo.mapper.UserMapper; import
com.example.demo.service.UserService; import
org.springframework.stereotype.Service; @Service public class UserServiceImpl
extends ServiceImpl<UserMapper, User> implements UserService { @Override public
User getUserByOpenId(String openId) { return this.baseMapper.selectOne(new
LambdaQueryWrapper<User>().eq(User::getOpenId, openId)); } @Override public
boolean saveOrUpdateUser(User user) { return this.saveOrUpdate(user); } }
7:Controller层

创建一个 UserController 类,用于处理用户信息的请求:
package com.example.demo.controller; import
cn.binarywang.wx.miniapp.api.WxMaService; import
cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import
com.example.demo.entity.User; import com.example.demo.service.UserService;
import lombok.extern.slf4j.Slf4j; import
me.chanjar.weixin.common.error.WxErrorException; import
org.springframework.beans.factory.annotation.Autowired; import
org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/user") @Slf4j public class UserController { @Autowired
private WxMaService wxMaService; @Autowired private UserService userService;
/** * 登录接口 */ @PostMapping("/login") public Result<Object>
login(@RequestParam("code") String code, @RequestParam("encryptedData") String
encryptedData, @RequestParam("iv") String iv) { try { // 调用微信 API 获取用户的 openid
和 session_key WxMaJscode2SessionResult session =
wxMaService.getUserService().getSessionInfo(code); String openid =
session.getOpenid(); // 调用微信 API 获取用户的手机号 WxMaPhoneNumberInfo phoneInfo =
wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(),
encryptedData, iv); String phoneNumber = phoneInfo.getPhoneNumber(); // 调用微信
API 获取用户的详细信息 WxMaUserInfo userInfo =
wxMaService.getUserService().getUserInfo(session.getSessionKey(), code); //
获取用户昵称 String nickName = userInfo.getNickName(); // 获取用户头像 String avatarUrl =
userInfo.getAvatarUrl(); // 获取用户国家 String country = userInfo.getCountry(); //
获取用户省份 String province = userInfo.getProvince(); // 获取用户城市 String city =
userInfo.getCity(); // 将用户信息保存到数据库中 User user =
userService.getByOpenId(openid); if (user == null) { user = new User();
user.setOpenId(openid); user.setNickName(nickName);
user.setAvatarUrl(avatarUrl); user.setCountry(country);
user.setProvince(province); user.setCity(city);
user.setPhoneNumber(phoneNumber); userService.add(user); } else {
user.setNickName(nickName); user.setAvatarUrl(avatarUrl);
user.setCountry(country); user.setProvince(province); user.setCity(city);
user.setPhoneNumber(phoneNumber); userService.update(user); } // 返回用户信息
Map<String, Object> data = new HashMap<>(); data.put("openid", openid);
data.put("nickName", nickName); data.put("avatarUrl", avatarUrl);
data.put("country", country); data.put("province", province); data.put("city",
city); data.put("phoneNumber", phoneNumber); return Result.success(data); }
catch (WxErrorException e) { log.error("登录失败:" + e.getMessage(), e); return
Result.error("登录失败:" + e.getMessage()); } /** * 更新用户信息接口 */
@PostMapping("/update") public String updateUserInfo(@RequestBody User user) {
if (user == null || user.getOpenId() == null) { return "用户信息不能为空"; } if
(userService.saveOrUpdateUser(user)) { return "更新用户信息成功"; } else { return
"更新用户信息失败"; } } }
8. 数据库表创建语句
创建 `user` 表的 SQL 语句如下: ```sql CREATE TABLE `user` ( `id` bigint(20) NOT NULL
AUTO_INCREMENT COMMENT '主键', `open_id` varchar(255) NOT NULL COMMENT '用户
openid', `session_key` varchar(255) DEFAULT NULL COMMENT '用户 session_key',
`nickname` varchar(255) DEFAULT NULL COMMENT '用户昵称', `avatar_url` varchar(255)
DEFAULT NULL COMMENT '用户头像 URL', `gender` int(11) DEFAULT NULL COMMENT
'用户性别,0:未知,1:男性,2:女性', `country` varchar(255) DEFAULT NULL COMMENT '用户所在国家',
`province` varchar(255) DEFAULT NULL COMMENT '用户所在省份', `city` varchar(255)
DEFAULT NULL COMMENT '用户所在城市', `phone_number` varchar(20) DEFAULT NULL COMMENT
'用户手机号', PRIMARY KEY (`id`), UNIQUE KEY `open_id_UNIQUE` (`open_id`) )
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
9:pom.xml 配置文件

需要引入以下依赖包:
<!-- mybatis-plus --> <dependency> <groupId>com.baomidou.mybatisplus</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version>
</dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <version>8.0.26</version>
</dependency> <!-- weixin-java-miniapp --> <dependency>
<groupId>me.chanjar.weixin</groupId>
<artifactId>weixin-java-miniapp</artifactId> <version>3.9.0</version>
</dependency>
10:业务解释和调用流程

本代码实现了小程序用户登录和更新用户信息的功能。

调用流程如下:

* 小程序前端调用 wx.login 方法获取 code
* 小程序前端将 code 传给后端的 /user/login 接口
* 后端调用 wxMaService.getUserService().getSessionInfo(code) 方法获取 session_key 和
openid
* 后端根据 openid 查询用户信息,如果用户不存在则创建新用户
* 后端返回 openid 给小程序前端
* 小程序前端使用 wx.getUserProfile 方法获取用户信息(如昵称、头像等)(代码login已经更新为后端获取,如果前端获取稍微改一下就好)
* 小程序前端将用户信息和 openid 一起传给后端的 /user/update 接口
*
后端更新用户信息,并返回更新结果给小程序前端

over!

总:以上就是本代码实现的业务流程,具体实现可以参考上面给出的代码和注释。

需要注意的是,在使用本代码时,需要在小程序后台创建小程序并获取 appid 和 appsecret
,并在代码中进行相应的配置。另外,还需要在微信开放平台申请相应的权限并获取access_token。具体操作可以参考微信官方文档。

ps:上面给出的代码可以作为一个基础的实现,可以在此基础上进行进一步的开发和优化。

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信