From 6e043b95392d9b185cc511237cafc4aba373bf8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Tue, 24 Feb 2026 00:55:32 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[esign]=20=EC=95=8C=EB=A6=BC=ED=86=A1=20?= =?UTF-8?q?=EB=B0=9C=EC=8B=A0=ED=94=84=EB=A1=9C=ED=95=84=20=ED=82=A4(Sende?= =?UTF-8?q?rID)=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - senderId를 빈 문자열로 보내던 것을 바로빌 채널 목록에서 ChannelId 조회 후 전달 - 바로빌 API 오류 -24005 해결 --- .../Controllers/ESign/EsignApiController.php | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index 5a1554b9..bdde9e24 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -970,6 +970,12 @@ private function sendAlimtalk( $barobill = app(BarobillService::class); $barobill->setServerMode($member->server_mode ?? 'production'); + // 카카오톡 채널 목록에서 발신프로필 키(SenderID) 조회 + $senderId = $this->getKakaotalkSenderId($barobill, $member->biz_no); + if (! $senderId) { + return ['success' => false, 'channel' => 'alimtalk', 'error' => '등록된 카카오톡 채널이 없습니다']; + } + $signUrl = config('app.url').'/esign/sign/'.$signer->access_token; $expires = $contract->expires_at?->format('Y-m-d H:i') ?? '없음'; @@ -985,7 +991,7 @@ private function sendAlimtalk( $result = $barobill->sendATKakaotalkEx( corpNum: $member->biz_no, - senderId: '', + senderId: $senderId, templateName: $templateName, receiverName: $signer->name, receiverNum: preg_replace('/[^0-9]/', '', $signer->phone), @@ -1024,6 +1030,45 @@ private function sendAlimtalk( } } + /** + * 바로빌 카카오톡 채널 목록에서 발신프로필 키(ChannelId) 조회 + */ + private function getKakaotalkSenderId(BarobillService $barobill, string $bizNo): ?string + { + $result = $barobill->getKakaotalkChannels($bizNo); + + if (! ($result['success'] ?? false) || empty($result['data'])) { + return null; + } + + $data = $result['data']; + + // 바로빌 응답 형식에 따라 채널 목록 파싱 + if (is_array($data) && isset($data[0])) { + $channels = $data; + } elseif (is_object($data) && isset($data->KakaotalkChannel)) { + $channels = is_array($data->KakaotalkChannel) + ? $data->KakaotalkChannel + : [$data->KakaotalkChannel]; + } elseif (is_array($data) && isset($data['KakaotalkChannel'])) { + $channels = is_array($data['KakaotalkChannel']) + ? $data['KakaotalkChannel'] + : [$data['KakaotalkChannel']]; + } else { + $channels = [$data]; + } + + $channel = $channels[0] ?? null; + + if (! $channel) { + return null; + } + + return is_array($channel) + ? ($channel['ChannelId'] ?? null) + : ($channel->ChannelId ?? null); + } + /** * PDF 다운로드 */