Java 实际开发中,实现微信小程序/微信公众号的微信注册登录

1.功能
  实际开发中,实现微信小程序/微信公众号的微信注册登录

2.前置条件
  这里只关注注册登录逻辑,所以前提是先对接好微信授权的相关接口。比如:
     1. 获取微信公众号/小程序token接口
     2. 获取微信公众号/小程序授权信息接口
     3. 获取微信用户个人信息接口
     4. …等相关接口

3.数据库表
user表,存放用户信息
Java 实际开发中,实现微信小程序/微信公众号的微信注册登录_第1张图片

user_token表,存放微信用户的openId,后面以此来判断微信用户是否已经注册过,可以直接登录
Java 实际开发中,实现微信小程序/微信公众号的微信注册登录_第2张图片

4.以微信公众号注册登录示例

	/**
     * 微信登录
     *
     * @author	hcx
     * @date	2024-01-20
     * @return	登录所需token等信息
     */
    @Override
    public LoginResponse weChatAuthorizeLogin(String code, Integer spreadUid) {
        // 1、通过code获取获取公众号授权信息,拿到登录本公众号的微信用户的OpenId
        WeChatAuthorizeLoginGetOpenIdResponse response = weChatService.authorizeLogin(code);
        // 2、校验该微信用户是否已经注册过
        UserToken userToken = userTokenService.getByOpenidAndType(response.getOpenId(),  1);// type为1表示公众号
        LoginResponse loginResponse = new LoginResponse();
        if (ObjectUtil.isNotNull(userToken)) {// 已存在,正常登录
            // 3、获取微信用户对应的user信息
            User user = userService.getById(userToken.getUid());
            if (!user.getStatus()) {
                throw new CommonException("当前账户已禁用,请联系管理员!");
            }

            try {
                // 使用user信息生成随机token(自己定一个生成规则,保证唯一即可)
                String token = userService.token(user);
                loginResponse.setToken(token);
            } catch (Exception e) {
                logger.error(StrUtil.format("公众号登录生成token失败,uid={}", user.getUid()));
                e.printStackTrace();
            }
            loginResponse.setType("login");// login表示正常登录
            loginResponse.setUid(user.getUid());
            loginResponse.setNikeName(user.getNickname());
            loginResponse.setPhone(user.getPhone());
            return loginResponse;
        }
        // 4、没有注册,走创建用户流程
        // 从微信获取用户信息,封装注册数据
        WeChatAuthorizeLoginUserInfoResponse weChatUserInfo = weChatService.getUserInfo(response.getAccessToken(), response.getOpenId());
        User newUser = new User();
        newUser.setNickname(weChatUserInfo.getNickName());
        newUser.setAvatar(weChatUserInfo.getHeadimgurl());
        // ...省略封装User代码
        userService.save(newUser);

        UserToken newUserToken = new UserToken();
        newUserToken.setUid(newUser.getUid());
        newUserToken.setToken(response.getOpenId());// openId其实并不是正在的token,而且作为微信用户是否已经注册过的判断条件
        newUserToken.setType(1);// type为1表示公众号
        // ...省略封装UserToken代码
        userTokenService.save(newUserToken);

        try {
            // 使用刚注册的user信息生成随机token(自己定一个生成规则,保证唯一即可)
            String newToken = userService.token(newUser);
            loginResponse.setToken(newToken);
        } catch (Exception e) {
            logger.error(StrUtil.format("公众号登录生成token失败,uid={}", newUser.getUid()));
            e.printStackTrace();
        }
        loginResponse.setType("register");// register表示是刚注册,第一次登录
        loginResponse.setUid(newUser.getUid());
        loginResponse.setNikeName(newUser.getNickname());
        loginResponse.setPhone(newUser.getPhone());
        return loginResponse;
    }

你可能感兴趣的:(Java,java,微信小程序,微信,微信公众平台)