LAPTOP-SB56SG4Q\86185
3 years ago
17 changed files with 1011 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<plugin> |
||||
<id>com.fr.plugin.mqh.dingtalksyn.job</id> |
||||
<name><![CDATA[钉钉单点登陆]]></name> |
||||
<active>yes</active> |
||||
<version>1.1</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2018-07-31</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<description><![CDATA[钉钉单点登陆]]></description> |
||||
<change-notes><![CDATA[ |
||||
版本1.0主要功能:<br/> |
||||
1.用户单点登陆功能<br/> |
||||
]]></change-notes> |
||||
<main-package>com.fr.plugin.mqh.dingtalksyn</main-package> |
||||
<prefer-packages> |
||||
<prefer-package>com.fanruan.api</prefer-package> |
||||
<prefer-package>org.apache.commons.codec</prefer-package> |
||||
</prefer-packages> |
||||
<lifecycle-monitor class="com.fr.plugin.mqh.dingtalksyn.provider.LifeCycleMonitorImpl"/> |
||||
<extra-core> |
||||
<LocaleFinder class="com.fr.plugin.mqh.dingtalksyn.provider.LocaleFinder"/> |
||||
</extra-core> |
||||
<extra-decision> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.mqh.dingtalksyn.request.GlobalRequestFilterBridge"/> |
||||
</extra-decision> |
||||
<function-recorder class="com.fr.plugin.mqh.dingtalksyn.provider.LocaleFinder"/> |
||||
</plugin> |
@ -0,0 +1,73 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DingSynConfig |
||||
* Author: Louis |
||||
* Date: 2021/3/30 9:38 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.config; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DingSynConfig> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
@Visualization(category = "Plugin-dingtalksyn_Group") |
||||
public class DingSynConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile DingSynConfig config = null; |
||||
|
||||
public static DingSynConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(DingSynConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Identifier(value = "appKey", name = "Plugin-dingtalksyn_Config_appKey", description = "Plugin-dingtalksyn_Config_appKey_Description", status = Status.SHOW) |
||||
private Conf<String> appKey = Holders.simple(StringKit.EMPTY); |
||||
@Identifier(value = "appSecret", name = "Plugin-dingtalksyn_Config_appSecret", description = "Plugin-dingtalksyn_Config_appSecret_Description", status = Status.SHOW) |
||||
private Conf<String> appSecret = Holders.simple(StringKit.EMPTY); |
||||
@Identifier(value = "corpId", name = "Plugin-dingtalksyn_Config_corpId", description = "Plugin-dingtalksyn_Config_corpId_Description", status = Status.SHOW) |
||||
private Conf<String> corpId = Holders.simple(StringKit.EMPTY); |
||||
private Conf<Boolean> ssoEnable = Holders.simple(true); |
||||
|
||||
public String getAppKey() { |
||||
return appKey.get(); |
||||
} |
||||
|
||||
public void setAppKey(String appKey) { |
||||
this.appKey.set(appKey); |
||||
} |
||||
|
||||
public String getAppSecret() { |
||||
return appSecret.get(); |
||||
} |
||||
|
||||
public void setAppSecret(String appSecret) { |
||||
this.appSecret.set(appSecret); |
||||
} |
||||
|
||||
public String getCorpId() { |
||||
return corpId.get(); |
||||
} |
||||
|
||||
public void setCorpId(String corpId) { |
||||
this.corpId.set(corpId); |
||||
} |
||||
|
||||
public boolean getSsoEnable() { |
||||
return ssoEnable.get(); |
||||
} |
||||
|
||||
public void setSsoEnable(boolean ssoEnable) { |
||||
this.ssoEnable.set(ssoEnable); |
||||
} |
||||
} |
@ -0,0 +1,42 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: LifeCycleMonitorImpl |
||||
* Author: Louis |
||||
* Date: 2021/3/30 15:10 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.provider; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <LifeCycleMonitorImpl> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
@Authorize(callSignKey = LocaleFinder.PLUGIN_ID) |
||||
public class LifeCycleMonitorImpl extends AbstractPluginLifecycleMonitor { |
||||
public LifeCycleMonitorImpl() { |
||||
} |
||||
|
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
DingSynConfig config = DingSynConfig.getInstance(); |
||||
if (pluginContext.isAvailable()) { |
||||
config.setSsoEnable(true); |
||||
} else { |
||||
config.setSsoEnable(false); |
||||
LogKit.error("dingtalksyn-Plugin License is expired!"); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: LocaleFinder |
||||
* Author: Louis |
||||
* Date: 2020/8/31 22:19 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.provider; |
||||
|
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.intelli.record.Original; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <LocaleFinder> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
@EnableMetrics |
||||
public class LocaleFinder extends AbstractLocaleFinder { |
||||
public static final String PLUGIN_ID = "com.fr.plugin.mqh.dingtalksyn.job"; |
||||
|
||||
@Override |
||||
@Focus(id = PLUGIN_ID, text = "Plugin-dingtalksyn", source = Original.PLUGIN) |
||||
public String find() { |
||||
return "com/fr/plugin/mqh/dingtalksyn/locale/lang"; |
||||
} |
||||
|
||||
@Override |
||||
public int currentAPILevel() { |
||||
return CURRENT_LEVEL; |
||||
} |
||||
} |
@ -0,0 +1,212 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: GlobalRequestFilterBridge |
||||
* Author: Louis |
||||
* Date: 2021/3/30 22:09 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.request; |
||||
|
||||
import com.dingtalk.api.response.OapiV2UserGetResponse; |
||||
import com.fanruan.api.decision.login.LoginKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.net.NetworkKit; |
||||
import com.fanruan.api.net.http.HttpKit; |
||||
import com.fanruan.api.util.IOKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.base.TemplateUtils; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.FilterConfig; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import static com.fr.plugin.mqh.dingtalksyn.utils.DingAPI.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <GlobalRequestFilterBridge> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class GlobalRequestFilterBridge extends AbstractGlobalRequestFilterProvider { |
||||
public static final String TPL_PATH = "/com/fr/plugin/mqh/dingtalksyn/web/codePage.html"; |
||||
public static final String DINGTALK_OPEN_JS = "/com/fr/plugin/mqh/dingtalksyn/web/dingtalk.open.js"; |
||||
public static final String CODE = "code"; |
||||
public static final String DING_TALK_LOGIN = "dt"; |
||||
|
||||
private DingSynConfig config; |
||||
|
||||
/** |
||||
* 过滤器名称 |
||||
* |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public String filterName() { |
||||
return "DingTalkSynFilter"; |
||||
} |
||||
|
||||
/** |
||||
* 过滤规则 |
||||
* |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public String[] urlPatterns() { |
||||
return new String[]{"/decision/*"}; |
||||
} |
||||
|
||||
/** |
||||
* 过滤器初始化 |
||||
* |
||||
* @param filterConfig |
||||
*/ |
||||
@Override |
||||
public void init(FilterConfig filterConfig) { |
||||
this.config = DingSynConfig.getInstance(); |
||||
super.init(filterConfig); |
||||
} |
||||
|
||||
/** |
||||
* 过滤器处理 |
||||
* |
||||
* @param request |
||||
* @param response |
||||
* @param filterChain |
||||
*/ |
||||
@Override |
||||
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { |
||||
try { |
||||
if (operation(request, response)) { |
||||
filterChain.doFilter(request, response); |
||||
} |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 用户验证登陆操作 |
||||
* |
||||
* @param req |
||||
* @param res |
||||
* @throws Exception |
||||
*/ |
||||
private boolean operation(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
// 判断单点功能是否开启
|
||||
if (!this.config.getSsoEnable()) { |
||||
return true; |
||||
} |
||||
String pathInfo = (req.getPathInfo() != null) ? req.getPathInfo() : StringKit.EMPTY; |
||||
if (StringKit.equals(DINGTALK_OPEN_JS, pathInfo)) { |
||||
WebUtils.printAsString(res, IOKit.readResourceAsString(DINGTALK_OPEN_JS)); |
||||
return false; |
||||
} |
||||
//DingTalk登陆参数
|
||||
String dt = NetworkKit.getHTTPRequestParameter(req, DING_TALK_LOGIN); |
||||
if (StringKit.isBlank(dt)) { |
||||
return true; |
||||
} |
||||
// 已登录
|
||||
if (LoginService.getInstance().isLogged(req)) { |
||||
return true; |
||||
} |
||||
String code = NetworkKit.getHTTPRequestParameter(req, CODE); |
||||
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-operation-code:{}", code); |
||||
if (StringKit.isEmpty(code)) { |
||||
loginPage(req, res); |
||||
return false; |
||||
} |
||||
String accessToken = getAccessToken(code); |
||||
String username = getUsername(code, accessToken); |
||||
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-operation-username:{}", username); |
||||
if (StringKit.isEmpty(username)) { |
||||
return true; |
||||
} |
||||
String tokenFR = LoginKit.login(req, res, username); |
||||
req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, tokenFR); |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 钉钉获取code页面 |
||||
* |
||||
* @param req |
||||
* @param res |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
private void loginPage(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
Map<String, String> parameterMap = new HashMap<>(); |
||||
parameterMap.put("corpId", this.config.getCorpId()); |
||||
parameterMap.put("openJs", WebUtils.createServletURL(req) + DINGTALK_OPEN_JS); |
||||
parameterMap.put("remoteServletURL", getRemoteServletURL(WebUtils.getOriginalURL(req))); |
||||
String codePage = TemplateUtils.renderTemplate(TPL_PATH, parameterMap); |
||||
WebUtils.printAsString(res, codePage); |
||||
} |
||||
|
||||
/** |
||||
* 处理请求url加入code参数 |
||||
* |
||||
* @param url |
||||
* @return |
||||
*/ |
||||
private String getRemoteServletURL(String url) { |
||||
if (url.contains("?")) { |
||||
return url + "&" + CODE + "="; |
||||
} |
||||
return url + "?" + CODE + "="; |
||||
} |
||||
|
||||
/** |
||||
* 获取access_token |
||||
* |
||||
* @param code |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
private String getAccessToken(String code) throws Exception { |
||||
Map<String, String> tokenParams = new HashMap<>(); |
||||
tokenParams.put("appkey", this.config.getAppKey()); |
||||
tokenParams.put("appsecret", this.config.getAppSecret()); |
||||
tokenParams.put("code", code); |
||||
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getAccessToken-params:{}", tokenParams); |
||||
String res = HttpKit.get(GETTOKEN, tokenParams); |
||||
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getAccessToken-res:{}", res); |
||||
if (StringKit.isEmpty(res)) { |
||||
return StringKit.EMPTY; |
||||
} |
||||
return new JSONObject(res).getString("access_token"); |
||||
} |
||||
|
||||
/** |
||||
* 通过凭证获得username |
||||
* |
||||
* @param code |
||||
* @param accessToken |
||||
* @return |
||||
*/ |
||||
private String getUsername(String code, String accessToken) throws Exception { |
||||
Map<String, String> userInfoParams = new HashMap<>(); |
||||
userInfoParams.put("access_token", accessToken); |
||||
userInfoParams.put("code", code); |
||||
String userRes = HttpKit.get(GET_USER_INFO, userInfoParams); |
||||
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getUsername-userRes:{}", userRes); |
||||
String userId = new JSONObject(userRes).getString("userid"); |
||||
OapiV2UserGetResponse.UserGetResponse userGetResponse = getUserResponse(userId); |
||||
if (userGetResponse.getExtension() == null) { |
||||
return userId; |
||||
} |
||||
return new JSONObject(userGetResponse.getExtension()).getString("编号"); |
||||
} |
||||
} |
@ -0,0 +1,152 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DingAPI |
||||
* Author: Louis |
||||
* Date: 2021/5/13 16:16 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.utils; |
||||
|
||||
import com.dingtalk.api.DefaultDingTalkClient; |
||||
import com.dingtalk.api.DingTalkClient; |
||||
import com.dingtalk.api.request.*; |
||||
import com.dingtalk.api.response.*; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig; |
||||
import com.taobao.api.ApiException; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DingAPI> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DingAPI { |
||||
public static final int TOKEN_EXPIRE_TIME = 3600000; |
||||
/** |
||||
* 获取企业内部应用的access_token |
||||
*/ |
||||
public static final String GETTOKEN = "https://oapi.dingtalk.com/gettoken"; |
||||
/** |
||||
* 通过免登码获取用户信息 |
||||
*/ |
||||
public static final String GET_USER_INFO = "https://oapi.dingtalk.com/user/getuserinfo"; |
||||
public static final String USER_GET = "https://oapi.dingtalk.com/topapi/v2/user/get"; |
||||
public static final String DEPARTMENT_LIST = "https://oapi.dingtalk.com/topapi/v2/department/listsub"; |
||||
public static final String GET_DEPT_MEMBER = "https://oapi.dingtalk.com/topapi/user/listid"; |
||||
public static final String GET_DEPT = "https://oapi.dingtalk.com/topapi/v2/department/get"; |
||||
public static final String ROLE_LIST = "https://oapi.dingtalk.com/topapi/role/list"; |
||||
public static final String GETROLE = "https://oapi.dingtalk.com/topapi/role/getrole"; |
||||
|
||||
/** |
||||
* 根据deptId获取用户详情 |
||||
* |
||||
* @param deptId |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static OapiV2DepartmentGetResponse.DeptGetResponse getDeptResponse(long deptId) throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(GET_DEPT); |
||||
OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest(); |
||||
req.setDeptId(deptId); |
||||
req.setLanguage("zh_CN"); |
||||
OapiV2DepartmentGetResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
return rsp.getResult(); |
||||
} |
||||
|
||||
/** |
||||
* 获取部门用户userid列表 |
||||
* |
||||
* @param deptId |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static List<String> getDeptMember(long deptId) throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(GET_DEPT_MEMBER); |
||||
OapiUserListidRequest req = new OapiUserListidRequest(); |
||||
req.setDeptId(deptId); |
||||
OapiUserListidResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
return rsp.getResult().getUseridList(); |
||||
} |
||||
|
||||
/** |
||||
* 获取部门列表 |
||||
* |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDepartmentList(long deptId) throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(DEPARTMENT_LIST); |
||||
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest(); |
||||
req.setDeptId(deptId); |
||||
req.setLanguage("zh_CN"); |
||||
OapiV2DepartmentListsubResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
return rsp.getResult(); |
||||
} |
||||
|
||||
/** |
||||
* 根据roleId获取角色详情 |
||||
* |
||||
* @param roleId |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static OapiRoleGetroleResponse.OpenRole getRoleResponse(long roleId) throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(GETROLE); |
||||
OapiRoleGetroleRequest req = new OapiRoleGetroleRequest(); |
||||
req.setRoleId(roleId); |
||||
OapiRoleGetroleResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
return rsp.getRole(); |
||||
} |
||||
|
||||
/** |
||||
* 获取角色列表 |
||||
* |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static List<OapiRoleListResponse.OpenRoleGroup> getOapiRoleList() throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(ROLE_LIST); |
||||
OapiRoleListRequest req = new OapiRoleListRequest(); |
||||
req.setSize(200L); |
||||
req.setOffset(0L); |
||||
OapiRoleListResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
return rsp.getResult().getList(); |
||||
} |
||||
|
||||
/** |
||||
* 根据userid获取用户详情 |
||||
* |
||||
* @param userId |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static OapiV2UserGetResponse.UserGetResponse getUserResponse(String userId) throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(USER_GET); |
||||
OapiV2UserGetRequest req = new OapiV2UserGetRequest(); |
||||
req.setUserid(userId); |
||||
req.setLanguage("zh_CN"); |
||||
OapiV2UserGetResponse rsp = client.execute(req, DingTokenUtils.getAccessToken()); |
||||
LogKit.info("dingtalksyn-DingAPI-getUserResponse-rsp:{}", rsp.getBody()); |
||||
return rsp.getResult(); |
||||
} |
||||
|
||||
/** |
||||
* 获取企业内部应用的access_token |
||||
* |
||||
* @return |
||||
* @throws ApiException |
||||
*/ |
||||
public static String getAccessToken() throws ApiException { |
||||
DingTalkClient client = new DefaultDingTalkClient(GETTOKEN); |
||||
OapiGettokenRequest request = new OapiGettokenRequest(); |
||||
request.setAppkey(DingSynConfig.getInstance().getAppKey()); |
||||
request.setAppsecret(DingSynConfig.getInstance().getAppSecret()); |
||||
request.setHttpMethod("GET"); |
||||
OapiGettokenResponse response = client.execute(request); |
||||
return response.getAccessToken(); |
||||
} |
||||
} |
@ -0,0 +1,67 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DingTokenUtils |
||||
* Author: Louis |
||||
* Date: 2021/5/14 14:23 |
||||
*/ |
||||
package com.fr.plugin.mqh.dingtalksyn.utils; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig; |
||||
import com.fr.store.StateHubManager; |
||||
import com.fr.store.StateHubService; |
||||
|
||||
import static com.fr.plugin.mqh.dingtalksyn.utils.DingAPI.TOKEN_EXPIRE_TIME; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DingTokenUtils> |
||||
* |
||||
* @author Louis |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DingTokenUtils { |
||||
|
||||
public static final String DINGTALKSYN_ACCESS_TOKEN = "dingtalksyn_access_token"; |
||||
public static final String DINGTALKSYN_SUITE_TICKET = "dingtalksyn_suite_ticket"; |
||||
|
||||
private static final StateHubService tokenService = StateHubManager.applyForService(DINGTALKSYN_ACCESS_TOKEN); |
||||
private static final StateHubService ticketService = StateHubManager.applyForService(DINGTALKSYN_SUITE_TICKET); |
||||
|
||||
public DingTokenUtils() { |
||||
} |
||||
|
||||
/** |
||||
* 缓存钉钉端AccessToken |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String getAccessToken() { |
||||
String appKey = DingSynConfig.getInstance().getAppKey(); |
||||
try { |
||||
if (StringKit.isBlank(tokenService.get(appKey))) { |
||||
tokenService.put(appKey, DingAPI.getAccessToken(), TOKEN_EXPIRE_TIME); |
||||
} |
||||
return tokenService.get(appKey); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
return StringKit.EMPTY; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 缓存钉钉端SuiteTicket |
||||
* |
||||
* @return |
||||
*/ |
||||
public static void setSuiteTicket(String suiteTicket) { |
||||
String appKey = DingSynConfig.getInstance().getAppKey(); |
||||
try { |
||||
ticketService.put(appKey, suiteTicket, TOKEN_EXPIRE_TIME); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,188 @@
|
||||
Plugin-dingtalksyn=DingTalk syn Plugin |
||||
Plugin-dingtalksyn_Group=DingTalk syn Plugin |
||||
Plugin-dingtalksyn_Config_CronCondition=Cron Condition |
||||
Plugin-dingtalksyn_Config_CronCondition_Description=Cron Condition |
||||
Plugin-dingtalksyn_Config_appKey=APPKEY |
||||
Plugin-dingtalksyn_Config_appKey_Description=APPKEY |
||||
Plugin-dingtalksyn_Config_appSecret=appSecret |
||||
Plugin-dingtalksyn_Config_appSecret_Description=appSecret |
||||
Plugin-dingtalksyn_Config_corpId=Corp Id |
||||
Plugin-dingtalksyn_Config_corpId_Description=Corp Id |
||||
Plugin-dingtalksyn_Config_rootDepId=Root Department ID |
||||
Plugin-dingtalksyn_Config_rootDepId_Description=Root Department ID |
||||
Plugin-dingtalksyn_Config_Token=Token |
||||
Plugin-dingtalksyn_Config_Token_Description=Token |
||||
Plugin-dingtalksyn_Config_AesKey=AesKey |
||||
Plugin-dingtalksyn_Config_AesKey_Description=AesKey |
||||
Plugin-dingtalksyn_Config_SsoEnable=Sso Enable |
||||
Plugin-dingtalksyn_Config_SsoEnable_Description=Sso Enable |
||||
Plugin-dingtalksyn_Error_500=error |
||||
Plugin-dingtalksyn_Error_501=DingTalkSyn Plugin License Expired! |
||||
## \u524D\u7AEFjs |
||||
Plugin-dingtalksyn_DingTalk_Manager=DingTalk Sync |
||||
|
||||
Dec-Module-DingTalkSyn_Manager=Dec-Module-DingTalkSyn_Manager |
||||
Dec-DingTalkSyn_Basic=Dec-DingTalkSyn_Basic |
||||
Dec-DingTalkSyn_Recive_Data_URL=Dec-DingTalkSyn_Recive_Data_URL |
||||
Dec-DingTalkSyn_Corp_ID=Dec-DingTalkSyn_Corp_ID |
||||
Dec-DingTalkSyn_Secret=Dec-DingTalkSyn_Secret |
||||
Dec-DingTalkSyn_Member_Management=Dec-DingTalkSyn_Member_Management |
||||
Dec-DingTalkSyn_User-Same-With-FS=Dec-DingTalkSyn_User-Same-With-FS |
||||
Dec-DingTalkSyn_Mobile-Same-With-FS=Dec-DingTalkSyn_Mobile-Same-With-FS |
||||
Dec-DingTalkSyn_Manual-Matching-FS=Dec-DingTalkSyn_Manual-Matching-FS |
||||
Dec-DingTalkSyn_Custom-Matching-FS=Dec-DingTalkSyn_Custom-Matching-FS |
||||
Dec-DingTalkSyn_UserID=Dec-DingTalkSyn_UserID |
||||
Dec-DingTalkSyn_DecUserName=Dec-DingTalkSyn_DecUserName |
||||
Dec-DingTalkSyn_Name=Dec-DingTalkSyn_Name |
||||
Dec-DingTalkSyn_Department=Dec-DingTalkSyn_Department |
||||
Dec-DingTalkSyn_User_Job_Name=Dec-DingTalkSyn_User_Job_Name |
||||
Dec-Schedule-Notification_DingTalkSyn=Dec-Schedule-Notification_DingTalkSyn |
||||
Dec-Schedule-Notification_DingTalkSyn_CorpID=Dec-Schedule-Notification_DingTalkSyn_CorpID |
||||
Dec-Schedule-Notification_DingTalkSyn_Users=Dec-Schedule-Notification_DingTalkSyn_Users |
||||
Dec-Schedule-Notification_DingTalkSyn_DepID=Dec-Schedule-Notification_DingTalkSyn_DepID |
||||
Dec-Schedule-Notification_DingTalkSyn_Content=Dec-Schedule-Notification_DingTalkSyn_Content |
||||
Dec-Schedule-Notification_DingTalkSyn_WithLink=Dec-Schedule-Notification_DingTalkSyn_WithLink |
||||
Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null=Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null |
||||
Dec-DingTalkSyn_UrlHint=Dec-DingTalkSyn_UrlHint |
||||
Dec-DingTalkSyn_Token_Path=Dec-DingTalkSyn_Token_Path |
||||
Dec-DingTalkSyn_Refresh_User=Dec-DingTalkSyn_Refresh_User |
||||
Dec-DingTalkSyn_Mobile=Dec-DingTalkSyn_Mobile |
||||
Dec-DingTalkSyn_Matching_Way=Dec-DingTalkSyn_Matching_Way |
||||
Dec-DingTalkSyn_Hint=Dec-DingTalkSyn_Hint |
||||
Dec-DingTalkSyn_Loading=Dec-DingTalkSyn_Loading |
||||
Dec-DingTalkSyn_Mobile_Not_Supported=Dec-DingTalkSyn_Mobile_Not_Supported |
||||
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-Terminal=DingTalkSyn |
||||
Dec-DingTalkSyn_Addressee_Chat_Group=Dec-DingTalkSyn_Addressee_Chat_Group |
||||
Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip=Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip |
||||
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-AgentId=AgentID |
||||
Dec-DingTalkSyn_Expired_Error=Dec-DingTalkSyn_Expired_Error |
||||
Dec-DingTalkSyn_Expired_Solution=Dec-DingTalkSyn_Expired_Solution |
||||
Dec-DingTalkSyn_Agent-Management=Dec-DingTalkSyn_Agent-Management |
||||
Dec-DingTalkSyn_Member-Management=Dec-DingTalkSyn_Member-Management |
||||
Dec-DingTalkSyn_Agent-Config=Dec-DingTalkSyn_Agent-Config |
||||
Dec-DingTalkSyn_Agent-Name=Dec-DingTalkSyn_Agent-Name |
||||
Dec-DingTalkSyn_Agent-Id=Dec-DingTalkSyn_Agent-Id |
||||
Dec-DingTalkSyn_Organizational-Structure=Dec-DingTalkSyn_Organizational-Structure |
||||
Dec-DingTalkSyn_Tag=Dec-DingTalkSyn_Tag |
||||
Dec-DingTalkSyn_Server=Dec-DingTalkSyn_Server |
||||
Dec-DingTalkSyn_Save=Dec-DingTalkSyn_Save |
||||
Dec-DingTalkSyn_Start_With_Http=Dec-DingTalkSyn_Start_With_Http |
||||
Dec-DingTalkSyn_Server_Url=Dec-DingTalkSyn_Server_Url |
||||
Dec-DingTalkSyn_Server_Tip=Dec-DingTalkSyn_Server_Tip |
||||
Dec-DingTalkSyn_Enterprise-DingDing=Dec-DingTalkSyn_Enterprise-DingDing |
||||
Dec-DingTalkSyn_New-Agent=Dec-DingTalkSyn_New-Agent |
||||
Dec-DingTalkSyn_Non-Adapted-Agent=Dec-DingTalkSyn_Non-Adapted-Agent |
||||
Dec-DingTalkSyn_Modify-Agent=Dec-DingTalkSyn_Modify-Agent |
||||
Dec-DingTalkSyn_DeleteAgent-Confirm-Popup=Dec-DingTalkSyn_DeleteAgent-Confirm-Popup |
||||
Dec-DingTalkSyn_Confirm=Dec-DingTalkSyn_Confirm |
||||
Dec-DingTalkSyn_Cancel=Dec-DingTalkSyn_Cancel |
||||
Dec-DingTalkSyn_Save-Agent-Fail=Dec-DingTalkSyn_Save-Agent-Fail |
||||
Dec-DingTalkSyn_Unknown-Agent=Dec-DingTalkSyn_Unknown-Agent |
||||
Dec-DingTalkSyn_Agent-Name-Exist=Dec-DingTalkSyn_Agent-Name-Exist |
||||
Dec-DingTalkSyn_Match-Way=Dec-DingTalkSyn_Match-Way |
||||
Dec-DingTalkSyn_Match-Setting=Dec-DingTalkSyn_Match-Setting |
||||
Dec-DingTalkSyn_DataSet=Dec-DingTalkSyn_DataSet |
||||
Dec-DingTalkSyn_Address-Book=Dec-DingTalkSyn_Address-Book |
||||
Dec-DingTalkSyn_Member-Update=Dec-DingTalkSyn_Member-Update |
||||
Dec-DingTalkSyn_Set-Update=Dec-DingTalkSyn_Set-Update |
||||
Dec-DingTalkSyn_Not-Null=Dec-DingTalkSyn_Not-Null |
||||
Dec-DingTalkSyn_Start-Update=Dec-DingTalkSyn_Start-Update |
||||
Dec-DingTalkSyn_Per=Dec-DingTalkSyn_Per |
||||
Dec-DingTalkSyn_Day=Dec-DingTalkSyn_Day |
||||
Dec-DingTalkSyn_Week=Dec-DingTalkSyn_Week |
||||
Dec-DingTalkSyn_Monday=Dec-DingTalkSyn_Monday |
||||
Dec-DingTalkSyn_Tuesday=Dec-DingTalkSyn_Tuesday |
||||
Dec-DingTalkSyn_Wednesday=Dec-DingTalkSyn_Wednesday |
||||
Dec-DingTalkSyn_Thursday=Dec-DingTalkSyn_Thursday |
||||
Dec-DingTalkSyn_Friday=Dec-DingTalkSyn_Friday |
||||
Dec-DingTalkSyn_Saturday=Dec-DingTalkSyn_Saturday |
||||
Dec-DingTalkSyn_Sunday=Dec-DingTalkSyn_Sunday |
||||
Dec-DingTalkSyn_Hour=Dec-DingTalkSyn_Hour |
||||
Dec-DingTalkSyn_Minute=Dec-DingTalkSyn_Minute |
||||
Dec-DingTalkSyn_Update-Once=Dec-DingTalkSyn_Update-Once |
||||
Dec-DingTalkSyn_Illegal=Dec-DingTalkSyn_Illegal |
||||
Dec-DingTalkSyn_Proxy=Dec-DingTalkSyn_Proxy |
||||
Dec-DingTalkSyn_Proxy_Address=Dec-DingTalkSyn_Proxy_Address |
||||
Dec-DingTalkSyn_Proxy_Address_Tip=Dec-DingTalkSyn_Proxy_Address_Tip |
||||
Dec-DingTalkSyn_Test-Proxy-Address=Dec-DingTalkSyn_Test-Proxy-Address |
||||
Dec-DingTalkSyn_Start-With-Http=Dec-DingTalkSyn_Start-With-Http |
||||
Dec-DingTalkSyn_Test-Connection=Dec-DingTalkSyn_Test-Connection |
||||
Dec-DingTalkSyn_Connection-Success=Dec-DingTalkSyn_Connection-Success |
||||
Dec-DingTalkSyn_Connection-Fail=Dec-DingTalkSyn_Connection-Fail |
||||
Dec-DingTalkSyn_Unknown-Agent-Id=Dec-DingTalkSyn_Unknown-Agent-Id |
||||
Dec-DingTalkSyn_Delete-Agent-Fail=Dec-DingTalkSyn_Delete-Agent-Fail |
||||
Dec-DingTalkSyn_Agent-Id-Exist=Dec-DingTalkSyn_Agent-Id-Exist |
||||
Dec-DingTalkSyn_Save-ReportServer-Url-Fail=Dec-DingTalkSyn_Save-ReportServer-Url-Fail |
||||
Dec-DingTalkSyn_Save-Timing-Task-Fail=Dec-DingTalkSyn_Save-Timing-Task-Fail |
||||
Dec-DingTalkSyn_Error-AppKey-And-AppSecret=Dec-DingTalkSyn_Error-AppKey-And-AppSecret |
||||
Dec-DingTalkSyn_Error-AppKey-And-AgentId=Dec-DingTalkSyn_Error-AppKey-And-AgentId |
||||
Dec-DingTalkSyn_Duplicate-Agent-Name=Dec-DingTalkSyn_Duplicate-Agent-Name |
||||
Dec-DingTalkSyn_Save-Match-Method-Fail=Dec-DingTalkSyn_Save-Match-Method-Fail |
||||
Dec-DingTalkSyn_Duplicate-Agent-Id=Dec-DingTalkSyn_Duplicate-Agent-Id |
||||
Dec-DingTalkSyn_Save-Proxy-Server-Fail=Dec-DingTalkSyn_Save-Proxy-Server-Fail |
||||
Dec-DingTalkSyn_Connect-Proxy-Server-Fail=Dec-DingTalkSyn_Connect-Proxy-Server-Fail |
||||
Dec-DingTalkSyn_NetWork-Anomaly=Dec-DingTalkSyn_NetWork-Anomaly |
||||
Dec-DingTalkSyn_Create-DingTalkSyn-Url=Dec-DingTalkSyn_Create-DingTalkSyn-Url |
||||
Dec-DingTalkSyn_Platform-Page=Dec-DingTalkSyn_Platform_Page |
||||
Dec-DingTalkSyn_Platform-Report=Dec-DingTalkSyn_Platform-Report |
||||
Dec-DingTalkSyn_Platform=Dec-DingTalkSyn_Platform |
||||
Dec-DingTalkSyn_Parameter_Setting=Dec-DingTalkSyn_Parameter_Setting |
||||
Dec-DingTalkSyn_Create-Url=Dec-DingTalkSyn_Create-Url |
||||
Dec-DingTalkSyn_DingTalkSyn_Url=Dec-DingTalkSyn_DingTalkSyn_Url |
||||
Dec-DingTalkSyn_Copy-Url=Dec-DingTalkSyn_Copy-Url |
||||
Dec-DingTalkSyn_Copy-Success=Dec-DingTalkSyn_Copy-Success |
||||
Dec-DingTalkSyn_Input-Hint=Dec-DingTalkSyn_Input-Hint |
||||
Dec-DingTalkSyn_Save-User-Relation-Fail=Dec-DingTalkSyn_Save-User-Relation-Fail |
||||
BI-Basic_Search=BI-Basic_Search |
||||
Dec-DingTalkSyn_Match-Way-Not-Null=Dec-DingTalkSyn_Match-Way-Not-Null |
||||
Dec-DingTalkSyn_Not-Select=Dec-DingTalkSyn_Not-Select |
||||
Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail=Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail |
||||
Dec-DingTalkSyn_Create-Agent-Tip=Dec-DingTalkSyn_Create-Agent-Tip |
||||
Dec-DingTalkSyn_IP-Config-Not-Available=Dec-DingTalkSyn_IP-Config-Not-Available |
||||
Dec-DingTalkSyn_NetWork-Invalid=Dec-DingTalkSyn_NetWork-Invalid |
||||
Dec-DingTalkSyn_Not_Trusted_Domain_Error=Dec-DingTalkSyn_Not_Trusted_Domain_Error |
||||
Dec-DingTalkSyn_Not_Trusted_Domain_Exception=Dec-DingTalkSyn_Not_Trusted_Domain_Exception |
||||
Dec-DingTalkSyn_Debugger-Set-Level=Dec-DingTalkSyn_Debugger-Set-Level |
||||
Dec-DingTalkSyn_Debugger-Level=Dec-DingTalkSyn_Debugger-Level |
||||
Dec-DingTalkSyn_Debugger-Parameter-List=Dec-DingTalkSyn_Debugger-Parameter-List |
||||
Dec-DingTalkSyn_Debugger-Content=Dec-DingTalkSyn_Debugger-Content |
||||
Dec-DingTalkSyn_Debugger-Type-Get-Access-Token=Dec-DingTalkSyn_Debugger-Type-Get-Access-Token |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Ip=Dec-DingTalkSyn_Debugger-Type-Check-Ip |
||||
Dec-DingTalkSyn_Debugger-Start-Check=Dec-DingTalkSyn_Debugger-Start-Check |
||||
Dec-DingTalkSyn_Debugger-Show-Result=Dec-DingTalkSyn_Debugger-Show-Result |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time=Dec-DingTalkSyn_Debugger-Type-Check-Request-Time |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result=Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result |
||||
Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid=Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid |
||||
Dec-DingTalkSyn_Debugger-DownLoad_Log=Dec-DingTalkSyn_Debugger-DownLoad_Log |
||||
Dec-DingTalkSyn_Click-To-Download=Dec-DingTalkSyn_Click-To-Download |
||||
Dec-DingTalkSyn_Download-Fail=Dec-DingTalkSyn_Download-Fail |
||||
Dec-DingTalkSyn_Not_Null=Dec-DingTalkSyn_Not_Null |
||||
Dec-DingTalkSyn_ErrorDetail=Dec-DingTalkSyn_ErrorDetail |
||||
Dec-DingTalkSyn_Debugger-Check-Ip-Result=Dec-DingTalkSyn_Debugger-Check-Ip-Result |
||||
Dec-DingTalkSyn_Debugger-Get-Token=Dec-DingTalkSyn_Debugger-Get-Token |
||||
Dec-DingTalkSyn_Agent_Deleted_Tip=Dec-DingTalkSyn_Agent_Deleted_Tip |
||||
Dec-DingTalkSyn_Parse_Parameters=Dec-DingTalkSyn_Parse_Parameters |
||||
Dec-DingTalkSyn_Parse_Parameters_Tip=Dec-DingTalkSyn_Parse_Parameters_Tip |
||||
Dec-DingTalkSyn_Enterprise_Agent=Dec-DingTalkSyn_Enterprise_Agent |
||||
Dec-DingTalkSyn_Chatgroup_Name=Dec-DingTalkSyn_Chatgroup_Name |
||||
Dec-DingTalkSyn_Chat_Group=Dec-DingTalkSyn_Chat_Group |
||||
Dec-DingTalkSyn_New_Chat_Group=Dec-DingTalkSyn_New_Chat_Group |
||||
Dec-DingTalkSyn_Delete_ChatGroup_Confirm=Dec-DingTalkSyn_Delete_ChatGroup_Confirm |
||||
Dec-DingTalkSyn_Chat_Group_Member_Tip=Dec-DingTalkSyn_Chat_Group_Member_Tip |
||||
Dec-DingTalkSyn_Chat_Group_Leader=Dec-DingTalkSyn_Chat_Group_Leader |
||||
Dec-DingTalkSyn_Chat_Group_Member=Dec-DingTalkSyn_Chat_Group_Member |
||||
Dec-DingTalkSyn_New_Chat_Group_Tip1=Dec-DingTalkSyn_New_Chat_Group_Tip1 |
||||
Dec-DingTalkSyn_New_Chat_Group_Tip2=Dec-DingTalkSyn_New_Chat_Group_Tip2 |
||||
Dec-DingTalkSyn_New_Chat_Group_Message=Dec-DingTalkSyn_New_Chat_Group_Message |
||||
Dec-DingTalkSyn_Common_Error_Tip=Dec-DingTalkSyn_Common_Error_Tip |
||||
Dec-DingTalkSyn_Chat_Group_Name_Length_Tip=Dec-DingTalkSyn_Chat_Group_Name_Length_Tip |
||||
Dec-DingTalkSyn_Create-Chat-Group-Fail=Dec-DingTalkSyn_Create-Chat-Group-Fail |
||||
Dec-DingTalkSyn_Output_User_Empty=Dec-DingTalkSyn_Output_User_Empty |
||||
Dec-DingTalkSyn_Message_Agent=Dec-DingTalkSyn_Message_Agent |
||||
Dec-DingTalkSyn_Message_Group=Dec-DingTalkSyn_Message_Group |
||||
Dec-DingTalkSyn_DingTalkSyn=Dec-DingTalkSyn_DingTalkSyn |
||||
Dec-DingTalkSyn_Output_User_Fail_Partly_Header=Dec-DingTalkSyn_Output_User_Fail_Partly_Header |
||||
Dec-DingTalkSyn_Output_User_Fail_Partly_Tip=Dec-DingTalkSyn_Output_User_Fail_Partly_Tip |
||||
Dec-DingTalkSyn_Output_Group_Fail_Partly_Header=Dec-DingTalkSyn_Output_Group_Fail_Partly_Header |
||||
Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip=Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip |
||||
Dec-DingTalkSyn_User_Match_Dec_User_Fail=Dec-DingTalkSyn_User_Match_Dec_User_Fail |
@ -0,0 +1,188 @@
|
||||
Plugin-dingtalksyn=\u9489\u9489\u6570\u636E\u540C\u6B65\u63D2\u4EF6 |
||||
Plugin-dingtalksyn_Group=\u9489\u9489\u6570\u636E\u540C\u6B65\u63D2\u4EF6 |
||||
Plugin-dingtalksyn_Config_CronCondition=Cron\u8868\u8FBE\u5F0F |
||||
Plugin-dingtalksyn_Config_CronCondition_Description=Cron\u8868\u8FBE\u5F0F |
||||
Plugin-dingtalksyn_Config_appKey=\u5E94\u7528\u7CFB\u7EDF\u7684APPKEY |
||||
Plugin-dingtalksyn_Config_appKey_Description=\u5E94\u7528\u7CFB\u7EDF\u7684APPKEY |
||||
Plugin-dingtalksyn_Config_appSecret=\u5E94\u7528\u7CFB\u7EDF\u7684appSecret |
||||
Plugin-dingtalksyn_Config_appSecret_Description=\u5E94\u7528\u7CFB\u7EDF\u7684appSecret |
||||
Plugin-dingtalksyn_Config_corpId=Corp Id |
||||
Plugin-dingtalksyn_Config_corpId_Description=Corp Id |
||||
Plugin-dingtalksyn_Config_rootDepId=\u6839\u90E8\u95E8ID |
||||
Plugin-dingtalksyn_Config_rootDepId_Description=\u6839\u90E8\u95E8ID |
||||
Plugin-dingtalksyn_Config_Token=\u7B7E\u540DToken |
||||
Plugin-dingtalksyn_Config_Token_Description=\u7B7E\u540DToken |
||||
Plugin-dingtalksyn_Config_AesKey=\u52A0\u5BC6aes_key |
||||
Plugin-dingtalksyn_Config_AesKey_Description=\u52A0\u5BC6aes_key |
||||
Plugin-dingtalksyn_Config_SsoEnable=\u5355\u70B9\u529F\u80FD\u5F00\u5173 |
||||
Plugin-dingtalksyn_Config_SsoEnable_Description=\u5355\u70B9\u529F\u80FD\u5F00\u5173 |
||||
Plugin-dingtalksyn_Error_500=error |
||||
Plugin-dingtalksyn_Error_501=DingTalkSyn\u63D2\u4EF6\u8BB8\u53EF\u5931\u6548! |
||||
## \u524D\u7AEFjs |
||||
Plugin-dingtalksyn_DingTalk_Manager=\u9489\u9489\u540C\u6B65 |
||||
|
||||
Dec-Module-DingTalkSyn_Manager=\u9489\u9489\u7BA1\u7406 |
||||
Dec-DingTalkSyn_Basic=\u57FA\u672C\u4FE1\u606F |
||||
Dec-Schedule-Notification_DingTalkSyn=\u63A8\u9001\u9489\u9489\u6D88\u606F |
||||
Dec-Schedule-Notification_DingTalkSyn_CorpID=\u5E94\u7528AgentID\uFF1A |
||||
Dec-Schedule-Notification_DingTalkSyn_Users=\u9489\u9489\u7528\u6237\uFF1A |
||||
Dec-Schedule-Notification_DingTalkSyn_DepID=\u90E8\u95E8ID\uFF1A |
||||
Dec-Schedule-Notification_DingTalkSyn_Content=\u6D88\u606F\u5185\u5BB9\uFF1A |
||||
Dec-Schedule-Notification_DingTalkSyn_WithLink=\u5B9A\u65F6\u7ED3\u679C\u8BBF\u95EE\u94FE\u63A5 |
||||
Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null=\u8BF7\u8BBE\u7F6E\u63A8\u9001\u7684\u9489\u9489\u5E94\u7528 |
||||
Dec-DingTalkSyn_Recive_Data_URL=\u63A5\u6536\u6570\u636EURL |
||||
Dec-DingTalkSyn_Corp_ID=\u9489\u9489\u4F01\u4E1A\u53F7ID |
||||
Dec-DingTalkSyn_Secret=\u7BA1\u7406\u7EC4\u51ED\u8BC1\u5BC6\u94A5 |
||||
Dec-DingTalkSyn_Member_Management=\u9489\u9489\u6210\u5458\u7BA1\u7406 |
||||
Dec-DingTalkSyn_User-Same-With-FS=\u9489\u9489\u5DE5\u53F7\u5339\u914D |
||||
Dec-DingTalkSyn_Mobile-Same-With-FS=\u624B\u673A\u53F7\u5339\u914D |
||||
Dec-DingTalkSyn_Manual-Matching-FS=\u624B\u52A8\u5339\u914D |
||||
Dec-DingTalkSyn_Custom-Matching-FS=\u81EA\u5B9A\u4E49\u5339\u914D |
||||
Dec-DingTalkSyn_UserID=\u9489\u9489\u6210\u5458ID |
||||
Dec-DingTalkSyn_DecUserName=\u7528\u6237\u540D |
||||
Dec-DingTalkSyn_Name=\u59D3\u540D |
||||
Dec-DingTalkSyn_Department=\u9489\u9489\u90E8\u95E8 |
||||
Dec-DingTalkSyn_UrlHint=\u670D\u52A1\u5668\u4FDD\u5B58\u7684Url\uFF1A |
||||
Dec-DingTalkSyn_User_Job_Name=\u9489\u9489\u5DE5\u53F7 |
||||
Dec-DingTalkSyn_Token_Path=\u8BBE\u7F6EToken\u83B7\u53D6\u8DEF\u5F84 |
||||
Dec-DingTalkSyn_Refresh_User=\u66F4\u65B0\u901A\u8BAF\u5F55 |
||||
Dec-DingTalkSyn_Mobile=\u9489\u9489\u6210\u5458\u624B\u673A\u53F7 |
||||
Dec-DingTalkSyn_Matching_Way=\u7528\u6237\u5339\u914D\u65B9\u5F0F |
||||
Dec-DingTalkSyn_Hint=\u63D0\u793A |
||||
Dec-DingTalkSyn_Loading=\u6B63\u5728\u52A0\u8F7D\u7528\u6237... |
||||
Dec-DingTalkSyn_Mobile_Not_Supported=\u5F53\u524DHTML5\u62A5\u8868\u4E0D\u652F\u6301\u6839\u636E\u624B\u673A\u53F7\u5339\u914D\uFF0C\u8BF7\u5347\u7EA7HTML5\u63D2\u4EF6 |
||||
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-Terminal=\u9489\u9489\u901A\u77E5 |
||||
Dec-DingTalkSyn_Addressee_Chat_Group=\u9489\u9489\u7FA4 |
||||
Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip=\u5982\u679C\u6839\u636E\u9ED8\u8BA4\u7528\u6237\u7EC4\u5185\u7684\u7528\u6237\u5355\u72EC\u751F\u6210\u7ED3\u679C\uFF0C\u5219\u65E0\u6CD5\u901A\u77E5\u5230\u9489\u9489\u7FA4 |
||||
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-AgentId=\u5E94\u7528ID |
||||
Dec-DingTalkSyn_Expired_Error=\u9519\u8BEF\u4EE3\u7801:11100016 \u60A8\u4F7F\u7528\u4E86\u672A\u6CE8\u518C\u7684\u529F\u80FD\u2014\u2014\u9489\u9489\u96C6\u6210 |
||||
Dec-DingTalkSyn_Expired_Solution=\u9489\u9489\u529F\u80FD\u672A\u6CE8\u518C\uFF0C\u5982\u9700\u4F7F\u7528\u8BF7\u8054\u7CFB\u9500\u552E |
||||
Dec-DingTalkSyn_Agent-Management=\u5E94\u7528\u7BA1\u7406 |
||||
Dec-DingTalkSyn_Member-Management=\u6210\u5458\u7BA1\u7406 |
||||
Dec-DingTalkSyn_Agent-Config=\u5E94\u7528\u5FEB\u6377\u914D\u7F6E |
||||
Dec-DingTalkSyn_Agent-Name=\u9489\u9489\u5E94\u7528\u540D\u79F0 |
||||
Dec-DingTalkSyn_Agent-Id=\u9489\u9489\u5E94\u7528ID |
||||
Dec-DingTalkSyn_Organizational-Structure=\u7EC4\u7EC7\u67B6\u6784 |
||||
Dec-DingTalkSyn_Tag=\u6807\u7B7E |
||||
Dec-DingTalkSyn_Server=\u670D\u52A1\u5668 |
||||
Dec-DingTalkSyn_Save=\u4FDD\u5B58 |
||||
Dec-DingTalkSyn_Start_With_Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934 |
||||
Dec-DingTalkSyn_Server_Url=\u670D\u52A1\u5668\u5730\u5740 |
||||
Dec-DingTalkSyn_Server_Tip=1\u3001\u8BE5\u5730\u5740\u5C06\u7528\u4E8E\u5FEB\u6377\u914D\u7F6E\u4E2D\u751F\u6210\u5E73\u53F0\u5355\u70B9\u94FE\u63A5\u3001\u6A21\u677F\u5355\u70B9\u94FE\u63A5\uFF0C\u4EE5\u53CA\u63A8\u9001\u7684\u7ED3\u679C\u94FE\u63A5\uFF1B\n2\u3001\u8BE5\u5730\u5740\u9700\u8981\u5916\u7F51\u53EF\u8BBF\u95EE\uFF0C\u5730\u5740\u683C\u5F0F\u4E3Ahttp://\u57DF\u540D:\u7AEF\u53E3/decision\u6216https://\u57DF\u540D:\u7AEF\u53E3/decision\uFF0C\u914D\u7F6E\u540E\u8BF7\u4FDD\u5B58 |
||||
Dec-DingTalkSyn_Enterprise-DingDing=\u4F01\u4E1A\u9489\u9489 |
||||
Dec-DingTalkSyn_New-Agent=\u65B0\u5EFA\u9489\u9489\u5E94\u7528 |
||||
Dec-DingTalkSyn_Non-Adapted-Agent=\u63D0\u793A\uFF1A\u8BF7\u786E\u8BA4\u5E94\u7528id\u662F\u5426\u6B63\u786E |
||||
Dec-DingTalkSyn_Modify-Agent=\u4FEE\u6539\u9489\u9489\u5E94\u7528 |
||||
Dec-DingTalkSyn_DeleteAgent-Confirm-Popup=\u786E\u5B9A\u5220\u9664\u6B64\u4F01\u4E1A\u9489\u9489\u5E94\u7528 |
||||
Dec-DingTalkSyn_Confirm=\u786E\u5B9A |
||||
Dec-DingTalkSyn_Cancel=\u53D6\u6D88 |
||||
Dec-DingTalkSyn_Save-Agent-Fail=\u5B58\u50A8\u5E94\u7528\u4FE1\u606F\u5931\u8D25 |
||||
Dec-DingTalkSyn_Unknown-Agent=\u7F51\u7EDC\u5F02\u5E38\u6216\u8005\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684CorpId\u548CSecret\u662F\u5426\u6B63\u786E |
||||
Dec-DingTalkSyn_Agent-Name-Exist=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
Dec-DingTalkSyn_Match-Way=\u5339\u914D\u65B9\u5F0F |
||||
Dec-DingTalkSyn_Match-Setting=\u5339\u914D\u8BBE\u7F6E |
||||
Dec-DingTalkSyn_DataSet=\u6570\u636E\u96C6 |
||||
Dec-DingTalkSyn_Address-Book=\u9489\u9489\u901A\u8BAF\u5F55 |
||||
Dec-DingTalkSyn_Member-Update=\u7ACB\u5373\u66F4\u65B0 |
||||
Dec-DingTalkSyn_Set-Update=\u8BBE\u7F6E\u81EA\u52A8\u66F4\u65B0 |
||||
Dec-DingTalkSyn_Not-Null=\u4E0D\u5141\u8BB8\u4E3A\u7A7A |
||||
Dec-DingTalkSyn_Start-Update=\u542F\u7528\u81EA\u52A8\u66F4\u65B0 |
||||
Dec-DingTalkSyn_Per=\u6BCF |
||||
Dec-DingTalkSyn_Day=\u5929 |
||||
Dec-DingTalkSyn_Week=\u5468 |
||||
Dec-DingTalkSyn_Monday=\u5468\u4E00 |
||||
Dec-DingTalkSyn_Tuesday=\u5468\u4E8C |
||||
Dec-DingTalkSyn_Wednesday=\u5468\u4E09 |
||||
Dec-DingTalkSyn_Thursday=\u5468\u56DB |
||||
Dec-DingTalkSyn_Friday=\u5468\u4E94 |
||||
Dec-DingTalkSyn_Saturday=\u5468\u516D |
||||
Dec-DingTalkSyn_Sunday=\u5468\u65E5 |
||||
Dec-DingTalkSyn_Hour=\u65F6 |
||||
Dec-DingTalkSyn_Minute=\u5206 |
||||
Dec-DingTalkSyn_Update-Once=\u5B9A\u65F6\u540C\u6B65\u4E00\u6B21 |
||||
Dec-DingTalkSyn_Illegal=\u4E0D\u5408\u6CD5 |
||||
Dec-DingTalkSyn_Proxy=\u9489\u9489\u4EE3\u7406\u8DF3\u8F6C |
||||
Dec-DingTalkSyn_Proxy_Address=\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740 |
||||
Dec-DingTalkSyn_Proxy_Address_Tip=1\u3001\u8BE5\u5730\u5740\u586B\u5199\u5E06\u8F6F\u6240\u5728\u5E94\u7528\u670D\u52A1\u5668\u8BBF\u95EE\u4EE3\u7406\u670D\u52A1\u5668\u7684\u5730\u5740\uFF0C\u5373\u6B63\u5411\u4EE3\u7406\u5730\u5740\uFF0C\u4ECE\u800C\u4F7F\u5E06\u8F6F\u5E94\u7528\u670D\u52A1\u5668\u80FD\u591F\u901A\u8FC7\u4EE3\u7406\u670D\u52A1\u5668\u8BBF\u95EE\u5230\u5916\u7F51\u9489\u9489\u670D\u52A1\u5668\uFF1B\n2\u3001\u5730\u5740\u683C\u5F0F\u4E3Ahttp://\u57DF\u540D:\u7AEF\u53E3 |
||||
Dec-DingTalkSyn_Test-Proxy-Address=\u6D4B\u8BD5\u8FDE\u63A5 |
||||
Dec-DingTalkSyn_Start-With-Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934 |
||||
Dec-DingTalkSyn_Test-Connection=\u6D4B\u8BD5\u8FDE\u63A5\u4E2D... |
||||
Dec-DingTalkSyn_Connection-Success=\u8FDE\u63A5\u6210\u529F |
||||
Dec-DingTalkSyn_Connection-Fail=\u8FDE\u63A5\u5931\u8D25 |
||||
Dec-DingTalkSyn_Unknown-Agent-Id=\u5E94\u7528ID\u4E0D\u6B63\u786E |
||||
Dec-DingTalkSyn_Delete-Agent-Fail=\u5220\u9664\u5E94\u7528\u5931\u8D25 |
||||
Dec-DingTalkSyn_Agent-Id-Exist=\u5E94\u7528ID\u5DF2\u5B58\u5728 |
||||
Dec-DingTalkSyn_Save-ReportServer-Url-Fail=\u4FDD\u5B58\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||
Dec-DingTalkSyn_Save-Timing-Task-Fail=\u4FDD\u5B58\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25 |
||||
Dec-DingTalkSyn_Error-AppKey-And-AppSecret=\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684AppKey\u548CAppSecret\u662F\u5426\u6B63\u786E |
||||
Dec-DingTalkSyn_Error-AppKey-And-AgentId=\u8BF7\u786E\u8BA4\u5F53\u524D\u5E94\u7528ID\u548CAppKey\u662F\u5426\u5BF9\u5E94 |
||||
Dec-DingTalkSyn_Duplicate-Agent-Name=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
Dec-DingTalkSyn_Save-Match-Method-Fail=\u5B58\u50A8\u6210\u5458\u7BA1\u7406\u914D\u7F6E\u4FE1\u606F\u5931\u8D25 |
||||
Dec-DingTalkSyn_Duplicate-Agent-Id=\u5E94\u7528ID\u5DF2\u5B58\u5728 |
||||
Dec-DingTalkSyn_Save-Proxy-Server-Fail=\u4FDD\u5B58\u4EE3\u7406\u670D\u52A1\u5668\u5931\u8D25 |
||||
Dec-DingTalkSyn_Connect-Proxy-Server-Fail=\u9489\u9489\u4EE3\u7406\u670D\u52A1\u5668\u6D4B\u8BD5\u8FDE\u63A5\u5931\u8D25 |
||||
Dec-DingTalkSyn_NetWork-Anomaly=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u914D\u7F6E |
||||
Dec-DingTalkSyn_Create-DingTalkSyn-Url=\u751F\u6210\u9489\u9489\u94FE\u63A5 |
||||
Dec-DingTalkSyn_Platform-Page=\u94FE\u63A5\u9875\u9762 |
||||
Dec-DingTalkSyn_Platform-Report=\u5355\u4E2A\u6A21\u677F |
||||
Dec-DingTalkSyn_Platform=\u51B3\u7B56\u5E73\u53F0 |
||||
Dec-DingTalkSyn_Parameter_Setting=\u53C2\u6570\u8BBE\u7F6E |
||||
Dec-DingTalkSyn_Create-Url=\u751F\u6210\u94FE\u63A5 |
||||
Dec-DingTalkSyn_DingTalkSyn_Url=\u9489\u9489\u94FE\u63A5 |
||||
Dec-DingTalkSyn_Copy-Url=\u590D\u5236 |
||||
Dec-DingTalkSyn_Copy-Success=\u590D\u5236\u6210\u529F |
||||
Dec-DingTalkSyn_Input-Hint=\u8BF7\u8F93\u5165 |
||||
Dec-DingTalkSyn_Save-User-Relation-Fail=\u624B\u52A8\u5339\u914D\u5931\u8D25 |
||||
BI-Basic_Search=\u641C\u7D22 |
||||
Dec-DingTalkSyn_Match-Way-Not-Null=\u5339\u914D\u8BBE\u7F6E\u4E0D\u80FD\u4E3A\u7A7A |
||||
Dec-DingTalkSyn_Not-Select=\u4E0D\u9009 |
||||
Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail=\u8BF7\u914D\u7F6E\u670D\u52A1\u5668\u5730\u5740 |
||||
Dec-DingTalkSyn_Create-Agent-Tip=\u82E5\u65E0AppKey\uFF0C\u8BF7\u5728Appkey\u548CAppSecret\u4E2D\u5206\u522B\u586B\u5199CorpId\u548CCorpSecret |
||||
Dec-DingTalkSyn_IP-Config-Not-Available=\u8BBF\u95EEIP\u4E0D\u5728\u767D\u540D\u5355\u4E4B\u4E2D |
||||
Dec-DingTalkSyn_NetWork-Invalid=\u7F51\u7EDC\u5F02\u5E38 |
||||
Dec-DingTalkSyn_Not_Trusted_Domain_Error=\u9519\u8BEF\u4EE3\u7801\uFF1A11205040\uFF0CredirectUrl\u57DF\u540D\u4E0E\u540E\u53F0\u914D\u7F6E\u4E0D\u4E00\u81F4 |
||||
Dec-DingTalkSyn_Not_Trusted_Domain_Exception=\u68C0\u67E5\u57DF\u540D\u4E0E\u670D\u52A1\u5668\u5730\u5740\u662F\u5426\u4E00\u81F4 |
||||
Dec-DingTalkSyn_Debugger-Set-Level=\u8BBE\u7F6E\u65E5\u5FD7\u7EA7\u522B |
||||
Dec-DingTalkSyn_Debugger-Level=\u65E5\u5FD7\u7EA7\u522B |
||||
Dec-DingTalkSyn_Debugger-Parameter-List=\u53C2\u6570\u5217\u8868 |
||||
Dec-DingTalkSyn_Debugger-Content=\u8C03\u8BD5\u5185\u5BB9 |
||||
Dec-DingTalkSyn_Debugger-Type-Get-Access-Token=\u83B7\u53D6access_token |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Ip=\u68C0\u67E5ip\u767D\u540D\u5355 |
||||
Dec-DingTalkSyn_Debugger-Start-Check=\u5F00\u59CB\u68C0\u6D4B |
||||
Dec-DingTalkSyn_Debugger-Show-Result=\u68C0\u6D4B\u7ED3\u679C |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time=\u68C0\u6D4B\u8BF7\u6C42\u8017\u65F6 |
||||
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result=\u68C0\u6D4B\u7ED3\u679C |
||||
Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid=\u63D0\u793A\uFF1A\u670D\u52A1\u5668\u7CFB\u7EDF\u82E5\u4E3Awindows\u5219\u9700\u8981\u5B89\u88C5curl\u5DE5\u5177\u624D\u80FD\u652F\u6301\u68C0\u6D4B |
||||
Dec-DingTalkSyn_Debugger-DownLoad_Log=\u4E0B\u8F7D\u65E5\u5FD7 |
||||
Dec-DingTalkSyn_Click-To-Download=\u70B9\u51FB\u4E0B\u8F7D |
||||
Dec-DingTalkSyn_Download-Fail=\u4E0B\u8F7D\u5931\u8D25 |
||||
Dec-DingTalkSyn_Not_Null=\u4E0D\u53EF\u4E3A\u7A7A |
||||
Dec-DingTalkSyn_ErrorDetail=\u9519\u8BEF\u4FE1\u606F |
||||
Dec-DingTalkSyn_Debugger-Check-Ip-Result=\u68C0\u67E5\u7ED3\u679C |
||||
Dec-DingTalkSyn_Debugger-Get-Token=access_token |
||||
Dec-DingTalkSyn_Agent_Deleted_Tip=\u65E0\u6CD5\u83B7\u53D6\u8BE5\u9489\u9489\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E\u9879\u662F\u5426\u6709\u8BEF |
||||
Dec-DingTalkSyn_Parse_Parameters=\u89E3\u6790\u53C2\u6570\u503C |
||||
Dec-DingTalkSyn_Parse_Parameters_Tip=\u5FAE\u4FE1\uFF0F\u9489\u9489\u96C6\u6210\u94FE\u63A5\u5FC5\u987B\u52FE\u9009\u89E3\u6790\u53C2\u6570\u503C\uFF0C\u5426\u5219\u5C06\u5BFC\u81F4\u53C2\u6570\u4E22\u5931\uFF1B\u6A21\u677F\u6D88\u606F\u63A8\u9001\u7684\u6D88\u606F\u94FE\u63A5\u53EF\u9009\u62E9\u4E0D\u89E3\u6790\u53C2\u6570\u503C\uFF0C\u4ECE\u800C\u5B9E\u73B0\u63A8\u9001\u65F6\u7684\u5B9E\u65F6\u516C\u5F0F\u8BA1\u7B97\u3002 |
||||
Dec-DingTalkSyn_Enterprise_Agent=\u9489\u9489\u5E94\u7528 |
||||
Dec-DingTalkSyn_Chatgroup_Name=\u9489\u9489\u7FA4\u540D\u79F0 |
||||
Dec-DingTalkSyn_Chat_Group=\u9489\u9489\u7FA4 |
||||
Dec-DingTalkSyn_New_Chat_Group=\u65B0\u5EFA\u9489\u9489\u7FA4 |
||||
Dec-DingTalkSyn_Delete_ChatGroup_Confirm=\u786E\u8BA4\u5220\u9664\u9489\u9489\u7FA4\uFF1F |
||||
Dec-DingTalkSyn_Chat_Group_Member_Tip=\u9664\u7FA4\u4E3B\u5916\uFF0C\u4E0D\u53EF\u5C11\u4E8E2\u4EBA |
||||
Dec-DingTalkSyn_Chat_Group_Leader=\u7FA4\u4E3B |
||||
Dec-DingTalkSyn_Chat_Group_Member=\u7FA4\u6210\u5458 |
||||
Dec-DingTalkSyn_New_Chat_Group_Tip1=\u7FA4\u6210\u5458\u8D85\u8FC730\u4EBA\u65F6\uFF0C\u5EFA\u8BAE\u5728\u9489\u9489\u5BA2\u6237\u7AEF\u6DFB\u52A0\u66F4\u591A\u7FA4\u6210\u5458\u3002 |
||||
Dec-DingTalkSyn_New_Chat_Group_Tip2=\u5BA2\u6237\u7AEF\u6DFB\u52A0\u7684\u6210\u5458\u82E5\u4E0D\u5728\u5E94\u7528\u53EF\u89C1\u8303\u56F4\u5185\uFF0C\u5C06\u65E0\u6CD5\u5355\u70B9\u767B\u5F55\u67E5\u770B\u6A21\u677F\u3002 |
||||
Dec-DingTalkSyn_New_Chat_Group_Message=\u60A8\u5DF2\u52A0\u5165\u7FA4\u804A |
||||
Dec-DingTalkSyn_Common_Error_Tip=\u53D1\u751F\u9519\u8BEF\uFF0C\u9519\u8BEF\u7801\u4E3A\uFF1A |
||||
Dec-DingTalkSyn_Chat_Group_Name_Length_Tip=\u7FA4\u540D\u79F0\u957F\u5EA6\u965020\u4E2A\u5B57\u7B26 |
||||
Dec-DingTalkSyn_Create-Chat-Group-Fail=\u521B\u5EFA\u9489\u9489\u7FA4\u5931\u8D25 |
||||
Dec-DingTalkSyn_Output_User_Empty=\u63A8\u9001\u4EBA\u4E3A\u7A7A\uFF01 |
||||
Dec-DingTalkSyn_Message_Agent=\u5E94\u7528\u6D88\u606F |
||||
Dec-DingTalkSyn_Message_Group=\u7FA4\u6D88\u606F |
||||
Dec-DingTalkSyn_DingTalkSyn=\u9489\u9489 |
||||
Dec-DingTalkSyn_Output_User_Fail_Partly_Header=\u4E2A\u7528\u6237\u63A8\u9001\u5931\u8D25\uFF1A |
||||
Dec-DingTalkSyn_Output_User_Fail_Partly_Tip=...\uFF0C\u53EF\u5728\u65E5\u5FD7\u4E2D\u67E5\u770B\u5B8C\u6574\u7528\u6237\u540D\u5355 |
||||
Dec-DingTalkSyn_Output_Group_Fail_Partly_Header=\u4E2A\u7FA4\u63A8\u9001\u5931\u8D25\uFF1A |
||||
Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip=...\uFF0C\u53EF\u5728\u65E5\u5FD7\u4E2D\u67E5\u770B\u5B8C\u6574\u7FA4\u540D\u5355 |
||||
Dec-DingTalkSyn_User_Match_Dec_User_Fail=\u9489\u9489\u7528\u6237\u5339\u914D\u5E73\u53F0\u7528\u6237\u5931\u8D25\uFF01 |
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
||||
<title>DingTalk</title> |
||||
<script src="${openJs}"></script> |
||||
</head> |
||||
<body> |
||||
<script> |
||||
dd.ready(function () { |
||||
dd.runtime.permission.requestAuthCode({ |
||||
corpId: "${corpId}", |
||||
onSuccess: function (result) { |
||||
window.open("${remoteServletURL}" + result.code); |
||||
}, |
||||
onFail: function (err) { |
||||
} |
||||
}); |
||||
}); |
||||
</script> |
||||
</body> |
||||
</html> |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue