package com.gs.xky.service;
|
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.gs.xky.config.DataAcquisitionConfiguration;
|
import lombok.Data;
|
import lombok.RequiredArgsConstructor;
|
import okhttp3.OkHttpClient;
|
import okhttp3.Request;
|
import okhttp3.Response;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
|
import java.io.IOException;
|
import java.util.concurrent.TimeUnit;
|
|
@Service
|
@RequiredArgsConstructor
|
public class WorkWXService {
|
|
private static final Logger log = LoggerFactory.getLogger(WorkWXService.class);
|
|
private final OkHttpClient client = new OkHttpClient.Builder()
|
.connectTimeout(90, TimeUnit.SECONDS)
|
.readTimeout(90, TimeUnit.SECONDS)
|
.build();
|
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
|
public String getAccessToken() throws IOException {
|
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",
|
DataAcquisitionConfiguration.CORPID,
|
DataAcquisitionConfiguration.CORPSECRET);
|
|
Request request = new Request.Builder()
|
.url(url)
|
.get()
|
.build();
|
|
try (Response response = client.newCall(request).execute()) {
|
if (!response.isSuccessful()) {
|
log.error("获取企业微信access_token失败,HTTP状态码: {}", response.code());
|
throw new IOException("获取access_token失败: " + response.message());
|
}
|
|
String responseBody = response.body().string();
|
WorkWXTokenResponse tokenResponse = objectMapper.readValue(responseBody, WorkWXTokenResponse.class);
|
|
if (tokenResponse.getErrcode() != 0) {
|
log.error("获取企业微信access_token失败,错误码: {}, 错误信息: {}",
|
tokenResponse.getErrcode(), tokenResponse.getErrmsg());
|
throw new IOException("获取access_token失败: " + tokenResponse.getErrmsg());
|
}
|
|
log.info("成功获取企业微信access_token,有效期: {}秒", tokenResponse.getExpiresIn());
|
return tokenResponse.getAccessToken();
|
}
|
}
|
|
@Data
|
private static class WorkWXTokenResponse {
|
private Integer errcode;
|
private String errmsg;
|
@JsonProperty("access_token")
|
private String accessToken;
|
@JsonProperty("expires_in")
|
private Integer expiresIn;
|
}
|
}
|