|
|
@ -1,16 +1,8 @@ |
|
|
|
package com.epmet.service.impl; |
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.aliyun.dingtalk.module.DingTalkResult; |
|
|
|
import com.dingtalk.api.DefaultDingTalkClient; |
|
|
|
import com.dingtalk.api.DingTalkClient; |
|
|
|
import com.dingtalk.api.request.OapiV2UserGetRequest; |
|
|
|
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest; |
|
|
|
import com.dingtalk.api.response.OapiV2UserGetResponse; |
|
|
|
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse; |
|
|
|
import com.epmet.commons.tools.dto.form.DingMiniInfoFormDTO; |
|
|
|
import com.epmet.commons.tools.exception.EpmetException; |
|
|
|
import com.epmet.commons.tools.redis.RedisKeys; |
|
|
|
import com.epmet.commons.tools.redis.RedisUtils; |
|
|
|
import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache; |
|
|
@ -20,9 +12,7 @@ import com.epmet.dto.DingMiniInfoDTO; |
|
|
|
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO; |
|
|
|
import com.epmet.redis.DingDingCallbackRedis; |
|
|
|
import com.epmet.service.DingTalkService; |
|
|
|
import com.taobao.api.ApiException; |
|
|
|
import com.taobao.dingtalk.client.DingTalkClientToken; |
|
|
|
import com.taobao.dingtalk.vo.result.AccessTokenResult; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
@ -51,37 +41,8 @@ public class DingTalkServiceImpl implements DingTalkService { |
|
|
|
@Override |
|
|
|
public Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO) { |
|
|
|
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId()); |
|
|
|
DingTalkResult<AccessTokenResult> isvAccessToken = dingTalkClientToken.getIsvAccessToken(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey())); |
|
|
|
if (!isvAccessToken.success()){ |
|
|
|
throw new EpmetException("获取accessToken失败..."); |
|
|
|
} |
|
|
|
String accessToken = isvAccessToken.getData().getAccessToken(); |
|
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo"); |
|
|
|
OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest(); |
|
|
|
req.setCode(formDTO.getCode()); |
|
|
|
Object o = new Object(); |
|
|
|
try { |
|
|
|
OapiV2UserGetuserinfoResponse rsp = client.execute(req, accessToken); |
|
|
|
Map<String,Object> map = JSON.parseObject(rsp.getBody(), Map.class); |
|
|
|
if (!map.containsValue("ok")){ |
|
|
|
throw new EpmetException("通过免登码获取用户信息失败..."); |
|
|
|
} |
|
|
|
Map<String,Object> userInfo = JSON.parseObject(map.get("result").toString(), Map.class); |
|
|
|
DingTalkClient userDetailClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); |
|
|
|
OapiV2UserGetRequest userDetailRequest = new OapiV2UserGetRequest(); |
|
|
|
userDetailRequest.setUserid(userInfo.get("userid").toString()); |
|
|
|
//userDetailRequest.setLanguage("zh_CN");
|
|
|
|
OapiV2UserGetResponse execute = userDetailClient.execute(userDetailRequest, accessToken); |
|
|
|
Map<String,Object> userDetailResult = JSON.parseObject(execute.getBody(), Map.class); |
|
|
|
if (!userDetailResult.containsValue("ok")){ |
|
|
|
throw new EpmetException("查询用户详情失败..."); |
|
|
|
} |
|
|
|
o = userDetailResult.get("result"); |
|
|
|
} catch (ApiException e) { |
|
|
|
log.error(e.getMessage()); |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
return o; |
|
|
|
DingTalkResult<String> exemptLoginUserDetail = dingTalkClientToken.getExemptLoginUserDetail(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey()), formDTO.getCode()); |
|
|
|
return exemptLoginUserDetail.getData(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|