From 86dd34f3b161f0e6c1305887e38132a281ba8536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Tue, 6 Jun 2023 09:30:49 +0800 Subject: [PATCH] 'commit' --- src/main/java/UnitTest/TestDingTalk_New.java | 87 +++++++++++++++----- 1 file changed, 65 insertions(+), 22 deletions(-) diff --git a/src/main/java/UnitTest/TestDingTalk_New.java b/src/main/java/UnitTest/TestDingTalk_New.java index 5256a63..4787435 100644 --- a/src/main/java/UnitTest/TestDingTalk_New.java +++ b/src/main/java/UnitTest/TestDingTalk_New.java @@ -2,7 +2,10 @@ package UnitTest; import cn.hutool.core.date.DateTime; import com.alibaba.fastjson.JSONObject; +import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponse; import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; +import com.aliyun.dingtalkoauth2_1_0.models.GetSsoAccessTokenRequest; +import com.aliyun.dingtalkoauth2_1_0.models.GetSsoAccessTokenResponse; import com.aliyun.tea.TeaException; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; @@ -18,6 +21,18 @@ import com.jfinal.plugin.redis.RedisPlugin; import com.taobao.api.ApiException; public class TestDingTalk_New { + /** + * 使用 Token 初始化账号Client + * + * @return Client + * @throws Exception + */ + public static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); + config.protocol = "https"; + config.regionId = "central"; + return new com.aliyun.dingtalkoauth2_1_0.Client(config); + } /* 功能:获取钉钉的Token,有效期7200秒,即2小时,每小时最好重新获取一次 @@ -27,11 +42,8 @@ public class TestDingTalk_New { 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); + String accessToken = null; + com.aliyun.dingtalkoauth2_1_0.Client client = createClient(); com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest() .setAppKey(appKey) .setAppSecret(appSecret); @@ -54,20 +66,33 @@ public class TestDingTalk_New { return jo.getString("access_token"); } } + /* 功能:获取钉钉的JsApiToken,有效期7200秒,即2小时,每小时最好重新获取一次 作者:黄海 时间:2023-06-06 */ - public static String getJsApiToken(String access_token) throws ApiException { + public static String getJsApiToken(String access_token) throws Exception { 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(); + String jsApiToken = null; + com.aliyun.dingtalkoauth2_1_0.Client client = createClient(); + com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders createJsapiTicketHeaders = new com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders(); + createJsapiTicketHeaders.xAcsDingtalkAccessToken = access_token; + try { + CreateJsapiTicketResponse res = client.createJsapiTicketWithOptions(createJsapiTicketHeaders, new com.aliyun.teautil.models.RuntimeOptions()); + jsApiToken = res.getBody().getJsapiTicket(); + } 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, jsApiToken);//5400:一个半小时过期 + return jsApiToken; } else { String str = Redis.use().get(KEY); JSONObject jo = JSONObject.parseObject(str); @@ -80,23 +105,34 @@ public class TestDingTalk_New { 作者:黄海 时间:2023-06-06 */ - public static String getSsoToken(String corpId, String ssoSecret) throws ApiException { + public static String getSsoToken(String corpId, String ssoSecret) throws Exception { 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(); + String ssoToken = null; + com.aliyun.dingtalkoauth2_1_0.Client client = createClient(); + GetSsoAccessTokenRequest getSsoAccessTokenRequest = new GetSsoAccessTokenRequest() + .setCorpid(corpId) + .setSsoSecret(ssoSecret); + try { + GetSsoAccessTokenResponse res=client.getSsoAccessToken(getSsoAccessTokenRequest); + ssoToken=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, ssoToken);//5400:一个半小时过期 + return ssoToken; } 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"); @@ -109,6 +145,13 @@ public class TestDingTalk_New { RedisPlugin redis = new RedisPlugin("myRedis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000); redis.start(); - System.out.println(getAccessToken(appKey,appSecret)); + String accessToken = getAccessToken(appKey, appSecret); + System.out.println("accessToken=" + accessToken); + + String jsApiToken = getJsApiToken(accessToken); + System.out.println("ticket=" + jsApiToken); + + String SsoToken = getSsoToken(corpId, ssoSecret); + System.out.println("ssoToken=" + SsoToken); } }