先上企业微信的文档
不多哔哔 我们上代码
先上用户实体类 和 企业微信实体类
@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);
}