Update CallService.java

pull/1/head
wangsiyuan 2024-04-19 16:19:15 +08:00
parent 03e6decd71
commit f89bbbc551
1 changed files with 57 additions and 11 deletions

View File

@ -30,37 +30,67 @@ public class CallService {
this.tokenService = tokenService;
}
public ServerResponseEntity getPhoneNumber(String accessToken, CallInfo callInfo){
/**
* accessToken
* accessToken
*
*
* @param accessToken accessToken
* @param callInfo
* @return ID
*/
public ServerResponseEntity getPhoneNumber(String accessToken, CallInfo callInfo) {
// 通过token服务获取正确的accessToken
String correctAccessToken = tokenService.getApiAccessToken();
logger.info("accessToken: {} correctAccessToken: {}",accessToken,correctAccessToken);
if (!correctAccessToken.equals(accessToken)){
logger.info("accessToken: {} correctAccessToken: {}", accessToken, correctAccessToken);
// 验证提供的accessToken是否有效
if (!correctAccessToken.equals(accessToken)) {
return ServerResponseEntity.fail("Invalid accessToken");
}
// 从呼叫信息中获取电话号码和呼叫时间
String phoneNumber = callInfo.getPhoneNumber();
String callTime = callInfo.getCallTime();
// 获取企业微信的访问令牌
String qyAccessToken = tokenService.getAccessToken();
QyWeChatSendMessageApiResponse qyWeChatSendMessageApiResponse = requestWithOkhttp(qyAccessToken,phoneNumber,callTime);
// 使用企业微信的accessToken、电话号码和呼叫时间发送消息并获取响应
QyWeChatSendMessageApiResponse qyWeChatSendMessageApiResponse = requestWithOkhttp(qyAccessToken, phoneNumber, callTime);
// 检查发送消息的响应代码
int code = qyWeChatSendMessageApiResponse.getErrcode();
if (code == 0){
if (code == 0) {
// 如果消息发送成功,构建并返回成功的服务器响应
SendMessageResonse sendMessageResonse = new SendMessageResonse();
sendMessageResonse.setMsgid(qyWeChatSendMessageApiResponse.getMsgid());
return ServerResponseEntity.success(sendMessageResonse);
} else {
// 如果消息发送失败,返回失败的服务器响应
return ServerResponseEntity.fail("request qyWeChat error,please check server error log.");
}
}
/**
*
*
* @param phoneNumber
* @param callTime
* @return TextCardMessage
*/
public TextCardMessage setTextCardMessage(String phoneNumber, String callTime) {
TextCardMessage textCardMessage = new TextCardMessage();
// 从api设置中获取用户信息并设置到textCardMessage中
textCardMessage.setTouser(apiSettingService.getApiSetting().getTouser());
textCardMessage.setMsgtype(apiSettingService.getApiSetting().getMsgtype());
textCardMessage.setAgentid(apiSettingService.getApiSetting().getAgentid());
textCardMessage.setEnable_duplicate_check(apiSettingService.getApiSetting().getEnableDuplicateCheck());
textCardMessage.setDuplicate_check_interval(apiSettingService.getApiSetting().getDuplicateCheckInterval());
// 创建TextCard对象并设置其内容
TextCardMessage.TextCard textCard = new TextCardMessage.TextCard();
textCard.setTitle("新来电通知");
// 设置描述信息,包含来电号码和来电时间
textCard.setDescription("<div class='gray'>您有一通新来电</div><div class='highlight'>来电号码: " + phoneNumber + "</div><div class='highlight'>来电时间: " + callTime + "</div>如果您认识这个号码,请及时回电。如果不认识,请注意可能是垃圾电话或诈骗电话。");
textCard.setUrl("https://kimgo.cn");
// 将TextCard对象设置到TextCardMessage中
textCardMessage.setTextcard(textCard);
@ -69,37 +99,53 @@ public class CallService {
return textCardMessage;
}
public QyWeChatSendMessageApiResponse requestWithOkhttp(String accessToken,String phoneNumber,String callTime){
/**
* 使OkHttp
*
* @param accessToken 访访API
* @param phoneNumber
* @param callTime
* @return APInull
*/
public QyWeChatSendMessageApiResponse requestWithOkhttp(String accessToken, String phoneNumber, String callTime) {
// 构建发送文本卡片消息的URL
String url = qyWeChatURLService.getSendTextCardMessageUrl() + "?access_token=" + accessToken;
OkHttpClient client = new OkHttpClient();
TextCardMessage textCardMessage = setTextCardMessage(phoneNumber,callTime);
// 使用Jackson进行序列化
// 设置文本卡片消息内容
TextCardMessage textCardMessage = setTextCardMessage(phoneNumber, callTime);
// 将消息对象序列化为JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody;
try {
jsonBody = objectMapper.writeValueAsString(textCardMessage);
logger.info("jsonBody: {}",jsonBody);
logger.info("jsonBody: {}", jsonBody);
} catch (JsonProcessingException e) {
logger.error("JSON processing error", e);
return null;
}
// 构建请求体
// 构建HTTP请求体
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonBody);
Request request = new Request.Builder().url(url).post(body).build();
try (Response response = client.newCall(request).execute()) {
// 从响应中读取内容
String responseBody = response.body().string();
logger.info("request sendMessage api ResponseBody: {}", responseBody);
// 反序列化API响应
ObjectMapper objectMapper1 = new ObjectMapper();
QyWeChatSendMessageApiResponse apiResponse = objectMapper1.readValue(responseBody, QyWeChatSendMessageApiResponse.class);
// 处理不同的API响应结果
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...");
tokenService.setAccessToken(); // 一个方法来刷新accessToken
tokenService.setAccessToken(); // 刷新accessToken的方法
String newAccessToken = tokenService.getAccessToken();
return requestWithOkhttp(newAccessToken, phoneNumber, callTime);
} else {