微信小程序的登陆接口实现逻辑

话不多说,直接上代码!!! 

@Override
    public Long login(String code) {
        //1 获取code值,使用微信工具包对象,获取微信唯一标识openid
        String openid = null;
        try {
            WxMaJscode2SessionResult sessionInfo =
                    wxMaService.getUserService().getSessionInfo(code);
            openid = sessionInfo.getOpenid();
        } catch (WxErrorException e) {
            throw new RuntimeException(e);
        }

        //2 根据openid查询数据库表,判断是否第一次登录
        //如果openid不存在返回null,如果存在返回一条记录
        //select * from customer_info ci where ci.wx_open_id = ''
        LambdaQueryWrapper<CustomerInfo> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(CustomerInfo::getWxOpenId,openid);
        CustomerInfo customerInfo = customerInfoMapper.selectOne(wrapper);

        //3 如果第一次登录,添加信息到用户表
        if(customerInfo == null) {
            customerInfo = new CustomerInfo();
            customerInfo.setNickname(String.valueOf(System.currentTimeMillis()));
            customerInfo.setAvatarUrl("https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg");
            customerInfo.setWxOpenId(openid);
            customerInfoMapper.insert(customerInfo);
        }

        //4 记录登录日志信息
        CustomerLoginLog customerLoginLog = new CustomerLoginLog();
        customerLoginLog.setCustomerId(customerInfo.getId());
        customerLoginLog.setMsg("小程序登录");
        customerLoginLogMapper.insert(customerLoginLog);

        //5 返回用户id
        return customerInfo.getId();
    }

  1. 获取OpenID

    • 通过微信小程序登录后返回的code,使用微信开发工具包(假设为wxMaService)的getUserService().getSessionInfo(code)方法,向微信服务器请求用户的openidopenid是微信为每个用户分配的唯一标识符。
    • 如果请求过程中出现WxErrorException异常,则抛出运行时异常RuntimeException
  2. 查询用户信息

    • 使用LambdaQueryWrapper构建查询条件,根据获取到的openid查询数据库中是否已存在对应的用户信息(假设存储在customer_info表中)。
    • 如果查询结果为空(customerInfo == null),则表示该用户是首次登录。
  3. 处理首次登录

    • 如果用户是首次登录,则创建一个新的CustomerInfo对象,并为其设置默认的昵称(这里使用当前时间戳的字符串形式,实际应用中可能不这样做)、默认头像URL和openid
    • 将新创建的CustomerInfo对象插入到数据库中。
  4. 记录登录日志

    • 无论用户是首次登录还是再次登录,都会创建一个CustomerLoginLog对象来记录登录日志。该对象包含用户ID(从CustomerInfo中获取)和登录信息(这里固定为"小程序登录")。
    • 将登录日志插入到数据库中。
  5. 返回用户ID

    • 最后,返回用户的ID(无论是首次登录还是已存在的用户)。这个ID可以用于后续的用户认证或数据关联。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值