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

这篇具有很好参考价值的文章主要介绍了(详细版)java实现小程序获取微信登录,用户信息,手机号,头像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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:业务解释和调用流程

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

调用流程如下:

  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://www.toymoban.com/news/detail-429089.html

到了这里,关于(详细版)java实现小程序获取微信登录,用户信息,手机号,头像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序实现登录授权,并将获取到的用户授权信息存储到数据库中

    官方开发文档 注意:在实现授权登录时,不要使用测试号进行 wx.getUserProfile使用文档 config文件代码如下 路由模块 主要代码(如果不想多个文件,可以将wxuserHandle.wxuser这个位置内容替换为exports.wxuser的内容) 注意: 在返回token的字符串拼接时,Bearer 后面必须有一个空格 数据

    2024年02月10日
    浏览(54)
  • 微信小程序登录,解决无法获取用户信息方法

    在上面的代码中,首先定义了应用的AppID和AppSecret。然后,实现了获取微信用户access_token的方法getAccessToken()和获取微信用户信息的方法getUserInfo()。其中,getAccessToken()方法需要传入微信小程序登录时获取的code,会返回一个包含access_token和openid的Map;getUserInfo()方法需要传入用户

    2024年02月11日
    浏览(65)
  • 基于uniapp+java实现微信小程序无感登录,授权手机号登录,获取昵称头像,获取定位信息

    使用uniapp开发微信小程序,避免不了微信登录。但自动微信2022年升级了api版本后,不再允许返回昵称和头像信息,所以才出现无感登录或授权手机号登录。实现方式大同小异。 java后端所需maven 前端实现代码: 由于使用uni.login并不需要用户授权,所以能做到无感登录。 后端

    2024年02月16日
    浏览(65)
  • Uniapp写微信小程序时,如何获取用户头像和昵称使用微信用户信息登录?

    实现效果如下: 首先使用uni.login获取用户登录凭证code: 官方代码: success返回参数如下: 头像选择: 需要将 button 组件  open-type  的值设置为  chooseAvatar ,当用户选择需要使用的头像之后,可以通过  bindchooseavatar  事件回调获取到头像信息的临时路径。 从基础库2.24.4版本

    2024年02月04日
    浏览(46)
  • uniapp(vue3) - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)

    在uniapp(v3)微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。 你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。 做功能之前,先

    2024年02月05日
    浏览(57)
  • Unity微信小游戏登录授权获取用户信息

    最近需要在接微信获取用户信息的功能,在小游戏官方API中翻找资料。不得不说官方接口很多、很全,但是真的很乱而且部分遗漏。 对于不明所以的人来说,真的非常不友好。文档一堆堆的罗列下来,有些也不知道要怎么组合使用。 文档下有不少留言也是“骂骂咧咧”想必

    2024年02月02日
    浏览(56)
  • 小程序获取手机号和用户信息一键登录

    1、一建获取用户信息 以前可以通过 button open-type=\\\"getUserInfo\\\" 一键登录/button 来实现一建获取用户信息; 2021年4月28日24时后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像、昵称、性别与地区) 新增 getUserProfile 接口(基础库2.10.4版本开始支持),可获取

    2024年02月09日
    浏览(51)
  • uniapp在小程序登录,获取用户信息,获取手机号等流程

    uniapp小程序的授权描述 1、微信小程序通过uni.login()方法可以获取到微信提供的code 2、通过登录获取的code码可以以获取用户唯一标识openid以及会话密钥sessionkey用于解密获取手机的加密信息 3、通过微信提供的获取微信手机号的方法getphonenumber拿到encryptedData iv两个字段的内容

    2024年02月12日
    浏览(48)
  • 支付宝小程序:获取用户信息和手机号快捷登录

    随着支付宝小程序以其便捷性和安全性受到了广大开发者和用户的青睐。在uni-app框架下开发支付宝小程序时,如何安全、合规地获取用户信息和手机号成为了开发者必须面对的问题。 1.在开始之前,确保你已经在支付宝开放平台上注册并创建应用,获取到应用的AppID; 2.小程

    2024年04月28日
    浏览(46)
  • 微信小程序获取用户信息

    要在微信小程序中获取用户信息,你可以按照以下步骤进行操作: 1. 在小程序的app.json文件中添加\\\"scope.userinfo\\\"权限,例如: ``` \\\"permission\\\": {   \\\"scope.userinfo\\\": {     \\\"desc\\\": \\\"你的个人信息\\\"   } } ``` 2. 在小程序的某个页面中,使用wx.login方法获取用户登录凭证code,例如: ``` wx.log

    2024年02月10日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包