호출시 정보 저장
This commit is contained in:
@@ -4,77 +4,6 @@
|
|||||||
* - 프레임워크를 로드하지 않아 매우 빠르고 안전함
|
* - 프레임워크를 로드하지 않아 매우 빠르고 안전함
|
||||||
* - 받은 데이터를 Redis 큐에 넣고 즉시 응답
|
* - 받은 데이터를 Redis 큐에 넣고 즉시 응답
|
||||||
*/
|
*/
|
||||||
// 1. 응답 헤더 설정 (JSON)
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
|
|
||||||
// 2. 보안 키 체크 (URL 파라미터 key=값)
|
|
||||||
$configKey = "7EE868F4B36D36B3D86736828F4729EAC4992083"; // 실제 사용할 키값으로 변경하세요
|
|
||||||
$receivedKey = $_GET['key'] ?? '';
|
|
||||||
$logDir = __DIR__ . '/logs/';
|
|
||||||
|
|
||||||
if ($receivedKey !== $configKey) {
|
|
||||||
http_response_code(403);
|
|
||||||
echo apiResponse([
|
|
||||||
'code' => '-1',
|
|
||||||
'message' => 'Unregistered key'
|
|
||||||
]);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// 3. 데이터 수신 (POST JSON 또는 GET 파라미터)
|
|
||||||
$rawData = file_get_contents('php://input');
|
|
||||||
$data = json_decode($rawData, true);
|
|
||||||
|
|
||||||
if (empty($data)) {
|
|
||||||
throw new Exception("Empty data received");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. Redis 연결
|
|
||||||
$redis = new Redis();
|
|
||||||
// Docker 서비스 이름인 'redis' 사용
|
|
||||||
$success = $redis->connect('redis', 6379);
|
|
||||||
|
|
||||||
if (!$success) {
|
|
||||||
throw new Exception("Could not connect to Redis");
|
|
||||||
}
|
|
||||||
|
|
||||||
$redis->select(9); // 10번 DB 사용
|
|
||||||
|
|
||||||
// 5. 큐에 넣을 데이터 포맷팅
|
|
||||||
$payload = [
|
|
||||||
'request_data' => $data,
|
|
||||||
'received_at' => date('Y-m-d H:i:s'),
|
|
||||||
'client_ip' => $_SERVER['REMOTE_ADDR']
|
|
||||||
];
|
|
||||||
|
|
||||||
// 'naver:raw_queue'라는 이름의 리스트에 저장
|
|
||||||
$redis->lPush('naver:raw_queue', json_encode($payload));
|
|
||||||
|
|
||||||
// --- [여기서부터 로그 저장 코드 추가] ---
|
|
||||||
// 들어온 원본($rawData)을 그대로 기록합니다.
|
|
||||||
writeLog("RAW_RECEIVE | " . $rawData, 'INFO');
|
|
||||||
// --------------------------------------
|
|
||||||
// 6. 네이버측에 성공 응답 (202 Accepted)
|
|
||||||
// 처리가 완료된 것은 아니지만, 접수는 완료되었음을 의미
|
|
||||||
http_response_code(200);
|
|
||||||
echo apiResponse([
|
|
||||||
'code' => 'success',
|
|
||||||
'message' => ''
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
// 7. 장애 발생 시 로그 기록 (시스템 로그)
|
|
||||||
writeLog( 'Exception :' . apiResponse($data) , 'ERROR');
|
|
||||||
|
|
||||||
http_response_code(500);
|
|
||||||
|
|
||||||
echo apiResponse([
|
|
||||||
'code' => '-1',
|
|
||||||
'message' => $e->getMessage()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 날짜별 로그 기록 함수
|
* 날짜별 로그 기록 함수
|
||||||
@@ -106,12 +35,95 @@ function writeLog($message, $level = 'ERROR') {
|
|||||||
|
|
||||||
// 도우미 함수 정의
|
// 도우미 함수 정의
|
||||||
function apiResponse($error = null) {
|
function apiResponse($error = null) {
|
||||||
// $base = [
|
|
||||||
// '@type' => 'response',
|
|
||||||
// '@service' => 'confirms',
|
|
||||||
// '@version' => '1.0.0'
|
|
||||||
// ];
|
|
||||||
// if ($error) $base['error'] = $error;
|
|
||||||
$base = $error;
|
$base = $error;
|
||||||
return json_encode($base);
|
return json_encode($base);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 응답 헤더 설정 (JSON)
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
|
||||||
|
// ===== 최우선: 모든 호출 정보를 로그에 저장 (보안 키 체크 전) =====
|
||||||
|
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
|
||||||
|
$fullUrl = $protocol . "://" . ($_SERVER['HTTP_HOST'] ?? 'localhost') . ($_SERVER['REQUEST_URI'] ?? '');
|
||||||
|
$rawData = file_get_contents('php://input');
|
||||||
|
|
||||||
|
$requestInfo = [
|
||||||
|
'timestamp' => date('Y-m-d H:i:s'),
|
||||||
|
'method' => $_SERVER['REQUEST_METHOD'] ?? 'UNKNOWN',
|
||||||
|
'full_url' => $fullUrl,
|
||||||
|
'request_uri' => $_SERVER['REQUEST_URI'] ?? '',
|
||||||
|
'query_string' => $_SERVER['QUERY_STRING'] ?? '',
|
||||||
|
'get_params' => $_GET,
|
||||||
|
'post_data' => $rawData,
|
||||||
|
'client_ip' => $_SERVER['REMOTE_ADDR'] ?? '',
|
||||||
|
'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
|
||||||
|
'referer' => $_SERVER['HTTP_REFERER'] ?? '',
|
||||||
|
];
|
||||||
|
|
||||||
|
writeLog("REQUEST_INFO | " . json_encode($requestInfo, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 'INFO');
|
||||||
|
// ================================================================
|
||||||
|
|
||||||
|
// 2. 보안 키 체크 (URL 파라미터 key=값)
|
||||||
|
$configKey = "7EE868F4B36D36B3D86736828F4729EAC4992083"; // 실제 사용할 키값으로 변경하세요
|
||||||
|
$receivedKey = $_GET['key'] ?? '';
|
||||||
|
$logDir = __DIR__ . '/logs/';
|
||||||
|
|
||||||
|
if ($receivedKey !== $configKey) {
|
||||||
|
writeLog("SECURITY_FAIL | Invalid key: $receivedKey", 'WARNING');
|
||||||
|
http_response_code(403);
|
||||||
|
echo apiResponse([
|
||||||
|
'code' => '-1',
|
||||||
|
'message' => 'Unregistered key'
|
||||||
|
]);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 3. 데이터 수신 (POST JSON 또는 GET 파라미터)
|
||||||
|
$data = json_decode($rawData, true);
|
||||||
|
|
||||||
|
if (empty($data)) {
|
||||||
|
throw new Exception("Empty data received");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Redis 연결
|
||||||
|
$redis = new Redis();
|
||||||
|
// Docker 서비스 이름인 'redis' 사용
|
||||||
|
$success = $redis->connect('redis', 6379);
|
||||||
|
|
||||||
|
if (!$success) {
|
||||||
|
throw new Exception("Could not connect to Redis");
|
||||||
|
}
|
||||||
|
|
||||||
|
$redis->select(9); // 10번 DB 사용
|
||||||
|
|
||||||
|
// 5. 큐에 넣을 데이터 포맷팅
|
||||||
|
$payload = [
|
||||||
|
'request_data' => $data,
|
||||||
|
'received_at' => date('Y-m-d H:i:s'),
|
||||||
|
'client_ip' => $_SERVER['REMOTE_ADDR']
|
||||||
|
];
|
||||||
|
|
||||||
|
// 'naver:raw_queue'라는 이름의 리스트에 저장
|
||||||
|
$redis->lPush('naver:raw_queue', json_encode($payload));
|
||||||
|
|
||||||
|
// 6. 네이버측에 성공 응답 (202 Accepted)
|
||||||
|
// 처리가 완료된 것은 아니지만, 접수는 완료되었음을 의미
|
||||||
|
http_response_code(200);
|
||||||
|
echo apiResponse([
|
||||||
|
'code' => 'success',
|
||||||
|
'message' => ''
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// 7. 장애 발생 시 로그 기록 (시스템 로그)
|
||||||
|
writeLog( 'Exception :' . apiResponse($data) , 'ERROR');
|
||||||
|
|
||||||
|
http_response_code(500);
|
||||||
|
|
||||||
|
echo apiResponse([
|
||||||
|
'code' => '-1',
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user