广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >(详细版)java实现小程序获取微信登录,用户信息,手机号,头像
  • 909
分享到

(详细版)java实现小程序获取微信登录,用户信息,手机号,头像

微信springbootjava 2023-08-31 20:08:00 909人浏览 薄情痞子
摘要

ps:SpringBoot结合mybatisPlus、Mysql实现,简单易懂,一件粘贴使用,详细往下看↓ 步骤:          注册微信开发平台账号,并创建小程序,获取小程序的AppID和AppSecret。 2.在小程序中引导用户

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

步骤:


        

注册微信开发平台账号,并创建小程序,获取小程序的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 文件中添加以下依赖:

                org.springframework.boot        spring-boot-starter-WEB                        com.baomidou        mybatis-plus-boot-starter        3.4.3.1                com.baomidou        mybatis-plus-generator        3.4.3.1                org.apache.velocity        velocity-engine-core        2.2                        mysql        mysql-connector-java        8.0.27                        com.GitHub.binarywang        weixin-java-miniapp        3.8.0    

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    @PostMapping("/login")    public Result 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 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 "更新用户信息失败";    }}} 

数据库表创建语句

创建 `user` 表的 SQL 语句如下:```sqlCREATE 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='用户表';

pom.xml 配置文件

需要引入以下依赖包:

    com.baomidou.mybatisplus    mybatis-plus-boot-starter    3.4.3.1    mysql    mysql-connector-java    8.0.26    me.chanjar.weixin    weixin-java-miniapp    3.9.0

业务解释和调用流程

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

调用流程如下:

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

over!

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

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

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

来源地址:https://blog.csdn.net/zbh1957282580/article/details/129959031

--结束END--

本文标题: (详细版)java实现小程序获取微信登录,用户信息,手机号,头像

本文链接: https://www.lsjlt.com/news/387008.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作