77 lines
2.2 KiB
PHP
77 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* [A 작업] 네이버 검증 요청 실시간 수신 리시버
|
|
* - 프레임워크를 로드하지 않아 매우 빠르고 안전함
|
|
* - 받은 데이터를 Redis 큐에 넣고 즉시 응답
|
|
*/
|
|
|
|
// 1. 응답 헤더 설정 (JSON)
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// 2. 보안 키 체크 (URL 파라미터 key=값)
|
|
$configKey = "YOUR_SECRET_KEY_HERE"; // 실제 사용할 키값으로 변경하세요
|
|
$receivedKey = $_GET['key'] ?? '';
|
|
|
|
if ($receivedKey !== $configKey) {
|
|
http_response_code(403);
|
|
echo json_encode([
|
|
'resultCode' => 'E003',
|
|
'resultMessage' => 'Invalid API Key'
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
// 3. 데이터 수신 (POST JSON 또는 GET 파라미터)
|
|
$rawData = file_get_contents('php://input');
|
|
$data = json_decode($rawData, true);
|
|
|
|
// JSON 데이터가 비어있다면 GET 파라미터 사용 (테스트용)
|
|
if (empty($data)) {
|
|
$data = $_GET;
|
|
}
|
|
|
|
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(10); // 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(202);
|
|
echo json_encode([
|
|
'resultCode' => 'S000',
|
|
'resultMessage' => 'Request accepted and queued',
|
|
'articleNumber' => $data['articleNumber'] ?? 'N/A'
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
// 7. 장애 발생 시 로그 기록 (시스템 로그)
|
|
error_log("[API_RECEIVER_ERROR] " . $e->getMessage());
|
|
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'resultCode' => 'E999',
|
|
'resultMessage' => 'Internal System Error: ' . $e->getMessage()
|
|
]);
|
|
} |