|
|
@@ -5,17 +5,14 @@ import cn.hutool.http.HttpRequest;
|
|
|
import cn.hutool.http.HttpResponse;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
-
|
|
|
+import com.fs.app.enums.AdvertiserTypeEnum;
|
|
|
import com.fs.common.constant.SystemConstant;
|
|
|
import com.fs.common.exception.ThirdPartyException;
|
|
|
-import com.fs.common.utils.SnowflakeUtil;
|
|
|
-import com.fs.newAdv.domain.ApiCallLog;
|
|
|
-import com.fs.newAdv.mapper.ApiCallLogMapper;
|
|
|
+import com.fs.newAdv.service.IApiCallLogService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
@@ -29,7 +26,7 @@ import java.util.Map;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
-public class OceanEngineApiClient {
|
|
|
+public class OceanEngineApiClient implements IApiClient{
|
|
|
|
|
|
/**
|
|
|
* 巨量引擎转化回传API地址
|
|
|
@@ -37,16 +34,16 @@ public class OceanEngineApiClient {
|
|
|
private static final String CONVERSION_API_URL = "https://ad.oceanengine.com/open_api/2/conversion/";
|
|
|
|
|
|
@Autowired
|
|
|
- private ApiCallLogMapper apiCallLogMapper;
|
|
|
+ private IApiCallLogService apiCallLogService;
|
|
|
|
|
|
/**
|
|
|
* 回传转化数据到巨量引擎
|
|
|
*
|
|
|
- * @param accessToken 访问令牌
|
|
|
* @param conversionData 转化数据
|
|
|
* @return 是否成功
|
|
|
*/
|
|
|
- public boolean reportConversion(String accessToken, Map<String, Object> conversionData) {
|
|
|
+ @Override
|
|
|
+ public boolean reportConversion(Map<String, Object> conversionData) {
|
|
|
String apiUrl = CONVERSION_API_URL;
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
|
|
@@ -59,7 +56,7 @@ public class OceanEngineApiClient {
|
|
|
|
|
|
// 发送HTTP请求
|
|
|
HttpResponse response = HttpRequest.post(apiUrl)
|
|
|
- .header("Access-Token", accessToken)
|
|
|
+ .header("Access-Token", (String) conversionData.get("token"))
|
|
|
.header("Content-Type", "application/json")
|
|
|
.body(requestBody)
|
|
|
.timeout(SystemConstant.API_TIMEOUT)
|
|
|
@@ -71,33 +68,29 @@ public class OceanEngineApiClient {
|
|
|
log.info("巨量引擎API响应:状态码={},响应={}", statusCode, responseBody);
|
|
|
|
|
|
// 记录API调用日志
|
|
|
- saveApiCallLog(apiUrl, "POST", requestBody, statusCode, responseBody,
|
|
|
+ apiCallLogService.saveApiCallLog(apiUrl, "POST", requestBody, statusCode, responseBody,
|
|
|
statusCode == 200 ? 1 : 2, null, startTime);
|
|
|
|
|
|
// 解析响应
|
|
|
if (statusCode == 200) {
|
|
|
JSONObject result = JSONUtil.parseObj(responseBody);
|
|
|
Integer code = result.getInt("code");
|
|
|
-
|
|
|
if (code != null && code == 0) {
|
|
|
log.info("巨量引擎转化回传成功");
|
|
|
return true;
|
|
|
} else {
|
|
|
String message = result.getStr("message", "未知错误");
|
|
|
log.error("巨量引擎转化回传失败:code={},message={}", code, message);
|
|
|
- throw new ThirdPartyException("巨量引擎回传失败:" + message);
|
|
|
}
|
|
|
} else {
|
|
|
log.error("巨量引擎API调用失败,状态码:{}", statusCode);
|
|
|
- throw new ThirdPartyException("巨量引擎API调用失败,状态码:" + statusCode);
|
|
|
}
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
log.error("调用巨量引擎API异常", e);
|
|
|
- saveApiCallLog(apiUrl, "POST", JSONUtil.toJsonStr(conversionData),
|
|
|
+ apiCallLogService.saveApiCallLog(apiUrl, "POST", JSONUtil.toJsonStr(conversionData),
|
|
|
0, null, 2, e.getMessage(), startTime);
|
|
|
- throw new ThirdPartyException("调用巨量引擎API异常:" + e.getMessage(), e);
|
|
|
}
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -157,7 +150,7 @@ public class OceanEngineApiClient {
|
|
|
Map<String, Object> ad = new HashMap<>();
|
|
|
|
|
|
// 点击ID(必填)
|
|
|
- String clickId = (String) conversionData.get("clickId");
|
|
|
+ String clickId = (String) conversionData.get("traceId");
|
|
|
if (StrUtil.isBlank(clickId)) {
|
|
|
throw new ThirdPartyException("点击ID不能为空");
|
|
|
}
|
|
|
@@ -166,70 +159,9 @@ public class OceanEngineApiClient {
|
|
|
return ad;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取访问令牌
|
|
|
- *
|
|
|
- * @param appId 应用ID
|
|
|
- * @param appSecret 应用密钥
|
|
|
- * @return 访问令牌
|
|
|
- */
|
|
|
- public String getAccessToken(String appId, String appSecret) {
|
|
|
- String apiUrl = "https://ad.oceanengine.com/open_api/oauth2/access_token/";
|
|
|
-
|
|
|
- try {
|
|
|
- Map<String, Object> params = new HashMap<>();
|
|
|
- params.put("app_id", appId);
|
|
|
- params.put("secret", appSecret);
|
|
|
- params.put("grant_type", "auth_code");
|
|
|
-
|
|
|
- String response = HttpRequest.post(apiUrl)
|
|
|
- .header("Content-Type", "application/json")
|
|
|
- .body(JSONUtil.toJsonStr(params))
|
|
|
- .timeout(SystemConstant.API_TIMEOUT)
|
|
|
- .execute()
|
|
|
- .body();
|
|
|
-
|
|
|
- JSONObject result = JSONUtil.parseObj(response);
|
|
|
-
|
|
|
- if (result.getInt("code") == 0) {
|
|
|
- JSONObject data = result.getJSONObject("data");
|
|
|
- return data.getStr("access_token");
|
|
|
- } else {
|
|
|
- throw new ThirdPartyException("获取巨量引擎AccessToken失败:" + result.getStr("message"));
|
|
|
- }
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("获取巨量引擎AccessToken异常", e);
|
|
|
- throw new ThirdPartyException("获取AccessToken异常:" + e.getMessage(), e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 保存API调用日志
|
|
|
- */
|
|
|
- private void saveApiCallLog(String apiUrl, String method, String requestParams,
|
|
|
- Integer responseStatus, String responseBody,
|
|
|
- Integer callStatus, String errorMsg, long startTime) {
|
|
|
- try {
|
|
|
- ApiCallLog log = new ApiCallLog();
|
|
|
- log.setId(SnowflakeUtil.nextId());
|
|
|
- log.setAdvertiserId(2L); // 巨量引擎
|
|
|
- log.setAdvertiserName("巨量引擎");
|
|
|
- log.setApiName("转化回传API");
|
|
|
- log.setApiUrl(apiUrl);
|
|
|
- log.setRequestMethod(method);
|
|
|
- log.setRequestParams(requestParams);
|
|
|
- log.setResponseStatus(responseStatus);
|
|
|
- log.setResponseBody(responseBody);
|
|
|
- log.setCallStatus(callStatus);
|
|
|
- log.setErrorMsg(errorMsg);
|
|
|
- log.setCostTime(System.currentTimeMillis() - startTime);
|
|
|
- log.setCreateTime(LocalDateTime.now());
|
|
|
-
|
|
|
- apiCallLogMapper.insert(log);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("保存API调用日志失败", e);
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public AdvertiserTypeEnum getAdvertiserType() {
|
|
|
+ return AdvertiserTypeEnum.BAIDU;
|
|
|
}
|
|
|
}
|
|
|
|