REQ-2211: 获取钉钉config
This commit is contained in:
parent
9d21a6c713
commit
9ad24ca275
@ -9,10 +9,16 @@ import java.util.List;
|
||||
*/
|
||||
@Data
|
||||
public class GetDingDingConfigReq {
|
||||
|
||||
/**
|
||||
* 目前后端写死
|
||||
* 三方凭证ID
|
||||
*/
|
||||
private Long ouId;
|
||||
private String appKey;
|
||||
|
||||
/**
|
||||
* 三方凭证密钥
|
||||
*/
|
||||
private String appSecret;
|
||||
/**
|
||||
* 当前网页的URL,不包含#及其后面部分
|
||||
*/
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.riven.common.constants.RedisKeyConstant;
|
||||
import cn.axzo.riven.common.util.Throws;
|
||||
import cn.azxo.framework.common.utils.LogUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponse;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponseBody;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest;
|
||||
@ -38,7 +39,7 @@ public class DingDingNewSdkManger {
|
||||
String key = String.format(RedisKeyConstant.DING_DING_V2_ACCESS_TOKEN_KEY, appKey);
|
||||
String tokenStr = redisTemplate.opsForValue().get(key);
|
||||
if (StringUtils.hasText(tokenStr)) {
|
||||
return JSONUtil.toBean(tokenStr, GetAccessTokenResponseBody.class);
|
||||
return JSON.parseObject((String) JSON.parse(tokenStr), GetAccessTokenResponseBody.class);
|
||||
}
|
||||
|
||||
GetAccessTokenRequest req = new GetAccessTokenRequest();
|
||||
@ -51,7 +52,7 @@ public class DingDingNewSdkManger {
|
||||
logErr("getAccessToken", e);
|
||||
throw Throws.bizDefaultException();
|
||||
}
|
||||
String data = JSONUtil.toJsonStr(res.getBody());
|
||||
String data = JSON.toJSONString(res.getBody());
|
||||
redisTemplate.opsForValue().set(key, data, res.getBody().expireIn - 200L, TimeUnit.SECONDS);
|
||||
return res.getBody();
|
||||
}
|
||||
@ -63,13 +64,13 @@ public class DingDingNewSdkManger {
|
||||
String key = String.format(RedisKeyConstant.DING_DING_V2_JSAPI_TICKET, appKey);
|
||||
String tokenStr = redisTemplate.opsForValue().get(key);
|
||||
if (StringUtils.hasText(tokenStr)) {
|
||||
return JSONUtil.toBean(tokenStr, CreateJsapiTicketResponseBody.class);
|
||||
return JSON.parseObject((String) JSON.parse(tokenStr), CreateJsapiTicketResponseBody.class);
|
||||
}
|
||||
com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders createJsapiTicketHeaders = new com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders();
|
||||
createJsapiTicketHeaders.xAcsDingtalkAccessToken = accessToken;
|
||||
try {
|
||||
CreateJsapiTicketResponse res = dingTalkOauthClient.createJsapiTicketWithOptions(createJsapiTicketHeaders, new RuntimeOptions());
|
||||
String data = JSONUtil.toJsonStr(res.getBody());
|
||||
String data = JSON.toJSONString(res.getBody());
|
||||
redisTemplate.opsForValue().set(key, data, res.getBody().expireIn - 200L, TimeUnit.SECONDS);
|
||||
return res.getBody();
|
||||
} catch (Exception e) {
|
||||
|
||||
@ -6,31 +6,53 @@ import cn.axzo.riven.client.res.GetDingDingConfigRes;
|
||||
import cn.axzo.riven.common.util.DdConfigSign;
|
||||
import cn.axzo.riven.common.util.Throws;
|
||||
import cn.axzo.riven.manger.DingDingNewSdkManger;
|
||||
import cn.axzo.riven.repository.entity.ThirdPartyCredential;
|
||||
import cn.axzo.riven.repository.service.ThirdPartyCredentialDao;
|
||||
import cn.azxo.framework.common.utils.LogUtil;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponseBody;
|
||||
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author yangchen@axzo.cn
|
||||
*/
|
||||
@Service
|
||||
public class DingDingService {
|
||||
@Autowired
|
||||
private ThirdPartyCredentialDao thirdPartyCredentialDao;
|
||||
@Autowired
|
||||
private DingDingNewSdkManger dingDingNewSdkManger;
|
||||
|
||||
public GetDingDingConfigRes getDingDingConfig(GetDingDingConfigReq req) {
|
||||
ThirdPartyCredential dingTalk = thirdPartyCredentialDao.getByOuIdAndChannel(req.getOuId(), "DingTalk");
|
||||
if (dingTalk == null) {
|
||||
throw Throws.bizException(BaseCode.FORBIDDEN, "企业未配置钉钉");
|
||||
// 从url里获取 corpId 防止恶意请求
|
||||
String corpId;
|
||||
try {
|
||||
URL urlObj = new URL(req.getUrl());
|
||||
String query = urlObj.getQuery();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
if (query != null) {
|
||||
String[] pairs = query.split("&");
|
||||
for (String pair : pairs) {
|
||||
int idx = pair.indexOf("=");
|
||||
String key = URLDecoder.decode(pair.substring(0, idx), "UTF-8");
|
||||
String value = URLDecoder.decode(pair.substring(idx + 1), "UTF-8");
|
||||
params.put(key, value);
|
||||
}
|
||||
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(dingTalk.getAppKey(), dingTalk.getAppSecret());
|
||||
CreateJsapiTicketResponseBody jsapiTicket = dingDingNewSdkManger.createJsapiTicket(dingTalk.getAppKey(), accessToken.getAccessToken());
|
||||
}
|
||||
corpId = params.get("corpId");
|
||||
} catch (Exception e) {
|
||||
throw Throws.bizException(BaseCode.BAD_REQUEST, "url参数不正确");
|
||||
}
|
||||
|
||||
if (!StringUtils.hasText(corpId)) {
|
||||
throw Throws.bizException(BaseCode.BAD_REQUEST, "url参数corpId不正确");
|
||||
}
|
||||
|
||||
GetAccessTokenResponseBody accessToken = dingDingNewSdkManger.getAccessToken(req.getAppKey(), req.getAppSecret());
|
||||
CreateJsapiTicketResponseBody jsapiTicket = dingDingNewSdkManger.createJsapiTicket(req.getAppKey(), accessToken.getAccessToken());
|
||||
String randomStr = DdConfigSign.getRandomStr(10);
|
||||
long ts = System.currentTimeMillis() / 1000;
|
||||
String sign;
|
||||
@ -42,7 +64,7 @@ public class DingDingService {
|
||||
}
|
||||
GetDingDingConfigRes getDingDingConfigRes = new GetDingDingConfigRes();
|
||||
getDingDingConfigRes.setAppId(req.getAppId());
|
||||
getDingDingConfigRes.setCorpId(dingTalk.getAppKey());
|
||||
getDingDingConfigRes.setCorpId(corpId);
|
||||
getDingDingConfigRes.setTimeStamp(ts);
|
||||
getDingDingConfigRes.setNonceStr(randomStr);
|
||||
getDingDingConfigRes.setSignature(sign);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user