彩票助手后端1.0
This commit is contained in:
84
src/main/java/com/xy/xyaicpzs/service/CozeAuthService.java
Normal file
84
src/main/java/com/xy/xyaicpzs/service/CozeAuthService.java
Normal file
@@ -0,0 +1,84 @@
|
||||
package com.xy.xyaicpzs.service;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Coze认证服务
|
||||
* 提供通过JWT获取访问令牌的功能
|
||||
*/
|
||||
@Service
|
||||
public class CozeAuthService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(CozeAuthService.class);
|
||||
private static final String COZE_TOKEN_URL = "https://api.coze.cn/api/permission/oauth2/token";
|
||||
private static final String GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
||||
|
||||
@Autowired
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
/**
|
||||
* 通过JWT获取访问令牌
|
||||
*
|
||||
* @param jwt JWT令牌
|
||||
* @param durationSeconds 令牌有效期(秒)
|
||||
* @return 包含访问令牌和过期时间的Map
|
||||
*/
|
||||
public Map<String, Object> getAccessToken(String jwt, Integer durationSeconds) {
|
||||
try {
|
||||
// 设置请求头
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
headers.set("Authorization", "Bearer " + jwt);
|
||||
|
||||
// 设置请求体
|
||||
Map<String, Object> requestBody = new HashMap<>();
|
||||
requestBody.put("grant_type", GRANT_TYPE);
|
||||
if (durationSeconds != null && durationSeconds > 0) {
|
||||
requestBody.put("duration_seconds", durationSeconds);
|
||||
}
|
||||
|
||||
// 创建请求实体
|
||||
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
|
||||
|
||||
// 发送请求
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(COZE_TOKEN_URL, requestEntity, String.class);
|
||||
|
||||
// 解析响应
|
||||
if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) {
|
||||
JsonNode jsonNode = objectMapper.readTree(response.getBody());
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("access_token", jsonNode.get("access_token").asText());
|
||||
result.put("expires_in", jsonNode.get("expires_in").asLong());
|
||||
|
||||
return result;
|
||||
} else {
|
||||
throw new RuntimeException("获取访问令牌失败,HTTP状态码:" + response.getStatusCodeValue());
|
||||
}
|
||||
|
||||
} catch (JsonProcessingException e) {
|
||||
logger.error("解析响应JSON失败", e);
|
||||
throw new RuntimeException("解析响应JSON失败: " + e.getMessage());
|
||||
} catch (Exception e) {
|
||||
logger.error("获取访问令牌失败", e);
|
||||
throw new RuntimeException("获取访问令牌失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user