首页 > 其他分享 >根据微信code获取换取用户登录态信息

根据微信code获取换取用户登录态信息

时间:2024-04-18 21:25:14浏览次数:13  
标签:setCode map code 登录 openid 微信 bo resMap

1.根据微信code获取换取用户登录态信息

点击查看代码
    /**
     *  根据code获取小程序用户openpid
     */
    @Override
    public R<Map<String, String>> getUnitCheckPersonOpenId(String code){
        R<Map<String, String>> resMap = new R<>();
        //获取用户openid
        String wxAppIdUrl = WxLoginConstant.WX_LOGIN_URL + "?appid=" + WxLoginConstant.APP_ID + "&secret=" +
                WxLoginConstant.SECRET + "&js_code=" + code + "&grant_type=" + WxLoginConstant.GRANT_TYPE;
        R<Object> tokenRes = RequestUtil.GET(wxAppIdUrl, null);
        Integer resCode = tokenRes.getCode();
        if (resCode == HttpStatus.SC_OK){
            Object tokenData = tokenRes.getData();
            WxLoginResVo tokenResVo = JSON.parseObject(tokenData.toString(), WxLoginResVo.class);
            if (Objects.nonNull(tokenResVo)){
                    String openid = tokenResVo.getOpenid();
                    if (StringUtils.isNotBlank(openid)){
                        //根据openid查询db是否存在此记录
                        WghHiddenSelfCheckUnitPersonVo unitCheckPerson = getUnitCheckPersonByOpenid(openid);
                        Map<String, String> map = Maps.newHashMap();
                        if (Objects.nonNull(unitCheckPerson)){
                            //1.存在
                            map.put("isExistOpenId","y");
                            //更新
                        } else {
                            //2.不存在
                            map.put("isExistOpenId","n");
                        }
                        //用户唯一标识
                        map.put("openid",openid);
                        resMap.setCode(200);
                        resMap.setMsg("成功");
                        resMap.setData(map);
                    } else {
                        resMap.setCode(tokenResVo.getErrcode());
                        resMap.setMsg(tokenResVo.getErrmsg());
                    }
            }
        }else {
            resMap.setCode(500);
            resMap.setMsg("http调用微信接口获取用户openid失败");
        }
        return resMap;
    }s
2. 根据openid判断是否为系统内部人员、公众人员
点击查看代码
/**
     * 根据openid判断是否为系统内部人员、公众人员
     */
    @Override
    public R<Map<String,String>> getHiddenSelfCheckIsHasUnitInfo(String openid) {
        R<Map<String, String>> resMap = new R<>();
        if (StringUtils.isBlank(openid)) {
            resMap.setCode(501);
            resMap.setMsg("openid参数不能为空");
            return resMap;
        }
        LambdaQueryWrapper<WghHiddenSelfCheckUnitPerson> lqw = Wrappers.lambdaQuery();
        lqw.eq(StringUtils.isNotBlank(openid), WghHiddenSelfCheckUnitPerson::getOpenid, openid);
        WghHiddenSelfCheckUnitPersonVo objVo = baseMapper.selectVoOne(lqw);
        if (Objects.isNull(objVo)) {
            resMap.setCode(502);
            resMap.setMsg("无法根据openid查询到用户信息");
            return resMap;
        }
        Map<String, String> map = Maps.newHashMap();
        Long sysUserId = objVo.getSysUserId();
        if (Objects.nonNull(sysUserId)) {
            //系统用户
            map.put("isSysUser", "y");
            //生成token
            SysUser sysUser = sysUserMapper.selectUserById(sysUserId);
            if (Objects.nonNull(sysUser)) {
                LoginUser loginUser = SysLoginService.buildLoginUser(sysUser);
                LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
                String token = StpUtil.getTokenValue();
                map.put("token", token);
            } else {
                resMap.setCode(401);
                resMap.setMsg("系统中不存在此用户信息");
            }
        } else {
            //公众用户
            map.put("isSysUser", "n");
        }
        resMap.setCode(200);
        resMap.setMsg("成功");
        resMap.setData(map);
        return resMap;
    }

