feat: [esign] 완료 알림톡 템플릿 2종 선택 및 버튼 URL 도메인 치환

- 발송 UI에 서명 요청 + 완료 알림톡 템플릿 각각 선택 가능
- 선택한 완료 템플릿명을 DB에 저장하여 서명 완료 시 사용
- 버튼 URL 도메인을 현재 환경의 app.url로 자동 치환 (개발/운영 환경 대응)
This commit is contained in:
김보곤
2026-02-27 16:29:03 +09:00
parent 810e170644
commit 3603a06c62
4 changed files with 76 additions and 3 deletions

View File

@@ -754,7 +754,8 @@ private function sendCompletionAlimtalk(EsignContract $contract, EsignSigner $si
return ['success' => false, 'channel' => 'alimtalk', 'error' => '등록된 카카오톡 채널이 없습니다'];
}
$templateName = $this->resolveTemplateName('전자계약_완료');
$templateName = $contract->completion_template_name
?: $this->resolveTemplateName('전자계약_완료');
$documentUrl = config('app.url').'/esign/sign/'.$signer->access_token.'/api/document';
$signUrl = config('app.url').'/esign/sign/'.$signer->access_token;
$completedAt = $contract->completed_at?->format('Y-m-d H:i') ?? now()->format('Y-m-d H:i');
@@ -807,6 +808,20 @@ private function sendCompletionAlimtalk(EsignContract $contract, EsignSigner $si
}
unset($btn);
// 버튼 URL 도메인을 현재 환경의 도메인으로 치환
$appHost = parse_url(config('app.url'), PHP_URL_HOST);
foreach ($buttons as &$btn) {
foreach (['Url1', 'Url2'] as $urlKey) {
if (! empty($btn[$urlKey])) {
$parsed = parse_url($btn[$urlKey]);
if (isset($parsed['host']) && $parsed['host'] !== $appHost) {
$btn[$urlKey] = str_replace($parsed['host'], $appHost, $btn[$urlKey]);
}
}
}
}
unset($btn);
$receiverNum = preg_replace('/[^0-9]/', '', $signer->phone);
Log::info('E-Sign 완료 알림톡 발송 시도', [