diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index c7e16168..5cb4b6cf 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -1045,15 +1045,28 @@ private function sendAlimtalk( $templateContent ); } else { - // 템플릿 조회 실패 시 하드코딩 폴백 + \Log::warning('E-Sign 알림톡: 템플릿 내용 조회 실패, 하드코딩 폴백 사용', [ + 'template_name' => $templateName, + 'channel_id' => $channelId, + ]); $message = $isReminder ? "안녕하세요, {$signer->name}님.\n아직 서명이 완료되지 않은 전자계약이 있습니다.\n\n ■ 계약명: {$contract->title}\n ■ 서명 기한: {$expires}\n\n 기한 내에 서명을 완료해 주세요." : " 안녕하세요, {$signer->name}님. \n 전자계약 서명 요청이 도착했습니다.\n\n ■ 계약명: {$contract->title}\n ■ 서명 기한: {$expires}\n\n 아래 버튼을 눌러 계약서를 확인하고 서명해 주세요."; } - $smsMessage = $smsFallback - ? "[SAM] {$signer->name}님, 전자계약 서명 요청이 도착했습니다. {$signUrl}" - : ''; + $receiverNum = preg_replace('/[^0-9]/', '', $signer->phone); + + \Log::info('E-Sign 알림톡 발송 시도', [ + 'contract_id' => $contract->id, + 'signer_id' => $signer->id, + 'sender_id' => $member->barobill_id, + 'yellow_id' => $channelId, + 'template_name' => $templateName, + 'template_from_api' => (bool) $templateContent, + 'receiver_num' => $receiverNum, + 'message_length' => mb_strlen($message), + 'sign_url' => $signUrl, + ]); $result = $barobill->sendATKakaotalkEx( corpNum: $member->biz_no, @@ -1061,7 +1074,7 @@ private function sendAlimtalk( yellowId: $channelId, templateName: $templateName, receiverName: $signer->name, - receiverNum: preg_replace('/[^0-9]/', '', $signer->phone), + receiverNum: $receiverNum, title: '', message: $message, buttons: [ @@ -1072,9 +1085,40 @@ private function sendAlimtalk( 'Url2' => $signUrl, ], ], - smsMessage: $smsMessage, ); + // 발송 접수 후 결과 확인 (SendKey 반환 시) + if (($result['success'] ?? false) && ! empty($result['data']) && is_string($result['data'])) { + $sendKey = $result['data']; + \Log::info('E-Sign 알림톡 접수 성공', [ + 'contract_id' => $contract->id, + 'send_key' => $sendKey, + ]); + + // 3초 후 전달 결과 확인 + sleep(3); + $sendResult = $barobill->getSendKakaotalk($member->biz_no, $sendKey); + $resultData = $sendResult['data'] ?? null; + $resultCode = is_object($resultData) ? ($resultData->ResultCode ?? null) : ($resultData['ResultCode'] ?? null); + $resultMsg = is_object($resultData) ? ($resultData->ResultMessage ?? null) : ($resultData['ResultMessage'] ?? null); + + \Log::info('E-Sign 알림톡 전달 결과', [ + 'contract_id' => $contract->id, + 'send_key' => $sendKey, + 'result_code' => $resultCode, + 'result_message' => $resultMsg, + ]); + + // ResultCode 1 = 성공, 그 외 = 실패 + if ($resultCode !== null && $resultCode != 1) { + return [ + 'success' => false, + 'channel' => 'alimtalk', + 'error' => "카카오톡 전달 실패: {$resultMsg} (코드: {$resultCode})", + ]; + } + } + if (! ($result['success'] ?? false)) { \Log::warning('E-Sign 알림톡 발송 실패', [ 'contract_id' => $contract->id,