findEscrowPayment($orderNumber); if (! $payment) { return ResponseHelper::error('common.failed', 404, null); } $meta = $payment->payment_meta ? json_decode($payment->payment_meta, true) : []; // 이미 구매거절확인 완료된 경우 if (isset($meta['escrow_deny_confirm'])) { return ResponseHelper::error('common.failed', 422, [ 'message' => ['이미 구매거절확인이 완료되었습니다.'], ]); } $dcnfName = trim((string) $request->input('dcnf_name', '관리자')); Log::info('KG Inicis: escrow deny confirm requested', [ 'order_number' => $orderNumber, 'tid' => $payment->transaction_id, ]); try { $this->apiService->useEscrowCredentials(true); $pgResponse = $this->apiService->denyConfirmEscrow([ 'originalTid' => $payment->transaction_id, 'dcnfName' => $dcnfName, ]); $resultCode = $pgResponse['resultCode'] ?? ''; $sanitizedPgResponse = $this->sanitizePgResponse($pgResponse, self::ESCROW_DENY_CONFIRM_RESPONSE_KEYS); if ($resultCode !== '00') { Log::warning('KG Inicis: escrow deny confirm failed', [ 'order_number' => $orderNumber, 'result_code' => $resultCode, 'result_msg' => $pgResponse['resultMsg'] ?? '', 'pg_response' => $sanitizedPgResponse, ]); return ResponseHelper::error('common.failed', 502, [ 'message' => [$pgResponse['resultMsg'] ?? '구매거절확인에 실패했습니다.'], ]); } // payment_meta에 구매거절확인 이력 저장 $meta['pg_response_sanitized'] = true; $meta['escrow_deny_confirm'] = [ 'confirmed_at' => now()->toDateTimeString(), 'dcnf_name' => $dcnfName, 'pg_response' => $sanitizedPgResponse, ]; DB::table('ecommerce_order_payments') ->where('id', $payment->id) ->update([ 'payment_meta' => json_encode($meta, JSON_UNESCAPED_UNICODE), 'updated_at' => now(), ]); Log::info('KG Inicis: escrow deny confirm completed', [ 'order_number' => $orderNumber, 'tid' => $payment->transaction_id, ]); return ResponseHelper::success('common.success', [ 'result_code' => $resultCode, 'result_msg' => $pgResponse['resultMsg'] ?? 'OK', ]); } catch (\Exception $e) { Log::error('KG Inicis: escrow deny confirm exception', [ 'order_number' => $orderNumber, 'error' => $e->getMessage(), ]); return ResponseHelper::error('common.failed', 500, [ 'message' => [$e->getMessage()], ]); } } private function findEscrowPayment(string $orderNumber): ?object { return DB::table('ecommerce_order_payments as p') ->join('ecommerce_orders as o', 'o.id', '=', 'p.order_id') ->where('o.order_number', $orderNumber) ->where('p.pg_provider', 'kginicis') ->where('p.is_escrow', true) ->whereNotNull('p.transaction_id') ->select([ 'p.id', 'p.transaction_id', 'p.payment_meta', ]) ->first(); } }