charger = 'admin'; $url = "{$this->baseUrl}/kiso/center/verification-article/{$articleNumber}?charger={$this->charger}"; return $this->request('GET', $url); } /** * [PUT] 매물 정보 수정 * @param string $articleNumber 매물번호 * @param array $updateData 수정할 데이터 (tradeType, price, space 등) */ public function updateArticleInfo(string $articleNumber, array $updateData, string $charger = 'admin'): ?array { $this->charger = $charger; $url = "{$this->baseUrl}/kiso/center/verification-article/{$articleNumber}?charger={$this->charger}"; return $this->request('PUT', $url, $updateData); } /** * [POST] 매물 정보 가격수정 * @param string $articleNumber 매물번호 * @param array $priceData 가격 수정 데이터 * API:PATCH /kiso/center/verification-article/price/{매물번호}?charger={변경자} * priceType int 가격유형 (DEAL:매매, WARRANTY:보증금, LEASE:월세, PRE_SALE:분양, PREMIUM:프리미엄, PRE_SALE_OPTION:분양옵션) * dealAmount Int 매매금액 * warrantyAmount Int 보증금 * leaseAmount Int 월세금액 * preSaleAmount Int 분양금액 * premiumAmount Int 프리미엄금액 * preSaleOptionAmount Int 분양옵션금액 */ public function postArticlePriceUpdate(string $articleNumber, array $priceData, string $charger = 'admin'): ?array { $this->charger = $charger; $url = "{$this->baseUrl}/kiso/center/verification-article/price/{$articleNumber}?charger={$this->charger}"; return $this->request('POST', $url, $priceData); } public function submitSyncResult(string $reserveNoList): ?array { $url = "{$this->baseUrl}/site/submitSyncResult.nhn"; $url .= '?reserveNoList=' . $reserveNoList; return $this->request('GET', $url); } /** * CURL 공통 실행 함수 */ private function request(string $method, string $url, ?array $data = null): ?array { /** * curl --location 'https://test-b2b.land.naver.com/kiso/center/verification-article/2500000001?charger=admin' \ --header 'X-Naver-Client-Id: yqBbvQZ123_hjH3b3Df9' \ */ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); if ($method === 'PUT') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); if ($data) { $payload = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($payload), 'X-Naver-Client-Id: yqBbvQZ123_hjH3b3Df9' ]); } } elseif ($method === 'GET') { curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-Naver-Client-Id: yqBbvQZ123_hjH3b3Df9' ]); } elseif ($method === 'POST') { curl_setopt($ch, CURLOPT_POST, true); if ($data) { $payload = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($payload), 'X-Naver-Client-Id: yqBbvQZ123_hjH3b3Df9' ]); } } elseif ( $method === 'PATCH') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); if ($data) { $payload = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($payload), 'X-Naver-Client-Id: yqBbvQZ123_hjH3b3Df9' ]); } } $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 결과 로그 기록 (성공/실패 모두 기록하여 추적 가능하게 함) if ($httpCode === 200 || $httpCode === 202) { log_message('info', "[Naver API $method SUCCESS] URL: $url | Response: $response"); } else { log_message('error', "[Naver API $method FAIL] URL: $url | Code: $httpCode | Response: $response"); return null; } return json_decode($response, true); } }