3. 根据openid完善小程序登录个人信息
点击查看代码
    /**
     * 根据openid完善小程序登录个人信息
     */
    @Override
    public Boolean hiddenSelfCheckUnitUserInfo(WghHiddenSelfCheckUnitPersonBo bo) {
        if (StringUtils.isBlank(bo.getPhone())){
            return false;
        }
        // 1.根据手机号查询db是否存在此记录
        Boolean flag;
        LambdaQueryWrapper<WghHiddenSelfCheckUnitPerson> lqw = Wrappers.lambdaQuery();
        lqw.eq(StringUtils.isNotBlank(bo.getPhone()),WghHiddenSelfCheckUnitPerson::getPhone,bo.getPhone());
        WghHiddenSelfCheckUnitPersonVo vo = baseMapper.selectVoOne(lqw);
        if (Objects.nonNull(vo)){
            //1.1是则为系统用户第一次登录,需绑定小程序openid
            //更新db
            UpdateWrapper<WghHiddenSelfCheckUnitPerson> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("phone", bo.getPhone());
            updateWrapper.set("openid",bo.getOpenid());
            flag =  baseMapper.update(null,updateWrapper) > 0;
        }else {
            //1.2否,说明是自查自改单位人员,则新增(手机号、用户名、openid)
            //新增
            WghHiddenSelfCheckUnitPerson add = BeanUtil.toBean(bo, WghHiddenSelfCheckUnitPerson.class);
            flag = baseMapper.insert(add) > 0;
        }
        return flag;
    }

标签:setCode,map,code,登录,openid,微信,bo,resMap
From: https://www.cnblogs.com/zhuoyb/p/18144404

相关文章

  • 实验一-原型设计 微信卡包页面
    微信卡包页面-原型设计分享一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求 对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。1.墨刀:  ~适用领域:墨刀适用于快速原型设计和协作,特别是在移动应用和网页......
  • leedcode-判断子序列
    自己写的,有点麻烦classSolution:defisSubsequence(self,s:str,t:str)->bool:#第一步先验证s是t的无序子序列#使用字典记录t中每个字符的出现次数mydict=dict()foriint:ifnotmydict.get(i):......
  • LeetCode 面试经典150题---008
    ####151.反转字符串中的单词给你一个字符串s,请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意:输入字符串s中可能会存在前导空格、尾随空格......
  • 【Python微信机器人】写一个监控采集公众号文章的插件
    原文链接:https://mp.weixin.qq.com/s/f8zbM6wMld3koqjaFbCuxw前言弄了个视频号下载后,同一个问题每天都会被问,回答的有点烦了。想了想根本原因还是缺少一个交流平台,微信群的话,刚进群的看不到之前的聊天记录。想整个知识星球,发现只能弄个收费的,免费的需要激活码才能创建。而有......
  • 华为云CodeArts IDE For Python 快速使用指南
    本文分享自华为云社区《华为云CodeArtsIDEForPython快速使用指南》,作者:为云PaaS服务小智。CodeArtsIDE带有Python扩展,为Python语言提供了广泛的支持。Python扩展可以利用CodeArtsIDE的代码补全、验证、调试和单元测试等特性,与多种Python解释器协同工作,轻松切换包......
  • vscode+gdbserver远程调试ARM环境搭建
     一、编译gdbserver1.下载gdb  http://ftp.gnu.org/gnu/gdb/2.解压缩  tarxfgdb-8.0.tar.xz3.交叉编译  cdgdb/gdbserver/ ./configure--host=arm-none-linux-gnueabihf--target=arm-none-linux-gnueabihf--program-prefix=arm-none-linux-gnueabihf-......
  • 微信小程序中生命周期钩子函数
    微信小程序App的生命周期钩子函数有以下7个:   onLaunch(options):当小程序初始化完成时,会触发onLaunch(全局只触发一次)。   onShow(options):当小程序启动或从后台进入前台显示时,会触发onShow。   onHide():当小程序从前台进入后台时,会触发onHide。   onError(......
  • 微信小程序 版本更新 强制更新新版本
    在点击小程序发布的时候选择,版本升级选项 之前用户使用过的再打开小程序页面就会弹出升级弹窗modal在utils.js中声明版本更新方法 //static/utils/index.jsexportfunctioncheckUpdateVersion(){//创建UpdateManager实例constupdateManager=uni.getUp......
  • vscode python开发插件
    05GitGraph这玩意可是Git神器,堪比Pycharm内的Git管理器。通过这个扩展,可以清楚地看见当前分支的commit记录和变化,可以通过按钮的方式轻易地创建、切换分支、cherrypick、merge等操作。对比分支、查看未提交的修改……还有许多可定制的扩展设置。08autoDocstring这个扩......
  • 【安卓逆向】从逆向登录协议开始到frida rpc的初探
    本来是闲着无聊逆向一下喜马拉雅的登录协议日常抓包,分析数据包,有一个password字段想分析一下这个password这个字段,jadx搜索一下啊 经过frida多次的hook定位,发现这个方法便是加密过程,点进去可以hook一下这个方法查看一下functionhook(){letLoginRequest=Java.......