diff --git a/src/main/java/com/kimgo/wepush/request/SendQyWeChatMsgRequest.java b/src/main/java/com/kimgo/wepush/request/SendQyWeChatMsgRequest.java new file mode 100644 index 0000000..9b07faf --- /dev/null +++ b/src/main/java/com/kimgo/wepush/request/SendQyWeChatMsgRequest.java @@ -0,0 +1,78 @@ +package com.kimgo.wepush.request; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kimgo.wepush.common.JsonConverter; +import com.kimgo.wepush.response.QyWeChatSendMessageApiResponse; +import com.kimgo.wepush.service.TokenService; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.RequestBody; +import okhttp3.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +public class SendQyWeChatMsgRequest { + private final Logger logger = LoggerFactory.getLogger(SendQyWeChatMsgRequest.class); + private final OkHttpClient client = new OkHttpClient(); + private final TokenService tokenService; + private final JsonConverter jsonConverter = new JsonConverter<>(); + + public SendQyWeChatMsgRequest(TokenService tokenService) { + this.tokenService = tokenService; + } + + public QyWeChatSendMessageApiResponse okhttpRequest(String baseurl, String accessToken, T object) { + int retryCount = 0; + final int maxRetries = 2; + + while (retryCount <= maxRetries) { + String url = baseurl + "?access_token=" + accessToken; + // 使用Jackson进行序列化 + String jsonBody; + try { + jsonBody = jsonConverter.serialize(object); + } catch (JsonProcessingException e) { + return new QyWeChatSendMessageApiResponse(-1, "json serialization exception"); + } + // 构建请求体 + MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); + RequestBody body = RequestBody.create(jsonBody, mediaType); + + okhttp3.Request request = new okhttp3.Request.Builder().url(url).post(body).build(); + try (Response response = client.newCall(request).execute()) { + String responseBody = null; + if (response.body() != null) { + responseBody = response.body().string(); + } + logger.info("request sendMessage api ResponseBody: {}", responseBody); + + ObjectMapper objectMapper1 = new ObjectMapper(); + QyWeChatSendMessageApiResponse apiResponse = objectMapper1.readValue(responseBody, QyWeChatSendMessageApiResponse.class); + + if (apiResponse.getErrcode() == 0) { + logger.debug("Request qyWeChat Success."); + return apiResponse; + } else if (apiResponse.getErrcode() == 42001 || apiResponse.getErrcode() == 40014) { + logger.info("Access token expired. Refreshing token..."); + // 刷新accessToken + tokenService.setAccessToken(); + accessToken = tokenService.getAccessToken(); + retryCount++; + } else { + // 处理成功或其他错误情况 + return apiResponse; + } + } catch (IOException e) { + logger.error("OkHttp request error", e); + if (retryCount >= maxRetries) { + return new QyWeChatSendMessageApiResponse(-1,"the maximum number of attempts exceeded"); + } + retryCount++; + } + } + return new QyWeChatSendMessageApiResponse(-1,"request error."); + } +}