forked from rongchao/epmet-cloud-rizhao
9 changed files with 161 additions and 0 deletions
@ -0,0 +1,28 @@ |
|||
package com.epmet.dto.form; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/9/14 14:52 |
|||
* @DESC |
|||
*/ |
|||
@Data |
|||
public class ExemptLoginUserDetailFormDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = -4333806195203619201L; |
|||
|
|||
public interface ExemptLoginUserDetailForm{} |
|||
|
|||
@NotBlank(message = "code不能为空",groups = ExemptLoginUserDetailForm.class) |
|||
private String code; |
|||
|
|||
@NotBlank(message = "corpId不能为空",groups = ExemptLoginUserDetailForm.class) |
|||
private String corpId; |
|||
|
|||
@NotBlank(message = "miniAppId不能为空",groups = ExemptLoginUserDetailForm.class) |
|||
private String miniAppId; |
|||
} |
@ -0,0 +1,14 @@ |
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.dto.form.ExemptLoginUserDetailFormDTO; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/9/14 14:56 |
|||
* @DESC |
|||
*/ |
|||
public interface DingTalkService { |
|||
|
|||
Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO); |
|||
|
|||
} |
@ -0,0 +1,78 @@ |
|||
package com.epmet.service.impl; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.aliyun.dingtalk.module.Result; |
|||
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.exception.EpmetException; |
|||
import com.epmet.dao.OpenSyncBizDataDao; |
|||
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; |
|||
|
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/9/14 14:57 |
|||
* @DESC |
|||
*/ |
|||
@Service |
|||
@Slf4j |
|||
public class DingTalkServiceImpl implements DingTalkService { |
|||
|
|||
@Autowired |
|||
private DingTalkClientToken dingTalkClientToken; |
|||
@Autowired |
|||
private OpenSyncBizDataDao openSyncBizDataDao; |
|||
@Autowired |
|||
private DingDingCallbackRedis dingCallbackRedis; |
|||
|
|||
@Override |
|||
public Object getExemptLoginUserDetail(ExemptLoginUserDetailFormDTO formDTO) { |
|||
DingMiniInfoDTO dingMiniInfo = openSyncBizDataDao.getDingMiniInfoByAppId(formDTO.getMiniAppId()); |
|||
|
|||
Result<AccessTokenResult> isvAccessTokenToken = dingTalkClientToken.getIsvAccessTokenToken(formDTO.getCorpId(), dingMiniInfo.getSuiteKey(), dingMiniInfo.getSuiteSecret(), dingCallbackRedis.get(dingMiniInfo.getSuiteKey())); |
|||
if (!isvAccessTokenToken.success()){ |
|||
throw new EpmetException("获取accessToken失败..."); |
|||
} |
|||
String accessToken = isvAccessTokenToken.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; |
|||
} |
|||
} |
Loading…
Reference in new issue