변경 파일 목록
총 3개
Component (1)
SmsAuto.phpSms/변경 파일 코드
추가삭제
변경 전message_config.php
| <div class="ncua-table ncua-table--vertical"> | |
| <table> | |
| <tr> | |
| <th><div data-tooltip-seq="018">자동알림 90byte 초과시 전송 방법</div> | |
| </th> | |
| <td> | |
| <div class="ncua-radio-group ncua-flex ncua-flex-gap"> | |
| </details> | |
| </section> | |
| <?php endif; ?> | |
| </section> | |
| <!-- 카카오 친구톡 섹션 --> | |
변경 후message_config.php
| <div class="ncua-table ncua-table--vertical"> | |
| <table> | |
| <tr> | |
| <th><div>자동알림 90byte 초과시 전송 방법</div> | |
| </th> | |
| <td> | |
| <div class="ncua-radio-group ncua-flex ncua-flex-gap"> | |
| </details> | |
| </section> | |
| <?php endif; ?> | |
| <section class="ncua-card__body accordion-section"> | |
| <details class="ncua-accordion ncua-accordion--gray" open> | |
| <summary>자동알림 90byte 초과시 전송 방법 확인사항</summary> | |
| <ul class="ncua-accordion__content"> | |
| <li class="ncua-notice-info">SMS는 최대 90byte까지만 발송 가능합니다.</li> | |
| <li class="ncua-notice-info">내용 또는 변수 값에 따라 90byte를 넘을 경우, 선택한 전송 방법으로 발송됩니다.</li> | |
| <li class="ncua-notice-info">해당 설정은 SMS 자동알림, 자동알림 대체발송(SMS 내용으로 발송)에만 적용됩니다.</li> | |
| <li class="ncua-notice-info text-danger">선물하기 자동알림 발송 메시지 내용이 90byte를 초과할 경우, SMS 발송 설정과 무관하게 LMS로 자동 발송됩니다.</li> | |
| </ul> | |
| </details> | |
| </section> | |
| </section> | |
| <!-- 카카오 친구톡 섹션 --> | |
변경 전function_config.php
| <h3 class="ncua-card__title ncua-flex ncua-align-items-center" data-tooltip-seq="001" data-tooltip-icon-type="fill">기능 설정</h3> | |
| </header> | |
| <section class="ncua-card__body js-track-change"> | |
| <div class="ncua-table ncua-table--vertical"> | |
| <table> | |
| <tbody> | |
변경 후function_config.php
| <h3 class="ncua-card__title ncua-flex ncua-align-items-center" data-tooltip-seq="001" data-tooltip-icon-type="fill">기능 설정</h3> | |
| </header> | |
| <section class="ncua-card__body js-track-change"> | |
| <div class="ncua-notice-info" style="margin-bottom:16px;">선물하기 자동알림 발송 메시지 내용이 90byte를 초과할 경우, SMS 발송 설정과 무관하게 LMS로 자동 발송됩니다.</div> | |
| <div class="ncua-table ncua-table--vertical"> | |
| <table> | |
| <tbody> | |
변경 전SmsAuto.php
| $smsContentForRecipient['contents'], $originalReplaceArguments, $this->smsAutoCodeType, AutoSendChannel::SMS | |
| ); | |
| } | |
| $kakaoSmsOverFlag = SmsAutoSendOverType::LIMIT->value; | |
| if ($this->findAutoSendConfigService->isOverSmsLength($replacedKakaoContents)) { | |
| $kakaoSmsOverFlag = $this->findAutoSendConfigService->getSmsSendOverFlag($this->smsAutoConfig)->value; | |
| } | |
| } else { | |
| $kakaoSmsOverFlag = SmsAutoSendOverType::LIMIT->value; | |
| if ($this->findAutoSendConfigService->isOverSmsLength($replacedKakaoContents)) { | |
| $kakaoSmsOverFlag = $this->findAutoSendConfigService->convertCrmToSendOverFlag($this->kakaoCrmConfig);; | |
| } | |
| } | |
| } else { | |
| $replacedKakaoContents = ''; | |
| $smsContentForRecipient['contents'], $originalReplaceArguments, $this->smsAutoCodeType, AutoSendChannel::SMS | |
| ); | |
| } | |
| $kakaoSmsOverFlag = SmsAutoSendOverType::LIMIT->value; | |
| if ($this->findAutoSendConfigService->isOverSmsLength($replacedKakaoContents)) { | |
| $kakaoSmsOverFlag = $this->findAutoSendConfigService->getSmsSendOverFlag($this->smsAutoConfig)->value; | |
| } | |
| } else { | |
| $kakaoSmsOverFlag = SmsAutoSendOverType::LIMIT->value; | |
| if ($this->findAutoSendConfigService->isOverSmsLength($replacedKakaoContents)) { | |
| $kakaoSmsOverFlag = $this->findAutoSendConfigService->convertCrmToSendOverFlag($this->kakaoCrmConfig);; | |
| } | |
| } | |
| } else { | |
| $replacedKakaoContents = ''; | |
| $logData = $this->buildSendLogData($logData); | |
| // 발송 | |
| $smsOverFlag = $this->findAutoSendConfigService->getSmsSendOverFlag($this->smsAutoConfig); | |
| $message = new \Component\Sms\SmsMessage($contents); | |
| if ($message->exceedSmsLength()) { | |
| $message = match ($smsOverFlag) { | |
| SmsAutoSendOverType::LMS => new \Component\Sms\LmsMessage($contents), | |
| SmsAutoSendOverType::DIVISION => new \Component\Sms\DivisionSmsMessage($contents), | |
| default => new \Component\Sms\SmsMessage($contents), | |
| }; | |
| } | |
| $transport = \App::load(SmsSender::class); | |
| if ($this->isAutoSend() || !$this->passwordCheckFl) { | |
| // LMS 제목 (설정된 자동발송 문구 제목 - LMS 발송 시에만 SmsSender 에서 사용, 미입력 시 [제목없음]) | |
| // 튜닝 상점 대비: 구버전 SmsSender(setSubject 미보유)에서 발송 중단 방지 | |
| if (method_exists($transport, 'setSubject')) { | |
| $transport->setSubject($item['messageTitle'] ?? ''); | |
| } | |
| $transport->setSmsType($item['smsType']); | |
| $transport->setReceiver($receiverData); | |
| return $transport->send(); | |
| } | |
| /** | |
| * 카카오 비즈엠 버튼 데이터 생성 | |
| * 페이지링크에 송장번호 치환코드가 있는 경우 치환 처리 | |
변경 후SmsAuto.php
| $smsContentForRecipient['contents'], $originalReplaceArguments, $this->smsAutoCodeType, AutoSendChannel::SMS | |
| ); | |
| } | |
| $kakaoSmsOverFlag = $this->resolveKakaoAlternativeSmsOverFlag($replacedKakaoContents, bySmsContent: true); | |
| } else { | |
| $kakaoSmsOverFlag = $this->resolveKakaoAlternativeSmsOverFlag($replacedKakaoContents, bySmsContent: false); | |
| } | |
| } else { | |
| $replacedKakaoContents = ''; | |
| $smsContentForRecipient['contents'], $originalReplaceArguments, $this->smsAutoCodeType, AutoSendChannel::SMS | |
| ); | |
| } | |
| $kakaoSmsOverFlag = $this->resolveKakaoAlternativeSmsOverFlag($replacedKakaoContents, bySmsContent: true); | |
| } else { | |
| $kakaoSmsOverFlag = $this->resolveKakaoAlternativeSmsOverFlag($replacedKakaoContents, bySmsContent: false); | |
| } | |
| } else { | |
| $replacedKakaoContents = ''; | |
| $logData = $this->buildSendLogData($logData); | |
| // 발송 | |
| $message = $this->createSendMessage($contents); | |
| $transport = \App::load(SmsSender::class); | |
| if ($this->isAutoSend() || !$this->passwordCheckFl) { | |
| // LMS 제목 (설정된 자동발송 문구 제목 - LMS 발송 시에만 SmsSender 에서 사용, 미입력 시 [제목없음]) | |
| // 튜닝 상점 대비: 구버전 SmsSender(setSubject 미보유)에서 발송 중단 방지 | |
| if (method_exists($transport, 'setSubject')) { | |
| $transport->setSubject($this->resolveSendSubject($item, $recipientKey)); | |
| } | |
| $transport->setSmsType($item['smsType']); | |
| $transport->setReceiver($receiverData); | |
| return $transport->send(); | |
| } | |
| /** | |
| * 치환 완료된 내용으로 SMS 발송 메시지를 생성한다. | |
| * | |
| * @param string $contents 치환 완료된 발송 내용 | |
| * @return AbstractMessage 90byte 이하이면 SmsMessage, 초과 시 전송 방법에 따른 메시지 | |
| */ | |
| protected function createSendMessage(string $contents): AbstractMessage | |
| { | |
| $smsOverFlag = $this->findAutoSendConfigService->getSmsSendOverFlag($this->smsAutoConfig); | |
| if ($this->isPresentAutoSend()) { | |
| $smsOverFlag = SmsAutoSendOverType::LMS; | |
| } | |
| $message = new \Component\Sms\SmsMessage($contents); | |
| if ($message->exceedSmsLength()) { | |
| $message = match ($smsOverFlag) { | |
| SmsAutoSendOverType::LMS => new \Component\Sms\LmsMessage($contents), | |
| SmsAutoSendOverType::DIVISION => new \Component\Sms\DivisionSmsMessage($contents), | |
| default => new \Component\Sms\SmsMessage($contents), | |
| }; | |
| } | |
| return $message; | |
| } | |
| /** | |
| * LMS 발송 시 사용할 제목을 결정한다. | |
| * | |
| * @param array $item 조회된 SMS 템플릿. 등록된 제목은 messageTitle key 에 담긴다 | |
| * @param string $recipientKey 수신대상 ('member', 'admin', 'provider', 'recipient') | |
| * @return string 등록된 제목. 선물하기 자동알림이면서 치환코드를 제외한 제목이 비어 있으면 기본 제목 | |
| */ | |
| protected function resolveSendSubject(array $item, string $recipientKey): string | |
| { | |
| $messageTitle = $item['messageTitle'] ?? ''; | |
| if ($this->isPresentAutoSend()) { | |
| // 실발송 제목은 SmsSender 가 치환코드를 제거한 뒤 공란을 판정하므로 같은 기준으로 봐야 | |
| // 치환코드만 등록된 제목이 '[제목없음]' 으로 발송되는 것을 막을 수 있다 | |
| $titleWithoutReplaceCode = trim(preg_replace('/#?\{[^}]*\}/u', '', (string) $messageTitle)); | |
| if ($titleWithoutReplaceCode === '') { | |
| return $this->getPresentDefaultSubject($recipientKey); | |
| } | |
| } | |
| return $messageTitle; | |
| } | |
| /** | |
| * 선물하기 자동알림의 LMS 기본 제목을 반환한다. | |
| * | |
| * 선물하기 템플릿에는 제목이 등록돼 있지 않아 LMS 로 발송하면 수신자에게 '[제목없음]' 으로 보인다. | |
| * | |
| * @param string $recipientKey 수신대상 ('member', 'admin', 'provider', 'recipient') | |
| * @return string 기본 제목. 정의된 제목이 없으면 빈 문자열 | |
| */ | |
| protected function getPresentDefaultSubject(string $recipientKey): string | |
| { | |
| $defaultSubjects = [ | |
| Code::PRESENT => ['common' => '선물 발송 완료', 'recipient' => '선물이 도착했어요'], | |
| Code::PRESENT_REMAIN_THREE => ['common' => '선물 수락 기한 3일 전', 'recipient' => '선물 수락 기한 3일 전'], | |
| Code::PRESENT_REMAIN_ONE => ['common' => '선물 수락 기한 1일 전', 'recipient' => '선물 수락 기한 1일 전'], | |
| Code::PRESENT_ACCEPT => ['common' => '선물 수락 완료', 'recipient' => '선물 수락 완료'], | |
| Code::PRESENT_REJECT => ['common' => '선물 거절 및 환불 접수', 'recipient' => '선물 거절 및 환불 접수'], | |
| Code::PRESENT_CHANGE_DEST => ['common' => '선물 배송지 변경', 'recipient' => '배송지 변경 완료'], | |
| Code::PRESENT_INVOICE_CODE => ['recipient' => '선물 배송 시작'], | |
| Code::PRESENT_REJECT_FAIL => ['common' => '선물 수락기간 만료', 'recipient' => '선물 수락기간 만료'], | |
| ]; | |
| $subjectKey = $recipientKey === 'recipient' ? 'recipient' : 'common'; | |
| return $defaultSubjects[$this->smsAutoCodeType][$subjectKey] ?? ''; | |
| } | |
| /** | |
| * 알림톡 발송 실패 시 대체발송할 SMS 의 90byte 초과 전송 방법을 결정한다. | |
| * | |
| * @param string|null $contents 대체발송할 내용. 치환 결과가 비어 있으면 null 이 넘어온다 | |
| * @param bool $bySmsContent 대체발송 내용을 SMS 템플릿에서 가져온 경우 true, 알림톡 내용을 그대로 쓰면 false | |
| * @return string SmsAutoSendOverType 값 또는 'none' | |
| */ | |
| protected function resolveKakaoAlternativeSmsOverFlag(?string $contents, bool $bySmsContent): string | |
| { | |
| if (!$this->findAutoSendConfigService->isOverSmsLength($contents)) { | |
| return SmsAutoSendOverType::LIMIT->value; | |
| } | |
| if ($this->isPresentAutoSend()) { | |
| return SmsAutoSendOverType::LMS->value; | |
| } | |
| if ($bySmsContent) { | |
| return $this->findAutoSendConfigService->getSmsSendOverFlag($this->smsAutoConfig)->value; | |
| } | |
| return $this->findAutoSendConfigService->convertCrmToSendOverFlag($this->kakaoCrmConfig); | |
| } | |
| /** | |
| * 선물확인 URL 이 절단되거나 분할되면 수신자가 선물을 확인할 수 없어, 선물하기는 상점의 90byte 초과 전송 방법 설정과 무관하게 LMS 로 발송한다. | |
| */ | |
| protected function isPresentAutoSend(): bool | |
| { | |
| return $this->smsType === SmsAutoCode::PRESENT; | |
| } | |
| /** | |
| * 카카오 비즈엠 버튼 데이터 생성 | |
| * 페이지링크에 송장번호 치환코드가 있는 경우 치환 처리 | |