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