From 83b2c1d16c4e7d0cb1b933edd936404725310646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Tue, 3 Feb 2026 07:53:36 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EB=B0=94=EB=A1=9C=EB=B9=8C=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=ED=85=8C=EB=84=8C=ED=8A=B8?= =?UTF-8?q?=EB=B3=84=20=EC=84=9C=EB=B2=84=20=EB=AA=A8=EB=93=9C=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EtaxController, EaccountController, EcardController, HometaxController에 테넌트별 서버 모드(server_mode) 적용 로직 추가 - applyMemberServerMode() 메서드로 회원사별 테스트/운영 서버 전환 - 기존 전역 BarobillConfig 대신 BarobillMember.server_mode 우선 적용 Co-Authored-By: Claude Opus 4.5 --- .../Barobill/EaccountController.php | 45 ++++++++++++++++++- .../Controllers/Barobill/EcardController.php | 45 ++++++++++++++++++- .../Controllers/Barobill/EtaxController.php | 42 ++++++++++++++++- .../Barobill/HometaxController.php | 44 +++++++++++++++++- 4 files changed, 172 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index 3f011a89..9e227a00 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -107,16 +107,59 @@ public function index(Request $request): View|Response // 해당 테넌트의 바로빌 회원사 정보 $barobillMember = BarobillMember::where('tenant_id', $tenantId)->first(); + // 테넌트별 서버 모드 적용 (회원사 설정 우선) + $isTestMode = $barobillMember ? $barobillMember->isTestMode() : $this->isTestMode; + + // 서버 모드에 따라 SOAP 설정 재초기화 + if ($barobillMember && $barobillMember->server_mode) { + $this->applyMemberServerMode($barobillMember); + } + return view('barobill.eaccount.index', [ 'certKey' => $this->certKey, 'corpNum' => $this->corpNum, - 'isTestMode' => $this->isTestMode, + 'isTestMode' => $isTestMode, 'hasSoapClient' => $this->soapClient !== null, 'currentTenant' => $currentTenant, 'barobillMember' => $barobillMember, ]); } + /** + * 회원사 서버 모드에 따라 SOAP 설정 적용 + */ + private function applyMemberServerMode(BarobillMember $member): void + { + $memberTestMode = $member->isTestMode(); + + // 현재 모드와 다르면 재설정 + if ($this->isTestMode !== $memberTestMode) { + $this->isTestMode = $memberTestMode; + + // 해당 모드의 BarobillConfig 조회 + $config = BarobillConfig::where('environment', $memberTestMode ? 'test' : 'production') + ->where('is_active', true) + ->first(); + + if ($config) { + $this->certKey = $config->cert_key; + $this->corpNum = $config->corp_num; + $baseUrl = $memberTestMode + ? 'https://testws.baroservice.com' + : 'https://ws.baroservice.com'; + $this->soapUrl = $baseUrl . '/BANKACCOUNT.asmx?WSDL'; + } else { + // 설정이 없으면 기본 URL 사용 + $this->soapUrl = $memberTestMode + ? 'https://testws.baroservice.com/BANKACCOUNT.asmx?WSDL' + : 'https://ws.baroservice.com/BANKACCOUNT.asmx?WSDL'; + } + + // SOAP 클라이언트 재초기화 + $this->initSoapClient(); + } + } + /** * 등록된 계좌 목록 조회 (GetBankAccountEx) */ diff --git a/app/Http/Controllers/Barobill/EcardController.php b/app/Http/Controllers/Barobill/EcardController.php index 5794627c..666f4e71 100644 --- a/app/Http/Controllers/Barobill/EcardController.php +++ b/app/Http/Controllers/Barobill/EcardController.php @@ -107,16 +107,59 @@ public function index(Request $request): View|Response // 해당 테넌트의 바로빌 회원사 정보 $barobillMember = BarobillMember::where('tenant_id', $tenantId)->first(); + // 테넌트별 서버 모드 적용 (회원사 설정 우선) + $isTestMode = $barobillMember ? $barobillMember->isTestMode() : $this->isTestMode; + + // 서버 모드에 따라 SOAP 설정 재초기화 + if ($barobillMember && $barobillMember->server_mode) { + $this->applyMemberServerMode($barobillMember); + } + return view('barobill.ecard.index', [ 'certKey' => $this->certKey, 'corpNum' => $this->corpNum, - 'isTestMode' => $this->isTestMode, + 'isTestMode' => $isTestMode, 'hasSoapClient' => $this->soapClient !== null, 'currentTenant' => $currentTenant, 'barobillMember' => $barobillMember, ]); } + /** + * 회원사 서버 모드에 따라 SOAP 설정 적용 + */ + private function applyMemberServerMode(BarobillMember $member): void + { + $memberTestMode = $member->isTestMode(); + + // 현재 모드와 다르면 재설정 + if ($this->isTestMode !== $memberTestMode) { + $this->isTestMode = $memberTestMode; + + // 해당 모드의 BarobillConfig 조회 + $config = BarobillConfig::where('environment', $memberTestMode ? 'test' : 'production') + ->where('is_active', true) + ->first(); + + if ($config) { + $this->certKey = $config->cert_key; + $this->corpNum = $config->corp_num; + $baseUrl = $memberTestMode + ? 'https://testws.baroservice.com' + : 'https://ws.baroservice.com'; + $this->soapUrl = $baseUrl . '/CARD.asmx?WSDL'; + } else { + // 설정이 없으면 기본 URL 사용 + $this->soapUrl = $memberTestMode + ? 'https://testws.baroservice.com/CARD.asmx?WSDL' + : 'https://ws.baroservice.com/CARD.asmx?WSDL'; + } + + // SOAP 클라이언트 재초기화 + $this->initSoapClient(); + } + } + /** * 등록된 카드 목록 조회 (GetCardEx2) * 레퍼런스: https://dev.barobill.co.kr/docs/references/카드조회-API#GetCardEx2 diff --git a/app/Http/Controllers/Barobill/EtaxController.php b/app/Http/Controllers/Barobill/EtaxController.php index 3befd6cf..f1f4e99e 100644 --- a/app/Http/Controllers/Barobill/EtaxController.php +++ b/app/Http/Controllers/Barobill/EtaxController.php @@ -99,16 +99,56 @@ public function index(Request $request): View|Response ? BarobillMember::where('tenant_id', $tenantId)->first() : null; + // 테넌트별 서버 모드 적용 (회원사 설정 우선) + $isTestMode = $barobillMember ? $barobillMember->isTestMode() : $this->isTestMode; + + // 서버 모드에 따라 SOAP 설정 재초기화 + if ($barobillMember && $barobillMember->server_mode) { + $this->applyMemberServerMode($barobillMember); + } + return view('barobill.etax.index', [ 'certKey' => $this->certKey, 'corpNum' => $this->corpNum, - 'isTestMode' => $this->isTestMode, + 'isTestMode' => $isTestMode, 'hasSoapClient' => $this->soapClient !== null, 'currentTenant' => $currentTenant, 'barobillMember' => $barobillMember, ]); } + /** + * 회원사 서버 모드에 따라 SOAP 설정 적용 + */ + private function applyMemberServerMode(BarobillMember $member): void + { + $memberTestMode = $member->isTestMode(); + + // 현재 모드와 다르면 재설정 + if ($this->isTestMode !== $memberTestMode) { + $this->isTestMode = $memberTestMode; + + // 해당 모드의 BarobillConfig 조회 + $config = BarobillConfig::where('environment', $memberTestMode ? 'test' : 'production') + ->where('is_active', true) + ->first(); + + if ($config) { + $this->certKey = $config->cert_key; + $this->corpNum = $config->corp_num; + $this->soapUrl = $config->base_url . '/TI.asmx?WSDL'; + } else { + // 설정이 없으면 기본 URL 사용 + $this->soapUrl = $memberTestMode + ? 'https://testws.baroservice.com/TI.asmx?WSDL' + : 'https://ws.baroservice.com/TI.asmx?WSDL'; + } + + // SOAP 클라이언트 재초기화 + $this->initSoapClient(); + } + } + // 바로빌 파트너사 (본사) 테넌트 ID private const HEADQUARTERS_TENANT_ID = 1; diff --git a/app/Http/Controllers/Barobill/HometaxController.php b/app/Http/Controllers/Barobill/HometaxController.php index 55b58051..37063408 100644 --- a/app/Http/Controllers/Barobill/HometaxController.php +++ b/app/Http/Controllers/Barobill/HometaxController.php @@ -107,10 +107,18 @@ public function index(Request $request): View|Response // 해당 테넌트의 바로빌 회원사 정보 $barobillMember = BarobillMember::where('tenant_id', $tenantId)->first(); + // 테넌트별 서버 모드 적용 (회원사 설정 우선) + $isTestMode = $barobillMember ? $barobillMember->isTestMode() : $this->isTestMode; + + // 서버 모드에 따라 SOAP 설정 재초기화 + if ($barobillMember && $barobillMember->server_mode) { + $this->applyMemberServerMode($barobillMember); + } + return view('barobill.hometax.index', [ 'certKey' => $this->certKey, 'corpNum' => $this->corpNum, - 'isTestMode' => $this->isTestMode, + 'isTestMode' => $isTestMode, 'hasSoapClient' => $this->soapClient !== null, 'tenantId' => $tenantId, 'currentTenant' => $currentTenant, @@ -118,6 +126,40 @@ public function index(Request $request): View|Response ]); } + /** + * 회원사 서버 모드에 따라 SOAP 설정 적용 + */ + private function applyMemberServerMode(BarobillMember $member): void + { + $memberTestMode = $member->isTestMode(); + + // 현재 모드와 다르면 재설정 + if ($this->isTestMode !== $memberTestMode) { + $this->isTestMode = $memberTestMode; + + // 해당 모드의 BarobillConfig 조회 + $config = BarobillConfig::where('environment', $memberTestMode ? 'test' : 'production') + ->where('is_active', true) + ->first(); + + if ($config) { + $this->certKey = $config->cert_key; + $this->corpNum = $config->corp_num; + $this->baseUrl = $memberTestMode + ? 'https://testws.baroservice.com' + : 'https://ws.baroservice.com'; + } else { + // 설정이 없으면 기본 URL 사용 + $this->baseUrl = $memberTestMode + ? 'https://testws.baroservice.com' + : 'https://ws.baroservice.com'; + } + + // SOAP 클라이언트 재초기화 + $this->initSoapClient(); + } + } + /** * 매출 세금계산서 목록 조회 (GetPeriodTaxInvoiceSalesList) *