微信用户登录

1、微信扫码功能是目前第三方登录常见功能,前不久有个项目刚好用上。这里抽取出来演示下,仁者见仁,智者见智。不要喷。大神直接跳过。哈哈

2、调用的过程和原理参考微信官方接口,这里只给出自己项目后端的一些逻辑。

3、接口controller层。参数code 是前端传过来的,这个需要前端同事提前获取到用户的微信扫码code

@GetMapping("/userWeChatLogin")
    @ApiOperation(notes = "通过微信扫描登录", value = "/userWeChatLogin")
    ResultData<?> userWeChatLogin(@Param(value = "code") String code) {
        try {
            log.info("userWeChatLogin->code:{}", code);
            //用户登录
            return new ResultData<>(ResultCode.SUCCESS, usersService.userWeChatLogin(code));
        } catch (Exception ex) {
            Map<String, Object> map = new HashMap<>();
            ex.printStackTrace();
            log.info("error:{}", ex.getMessage());
            map.put("msg", ex.getMessage());
            return new ResultData<>(ResultCode.FAIL, "", map);
        }

    }
/**
     * 微信用户登录
     *
     * @param code
     * @return
     */
    String userWeChatLogin(String code) throws Exception;

4、实现服务类:

 /**
     * 微信用户登录
     *
     * @param weCode
     * @return
     * @throws Exception
     */
    @Override
    public String userWeChatLogin(String weCode) throws Exception {
        if (weCode == null || weCode.isEmpty()) {
            throw new Exception("微信code请求参数为空");
        }
        //通过微信注册用户信息
        return this.weChartUserRegister(weCode);

    }

5、服务类的具体实现,微信用户自动注册:

/**
     * 微信用户自动注册
     *
     * @param weCode
     * @return
     */
    private String weChartUserRegister(String weCode) throws Exception {
        WeCharUserInfo weCharUserInfo = weChatService.getWeChartUserInfo(weCode);
        if (weCharUserInfo == null) {
            throw new Exception("微信用户登录验证失败");
        }
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("open_id", weCharUserInfo.getOpenid());
        Users users = this.baseMapper.selectOne(queryWrapper);
        if (users != null) {
            //写登录日志
            saveUserLoginLogger(users);
            return users.getToken();
        }
        //注册一个用户信息
        users = new Users();
        //设置电话信息
        if (weCharUserInfo.getPhone() != null && !weCharUserInfo.getPhone().isEmpty()) {
            users.setPhone(weCharUserInfo.getPhone());
        }
        //设置昵称
        if (weCharUserInfo.getNickname() != null && !weCharUserInfo.getNickname().isEmpty()) {
            users.setUserName("微信用户" + weCharUserInfo.getNickname());
        } else {
            users.setUserName("微信用户");
        }
        log.info("user head img:{}", weCharUserInfo.getHeadimgurl());
        //头像
        if (weCharUserInfo.getHeadimgurl() != null && !weCharUserInfo.getHeadimgurl().isEmpty()) {
            users.setAvator(weCharUserInfo.getHeadimgurl());
        } else {
            //设置资源服务上的微信头像
            users.setAvator(this.weCharHeaderUrl);
        }
        log.info("user head img:{}", users.getAvator());
        //微信昵称
        if (weCharUserInfo.getNickname() != null && !weCharUserInfo.getNickname().isEmpty()) {
            users.setWechatNickName(weCharUserInfo.getNickname());
        }
        //昵称
        if (weCharUserInfo.getNickname() != null && !weCharUserInfo.getNickname().isEmpty()) {
            users.setNickName(weCharUserInfo.getNickname());
        }
        //添加默认头像
        users.setToken("");
        //微信唯一标识
        users.setOpenId(weCharUserInfo.getOpenid());
        users.setStatus("1");
        users.setRegistTime(new Date());
        users.setMetamask("");
        users.setMemo("微信注册用户");
        users.setCreateTime(new Date());
        users.setUpdateTime(new Date());
        //写入用户信息
        this.baseMapper.insert(users);
        users.setToken(EncodeUtils.encryptToMD5(users.getOpenId()));
        users.setMetamask("");
        users.setUpdateTime(new Date());
        //保存token到用户信息
        this.saveOrUpdate(users);
        //写登录日志
        this.saveUserLoginLogger(users);
        return users.getToken();
    }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