package com.qianwen.core.social.request; import com.alibaba.fastjson.JSONObject; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.request.OapiGettokenRequest; import com.dingtalk.api.request.OapiUserGetRequest; import com.dingtalk.api.request.OapiUserGetuserinfoRequest; import com.dingtalk.api.response.OapiGettokenResponse; import com.dingtalk.api.response.OapiUserGetResponse; import com.dingtalk.api.response.OapiUserGetuserinfoResponse; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.request.AuthDefaultRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.core.social.props.BladeAuthSource; /* loaded from: blade-starter-social-9.3.2.0-SNAPSHOT.jar:org/springblade/core/social/request/CustomAuthDingTalkRequest.class */ public class CustomAuthDingTalkRequest extends AuthDefaultRequest { private static final Logger log = LoggerFactory.getLogger(CustomAuthDingTalkRequest.class); public static final String DAILY_DING_JS_TICKET = "dailyApplication:ticket:"; public static final String DAILY_DING_ACCESS_TOKEN = "dailyApplication:accessToken:"; private static final String URL_GET_USER_INFO = "https://oapi.dingtalk.com/user/getuserinfo"; public CustomAuthDingTalkRequest(AuthConfig config, AuthStateCache authStateCache) { this(config, BladeAuthSource.DINGTALK_WEB, authStateCache); } public CustomAuthDingTalkRequest(AuthConfig config, BladeAuthSource source, AuthStateCache authStateCache) { super(config, source, authStateCache); } public AuthToken getAccessToken(final AuthCallback authCallback) { String accessToken = getAccessToken(); AuthToken authToken = null; if (accessToken != null) { authToken = new AuthToken(); authToken.setAccessToken(accessToken); authToken.setCode(authCallback.getCode()); } return authToken; } public String getAccessToken() { try { String appkey = this.config.getClientId(); String appsecret = this.config.getClientSecret(); String appTokenRedisKey = DAILY_DING_ACCESS_TOKEN.concat(appkey).concat(":"); String accessToken = this.authStateCache.get(appTokenRedisKey); if (accessToken != null) { return accessToken; } DefaultDingTalkClient client = new DefaultDingTalkClient(this.source.accessToken()); OapiGettokenRequest request = new OapiGettokenRequest(); request.setAppkey(appkey); request.setAppsecret(appsecret); request.setHttpMethod("GET"); OapiGettokenResponse response = client.execute(request); if (!response.isSuccess()) { throw new AuthException(response.getErrmsg()); } String accessToken2 = response.getAccessToken(); this.authStateCache.cache(appTokenRedisKey, accessToken2, response.getExpiresIn().longValue() * 1000); return accessToken2; }catch(Exception e) { throw new RuntimeException(e); } } public String getUserId(final String authCode) { try { String accessToken = getAccessToken(); DefaultDingTalkClient defaultDingTalkClient = new DefaultDingTalkClient(URL_GET_USER_INFO); OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest(); request.setCode(authCode); request.setHttpMethod("GET"); //OapiGettokenResponse response = (OapiGettokenResponse)defaultDingTalkClient.execute(request); OapiUserGetuserinfoResponse response = defaultDingTalkClient.execute(request, accessToken); if (!response.isSuccess()) { throw new AuthException(response.getErrmsg()); } return response.getUserid(); }catch(Exception e) { throw new RuntimeException(e); } } protected AuthUser getUserInfo(AuthToken authToken) { try { String accessToken = authToken.getAccessToken(); String userId = getUserId(authToken.getCode()); DefaultDingTalkClient defaultDingTalkClient = new DefaultDingTalkClient(this.source.userInfo()); OapiUserGetRequest request = new OapiUserGetRequest(); request.setUserid(userId); request.setHttpMethod("GET"); //OapiUserGetResponse response = defaultDingTalkClient.execute(request, accessToken); OapiUserGetResponse response = defaultDingTalkClient.execute(request, accessToken); if (!response.isSuccess()) { throw new AuthException(response.getErrmsg()); } log.info("用户信息:{}", JSONObject.toJSONString(response)); return AuthUser.builder().rawUserInfo((JSONObject) JSONObject.toJSON(response)).uuid(response.getUserid()).nickname(response.getNickname()).username(response.getName()).location(response.getPosition()).email(response.getEmail()).avatar(response.getAvatar()).source(this.source.toString()).token(authToken).build(); }catch(Exception e) { throw new RuntimeException(e); } } }