From daee3e3334b6f1de4a1e52d670f8e625feae55ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 26 Feb 2026 08:37:15 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[esign]=20=EC=95=8C=EB=A6=BC=ED=86=A1=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20URL=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EC=B9=98=ED=99=98=20=EC=A0=9C=EA=B1=B0=20(=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=ED=85=9C=ED=94=8C=EB=A6=BF=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=B6=88=EC=9D=BC=EC=B9=98=20=EB=B0=A9=EC=A7=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ESign/EsignApiController.php | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/ESign/EsignApiController.php b/app/Http/Controllers/ESign/EsignApiController.php index 37f6e86f..e0fe43df 100644 --- a/app/Http/Controllers/ESign/EsignApiController.php +++ b/app/Http/Controllers/ESign/EsignApiController.php @@ -1061,30 +1061,20 @@ private function sendAlimtalk( : " 안녕하세요, {$signer->name}님. \n 전자계약 서명 요청이 도착했습니다.\n\n ■ 계약명: {$contract->title}\n ■ 서명 기한: {$expires}\n\n 아래 버튼을 눌러 계약서를 확인하고 서명해 주세요."; } - // 버튼 URL의 #{토큰} 변수를 실제 access_token으로 치환 + // 버튼: 템플릿에서 가져온 URL의 #{토큰}만 치환 (도메인은 템플릿 등록값 유지 — 카카오 검증) $buttons = ! empty($templateButtons) ? $templateButtons : [ ['Name' => '계약서 확인하기', 'ButtonType' => 'WL', 'Url1' => $signUrl, 'Url2' => $signUrl], ]; - $appUrl = rtrim(config('app.url'), '/'); - foreach ($buttons as &$btn) { foreach (['Url1', 'Url2'] as $urlKey) { if (! empty($btn[$urlKey])) { - $url = urldecode($btn[$urlKey]); - - // #{토큰} 변수를 실제 access_token으로 치환 - $url = str_replace( + $btn[$urlKey] = str_replace( ['#{토큰}', '#{%ED%86%A0%ED%81%B0}'], [$signer->access_token, $signer->access_token], - $url + urldecode($btn[$urlKey]) ); - - // 도메인을 현재 서버의 APP_URL로 치환 (개발/운영 환경 대응) - $url = preg_replace('#^https?://[^/]+#', $appUrl, $url); - - $btn[$urlKey] = $url; } } }