1
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
package com.ruoyi.jarvis.config;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
/**
|
||||
* 腾讯文档开放平台配置
|
||||
@@ -9,9 +14,12 @@ import org.springframework.context.annotation.Configuration;
|
||||
* @author system
|
||||
*/
|
||||
@Configuration
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "tencent.doc")
|
||||
public class TencentDocConfig {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TencentDocConfig.class);
|
||||
|
||||
/** 应用ID */
|
||||
private String appId;
|
||||
|
||||
@@ -32,6 +40,27 @@ public class TencentDocConfig {
|
||||
|
||||
/** 刷新Token地址 */
|
||||
private String refreshTokenUrl = "https://docs.qq.com/oauth/v2/token";
|
||||
|
||||
/**
|
||||
* 配置初始化后验证
|
||||
*/
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
log.info("腾讯文档配置加载 - appId: {}, redirectUri: {}, apiBaseUrl: {}",
|
||||
appId != null && appId.length() > 10 ? appId.substring(0, 10) + "..." : (appId != null ? appId : "null"),
|
||||
redirectUri != null ? redirectUri : "null",
|
||||
apiBaseUrl);
|
||||
|
||||
if (appId == null || appId.trim().isEmpty()) {
|
||||
log.warn("腾讯文档应用ID未配置!请检查application-dev.yml中的tencent.doc.app-id");
|
||||
}
|
||||
if (appSecret == null || appSecret.trim().isEmpty()) {
|
||||
log.warn("腾讯文档应用密钥未配置!请检查application-dev.yml中的tencent.doc.app-secret");
|
||||
}
|
||||
if (redirectUri == null || redirectUri.trim().isEmpty()) {
|
||||
log.warn("腾讯文档回调地址未配置!请检查application-dev.yml中的tencent.doc.redirect-uri");
|
||||
}
|
||||
}
|
||||
|
||||
public String getAppId() {
|
||||
return appId;
|
||||
|
||||
@@ -29,19 +29,42 @@ public class TencentDocServiceImpl implements ITencentDocService {
|
||||
|
||||
@Override
|
||||
public String getAuthUrl() {
|
||||
if (tencentDocConfig == null) {
|
||||
throw new RuntimeException("腾讯文档配置未加载,请检查TencentDocConfig是否正确注入");
|
||||
}
|
||||
|
||||
String appId = tencentDocConfig.getAppId();
|
||||
String redirectUri = tencentDocConfig.getRedirectUri();
|
||||
String oauthUrl = tencentDocConfig.getOauthUrl();
|
||||
|
||||
log.debug("获取授权URL - appId: {}, redirectUri: {}, oauthUrl: {}", appId, redirectUri, oauthUrl);
|
||||
|
||||
// 验证配置参数
|
||||
if (appId == null || appId.trim().isEmpty()) {
|
||||
throw new RuntimeException("腾讯文档应用ID未配置,请检查application-dev.yml中的tencent.doc.app-id配置");
|
||||
}
|
||||
if (redirectUri == null || redirectUri.trim().isEmpty()) {
|
||||
throw new RuntimeException("腾讯文档回调地址未配置,请检查application-dev.yml中的tencent.doc.redirect-uri配置");
|
||||
}
|
||||
if (oauthUrl == null || oauthUrl.trim().isEmpty()) {
|
||||
oauthUrl = "https://docs.qq.com/oauth/v2/authorize"; // 使用默认值
|
||||
log.warn("OAuth URL未配置,使用默认值: {}", oauthUrl);
|
||||
}
|
||||
|
||||
// 构建授权URL(根据腾讯文档官方文档:https://docs.qq.com/open/document/app/oauth2/authorize.html)
|
||||
StringBuilder authUrl = new StringBuilder();
|
||||
authUrl.append(oauthUrl);
|
||||
authUrl.append("?client_id=").append(appId);
|
||||
try {
|
||||
authUrl.append("&redirect_uri=").append(java.net.URLEncoder.encode(redirectUri, "UTF-8"));
|
||||
// 确保redirectUri不为null后再编码
|
||||
String encodedRedirectUri = java.net.URLEncoder.encode(redirectUri, "UTF-8");
|
||||
authUrl.append("&redirect_uri=").append(encodedRedirectUri);
|
||||
} catch (java.io.UnsupportedEncodingException e) {
|
||||
log.error("URL编码失败", e);
|
||||
authUrl.append("&redirect_uri=").append(redirectUri);
|
||||
} catch (Exception e) {
|
||||
log.error("构建授权URL失败", e);
|
||||
throw new RuntimeException("构建授权URL失败: " + e.getMessage(), e);
|
||||
}
|
||||
authUrl.append("&response_type=code");
|
||||
authUrl.append("&scope=all"); // 根据官方文档,scope固定为all
|
||||
@@ -50,7 +73,9 @@ public class TencentDocServiceImpl implements ITencentDocService {
|
||||
String state = java.util.UUID.randomUUID().toString();
|
||||
authUrl.append("&state=").append(state);
|
||||
|
||||
return authUrl.toString();
|
||||
String result = authUrl.toString();
|
||||
log.info("生成授权URL: {}", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user