保姆级企业微信根据code获取授权获取用户私密信息

 先上企业微信的文档

开始开发 - 接口文档 - 企业微信开发者中心

 

 

不多哔哔  我们上代码 

先上用户实体类 和  企业微信实体类

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("oms_user")
@ApiModel(value="OmsUser对象", description="用户表")
public class OmsUser {
    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "手机号")
    private String phone;

    @ApiModelProperty(value = "姓名")
    private String name;

    @ApiModelProperty(value = "邮箱")
    private String email;

    @ApiModelProperty(value = "生日")
    private Date birthday;

    @ApiModelProperty(value = "证件类型 1.身份证,2.护照,3.港澳通行证")
    private Short idType;

    @ApiModelProperty(value = "证件号码")
    private String idNumber;

    @ApiModelProperty(value = "所属上级")
    private Integer pid;

    @ApiModelProperty(value = "用户的性别(1是男性,2是女性,0是未知)")
    private Short sex;

    @ApiModelProperty(value = "用户头像")
    private String headimgurl;

    @ApiModelProperty(value = "企业id")
    private String userid;

    @ApiModelProperty(value = "员工个人二维码")
    private String qrCode;

    @ApiModelProperty(value = "企业邮箱")
    private String bizMail;

    @ApiModelProperty(value = "地址")
    private String address;

    @ApiModelProperty(value = "状态 -1.删除, 1.启用, 2.停用")
    private Short status;

    @ApiModelProperty(value = "创建人")
    private String createUser;

    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    @ApiModelProperty(value = "修改人")
    private String updateUser;

    @ApiModelProperty(value = "修改时间")
    private Date updateTime;
}

上企业微信用户表

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("oms_qy_user")
@ApiModel(value="OmsQyUser对象", description="企业微信用户表")
public class OmsQyUser {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private String userid;

    @ApiModelProperty(value = "性别。0表示未定义,1表示男性,2表示女性")
    private Short sex;

    @ApiModelProperty(value = "头像url")
    private String headimgurl;

    @ApiModelProperty(value = "员工个人二维码")
    private String qrCode;

    @ApiModelProperty(value = "手机")
    private String phone;

    @ApiModelProperty(value = "邮箱")
    private String email;

    @ApiModelProperty(value = "企业邮箱")
    private String bizMail;

    @ApiModelProperty(value = "地址")
    private String address;

    @ApiModelProperty(value = "状态 0是正常 1是禁用 -1是删除")
    private Short status;

    @ApiModelProperty(value = "创建人")
    private String createUser;

    @ApiModelProperty(value = "创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:SS")
    private Date createTime;

    @ApiModelProperty(value = "修改人")
    private String updateUser;

    @ApiModelProperty(value = "修改时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:SS")
    private Date updateTime;

}

控制层

    @ApiOperation("公众号企业微信登录授权同意之后回调地址")
    @ApiOperationSupport(order = 3)
    @GetMapping("/qyCallBack")
    public ResponseUtil<Map<String, Object>> qyCallBack(@Valid @ApiParam("code") String code,
                                                      @ApiParam("非必填") @Nullable Integer pid) throws Exception {
        if (StringUtils.isBlank(code)) {
            return ResponseUtil.fail("缺少主要参数 code");
        }
        return omsWeixinUserInfoService.qyCallBack(code, pid);
    }

