Jelajahi Sumber

OA消息推送

yurk 2 tahun lalu
induk
melakukan
2f32afbbf9

+ 24 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDingdingServiceImpl.java

@@ -9,9 +9,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dingtalk.api.DefaultDingTalkClient;
 import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiGettokenRequest;
 import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
 import com.dingtalk.api.request.OapiMessageCorpconversationSendbytemplateRequest;
 import com.dingtalk.api.request.OapiServiceGetSuiteTokenRequest;
+import com.dingtalk.api.response.OapiGettokenResponse;
 import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
 import com.dingtalk.api.response.OapiMessageCorpconversationSendbytemplateResponse;
 import com.dingtalk.api.response.OapiServiceGetSuiteTokenResponse;
@@ -379,7 +381,7 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
 //        request.setMsg(msg);
         OapiMessageCorpconversationAsyncsendV2Response rsp = null;
         try {
-            rsp = client.execute(request, getCorpAccessToken(dingding));
+            rsp = client.execute(request, getInnerCorpToken(dingding));
         } catch (Exception exception) {
             exception.printStackTrace();
         }
@@ -406,13 +408,32 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
 
         OapiMessageCorpconversationAsyncsendV2Response rsp = null;
         try {
-            rsp = client.execute(request, getCorpAccessToken(dingding));
+            rsp = client.execute(request, getInnerCorpToken(dingding));
         } catch (Exception exception) {
             exception.printStackTrace();
         }
         System.out.println(rsp.getBody());
     }
-
+    /**
+     * 获取钉钉内部企业的token
+     */
+    private String getInnerCorpToken(CompanyDingding dingding) throws ApiException {
+        if (dingding.getInnerToken() == null || LocalDateTime.now().isAfter(dingding.getInnerExpireTime())) {
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+            OapiGettokenRequest request = new OapiGettokenRequest();
+            request.setAppkey(dingding.getInnerAppkey());
+            request.setAppsecret(dingding.getInnerAppsecret());
+            request.setHttpMethod("GET");
+            OapiGettokenResponse response = client.execute(request);
+            if (!response.isSuccess()) {
+                System.err.println("获取企业内部token失败:"+response.getErrorCode()+":"+response.getErrmsg());
+            }
+            dingding.setInnerToken(response.getAccessToken());
+            dingding.setInnerExpireTime(LocalDateTime.now().plusSeconds(response.getExpiresIn()));
+            companyDingdingMapper.updateById(dingding);
+        }
+        return dingding.getInnerToken();
+    }
     private String getDDSuiteAccessToken() throws ApiException {
         if (DingDingServiceImpl.SUITE_ACCESS_TOKEN == null || DingDingServiceImpl.suiteTokenExpireTime < System.currentTimeMillis()) {
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_suite_token");