You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package UnitTest;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
import com.aliyun.tea.TeaException;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGetJsapiTicketRequest;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiSsoGettokenRequest;
import com.dingtalk.api.response.OapiGetJsapiTicketResponse;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiSsoGettokenResponse;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.redis.Redis;
import com.jfinal.plugin.redis.RedisPlugin;
import com.taobao.api.ApiException;
public class TestDingTalk_New {
/*
功能获取钉钉的Token,有效期7200秒即2小时每小时最好重新获取一次
作者:黄海
时间2023-06-06
*/
public static String getAccessToken(String appKey, String appSecret) throws Exception {
final String KEY = "DingTalkAccessToken";
if (!Redis.use().exists(KEY)) {
String accessToken=null;
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "https";
config.regionId = "central";
com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
.setAppKey(appKey)
.setAppSecret(appSecret);
try {
GetAccessTokenResponse res = client.getAccessToken(getAccessTokenRequest);
accessToken = res.getBody().getAccessToken();
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
}
}
Redis.use().setex(KEY, 5400, accessToken);//5400:一个半小时过期
return accessToken;
} else {
String str = Redis.use().get(KEY);
JSONObject jo = JSONObject.parseObject(str);
return jo.getString("access_token");
}
}
/*
功能获取钉钉的JsApiToken,有效期7200秒即2小时每小时最好重新获取一次
作者:黄海
时间2023-06-06
*/
public static String getJsApiToken(String access_token) throws ApiException {
final String KEY = "DingTalkJsApiToken";
if (!Redis.use().exists(KEY)) {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/get_jsapi_ticket");
OapiGetJsapiTicketRequest req = new OapiGetJsapiTicketRequest();
req.setHttpMethod("GET");
OapiGetJsapiTicketResponse rsp = client.execute(req, access_token);
Redis.use().setex(KEY, 5400, rsp.getBody());//5400:一个半小时过期
return rsp.getBody();
} else {
String str = Redis.use().get(KEY);
JSONObject jo = JSONObject.parseObject(str);
return jo.getString("ticket");
}
}
/*
功能获取钉钉的SsoToken,有效期7200秒即2小时每小时最好重新获取一次
作者:黄海
时间2023-06-06
*/
public static String getSsoToken(String corpId, String ssoSecret) throws ApiException {
final String KEY = "DingTalkSsoToken";
if (!Redis.use().exists(KEY)) {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sso/gettoken");
OapiSsoGettokenRequest req = new OapiSsoGettokenRequest();
req.setCorpid(corpId);
req.setCorpsecret(ssoSecret);
req.setHttpMethod("GET");
OapiSsoGettokenResponse rsp = client.execute(req);
Redis.use().setex(KEY, 5400, rsp.getBody());//5400:一个半小时过期
return rsp.getBody();
} else {
String str = Redis.use().get(KEY);
JSONObject jo = JSONObject.parseObject(str);
return jo.getString("access_token");
}
}
public static void main(String[] args_) throws Exception {
PropKit.use("dingtalk.properties");
String corpId = PropKit.get("corpId");
String ssoSecret = PropKit.get("SSOSecret");
long agentId = PropKit.getLong("agentId");
final String appKey = PropKit.get("appKey");
String appSecret = PropKit.get("appSecret");
// 用于缓存模块的redis服务
RedisPlugin redis = new RedisPlugin("myRedis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000);
redis.start();
System.out.println(getAccessToken(appKey,appSecret));
}
}