实现类

    @Override
    public ResponseUtil<Map<String, Object>> qyCallBack(String code, Integer pid) throws Exception {
        OmsUser omsUser = new OmsUser();
        OmsQyUser omsQyUser = new OmsQyUser();
        //获取网页授权access_token
        String qyUrl = OmsUrlConstants.QY_WEIXIN_ACCESS_TOKEN;
        qyUrl = qyUrl.replace("ID",OmsUrlConstants.CORP_ID).replace("SECRET",OmsUrlConstants.CORP_SECRET);
        String qy = HttpRequest.get(qyUrl).execute().body();
        JSONObject jsonObject = JSON.parseObject(qy);
        String accessToken = jsonObject.getString("access_token");
        //有效时间2小时
        String expiresIn = jsonObject.getString("expires_in");
        //通过code获取userid和敏感信息传票
        String userInfoUrl = OmsUrlConstants.QY_WEIXIN_CODE;
        userInfoUrl = userInfoUrl.replace("ACCESS_TOKEN",accessToken).replace("CODE",code);
        String userInfo = HttpRequest.get(userInfoUrl).execute().body();
        JSONObject jsonObjectUserInfo = JSON.parseObject(userInfo);
        //成员UserID
        String userid = jsonObjectUserInfo.getString("userid");
        //成员票据
        String userTicket = jsonObjectUserInfo.getString("user_ticket");
        //非企业成员显示openid 和 external_userid
        String openid = jsonObjectUserInfo.getString("openid");
        //外部联系人id
        String externalUserid = jsonObjectUserInfo.getString("external_userid");
        //企业员工不能访问
        if (StringUtils.isBlank(userid) && StringUtils.isNotBlank(openid)
            && StringUtils.isBlank(userTicket) && StringUtils.isNotBlank(externalUserid) ) {
            return ResponseUtil.fail("很抱歉只有秋果员工内部才能访问");
        }
        //获取用户敏感信息
        String userdetailUrl = OmsUrlConstants.QY_WEIXIN_USERDETAIL;
        userdetailUrl = userdetailUrl.replace("ACCESS_TOKEN",accessToken);
        JSONObject json = new JSONObject();
        json.put("user_ticket",userTicket);
        String userdetail = HttpRequest.post(userdetailUrl).body(json.toJSONString()).execute().body();
        JSONObject jsonObjectUserdetail = JSON.parseObject(userdetail);
        if (jsonObjectUserdetail == null) {
            return ResponseUtil.fail("---结束---" + Constants.NOT_FOUND_DATA);
        }
        //成员UserID
        userid = jsonObjectUserdetail.getString("userid");
        //性别。0表示未定义,1表示男性,2表示女性。仅在用户同意snsapi_privateinfo授权时返回真实值,否则返回0.
        Short gender = jsonObjectUserdetail.getShort("gender");
        //头像url。仅在用户同意snsapi_privateinfo授权时返回真实头像,否则返回默认头像
        String avatar = jsonObjectUserdetail.getString("avatar");
        //员工个人二维码(扫描可添加为外部联系人),仅在用户同意snsapi_privateinfo授权时返回
        String qrCode = jsonObjectUserdetail.getString("qr_code");
        //手机,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
        String mobile = jsonObjectUserdetail.getString("mobile");
        //邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
        String email = jsonObjectUserdetail.getString("email");
        //企业邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
        String bizMail = jsonObjectUserdetail.getString("biz_mail");
        //仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
        String address = jsonObjectUserdetail.getString("address");
        //根据企业userid去库里查有没有
        OmsQyUser omsQyUserInfo = omsQyUserService.listUserid(userid);
        if (Objects.nonNull(omsQyUserInfo)) {
            OmsUser omsUserById = omsUserService.listByQyId(userid);
            //如果omsUserById 不等于null  就修改 等于null 说明库里没有就添加
            if (Objects.nonNull(omsUserById)) {
                Integer id = omsUserById.getId();
                //如果你当前下线的 id 于 传进来的 pid 相等  则你不可以成为他的下线
                LambdaQueryWrapper<OmsUser> wrapper = new LambdaQueryWrapper<>();
                wrapper.eq(OmsUser::getPid, id)
                        .ne(OmsUser::getStatus, CommonOtaStatusEnum.DELETE.getValue())
                        .select(OmsUser::getId);
                Set<OmsUser> omsUserSet = omsUserService.list(wrapper).stream().filter(oms -> oms.getId().equals(pid)).collect(Collectors.toSet());
                if (omsUserSet.isEmpty()) {
                    //如果pid == 0 或者 null 说明没有上级 可以把pid加进去成为他的下级
                    if (omsUserById.getPid().equals(OmsStatusEnum.OTHER.getNumber()) || omsUserById.getPid() == null) {
                        omsUserById.setPid(pid);
                        omsUserById.setUpdateUser(omsUserById.getName());
                        omsUserById.setUpdateTime(new Date());
                        omsUserService.saveOrUpdate(omsUserById);
                    }
                    //把token和openid返给前端
                    Map<String, Object> map = new HashMap<>();
                    String token = TokenUtil.cacheToken(id, LoginEnum.PUBLIC_ACCOUNT_KEY.getValue());
                    map.put("token", token);
                    map.put("omsUser", omsUserById);
                    return ResponseUtil.success(map);
                }
                //把token和openid返给前端
                Map<String, Object> map = new HashMap<>();
                String token = TokenUtil.cacheToken(id, LoginEnum.PUBLIC_ACCOUNT_KEY.getValue());
                map.put("token", token);
                map.put("omsUser", omsUserById);
                map.put("error", "对方是你的下级,你无法成为对方的下级");
                return ResponseUtil.success(map);
            }
            //存进用户表
            BeanUtils.copyProperties(omsQyUserInfo, omsUser);
            omsUser.setName(OmsStatusEnum.QIUGUOQIYEYONGHU.getValue() + mobile);
            omsUser.setIdType(OmsStatusEnum.ONE.getShortValue());
            omsUser.setIdNumber(OmsStatusEnum.OTHER.getValue());
            omsUser.setCreateUser(OmsStatusEnum.QIUGUOQIYEYONGHU.getValue() + mobile);
            omsUser.setCreateTime(new Date());
            omsUser.setStatus(CommonOtaStatusEnum.OPEN.getValue());
            omsUser.setPid(pid != null ? pid : Constants.ZERO);
            omsUserService.save(omsUser);
            //把token和openid返给前端
            Map<String, Object> map = new HashMap<>();
            String token = TokenUtil.cacheToken(omsUser.getId(),
                    LoginEnum.PUBLIC_ACCOUNT_KEY.getValue());
            map.put("token", token);
            map.put("omsUser", omsUser);
            return ResponseUtil.success(map);
        }
        //存进微信用户表
        omsQyUser.setUserid(userid);
        omsQyUser.setSex(gender);
        omsQyUser.setHeadimgurl(avatar);
        omsQyUser.setQrCode(qrCode);
        omsQyUser.setPhone(mobile);
        omsQyUser.setEmail(email);
        omsQyUser.setBizMail(bizMail);
        omsQyUser.setAddress(address);
        omsQyUser.setCreateUser(OmsStatusEnum.QIUGUOQIYEYONGHU.getValue() + mobile);
        omsQyUser.setCreateTime(new Date());
        omsQyUser.setStatus(CommonOtaStatusEnum.OPEN.getValue());
        omsQyUserService.save(omsQyUser);
        //存进用户表
        BeanUtils.copyProperties(omsQyUser, omsUser);
        omsUser.setName(OmsStatusEnum.QIUGUOQIYEYONGHU.getValue() + mobile);
        omsUser.setIdType(OmsStatusEnum.ONE.getShortValue());
        omsUser.setIdNumber(OmsStatusEnum.OTHER.getValue());
        omsUser.setCreateUser(OmsStatusEnum.QIUGUOQIYEYONGHU.getValue() + mobile);
        omsUser.setCreateTime(new Date());
        omsUser.setStatus(CommonOtaStatusEnum.OPEN.getValue());
        omsUser.setPid(pid != null ? pid : Constants.ZERO);
        omsUserService.save(omsUser);
        //把token和openid返给前端
        Map<String, Object> map = new HashMap<>();
        String token = TokenUtil.cacheToken(omsUser.getId(),
                LoginEnum.PUBLIC_ACCOUNT_KEY.getValue());
        map.put("token", token);
        map.put("omsUser", omsUser);
        return ResponseUtil.success(map);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霸霸-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值