From 40a1ee95ce31f64ac453bb55bc0e1f78bc8b0ca4 Mon Sep 17 00:00:00 2001 From: HyeonJongKim Date: Tue, 21 Oct 2025 17:57:01 +0900 Subject: [PATCH] =?UTF-8?q?-=20=EB=A7=81=ED=81=AC=EA=B2=B0=EC=A0=9C=5F?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=EC=8A=B9=EC=9D=B8=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ension-link-pay-separate-action-mutaion.ts | 23 ++ ...nsion-link-pay-separate-detail-mutation.ts | 23 ++ .../model/link-pay/types.ts | 50 +++ .../additional-service/model/types.ts | 1 + .../link-payment-history-list.tsx | 3 +- .../additional-service/ui/list-item.tsx | 2 +- .../link-payment/link-payment-detail-page.tsx | 16 +- .../link-payment-separate-approval-fail.tsx | 24 +- .../link-payment-separate-approval-page.tsx | 372 ++++++++++-------- ...payment-separate-approval-success-page.tsx | 18 +- src/shared/api/api-url-additional-service.ts | 8 + 11 files changed, 355 insertions(+), 185 deletions(-) create mode 100644 src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-action-mutaion.ts create mode 100644 src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-detail-mutation.ts diff --git a/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-action-mutaion.ts b/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-action-mutaion.ts new file mode 100644 index 0000000..07cc597 --- /dev/null +++ b/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-action-mutaion.ts @@ -0,0 +1,23 @@ +import { resultify } from "@/shared/lib/resultify"; +import { ExtensionLInkPaySeparateActionParams, ExtensionLinkPaySeparateActionResponse } from "../../model/link-pay/types"; +import axios from "axios"; +import { API_URL_ADDITIONAL_SERVICE } from "@/shared/api/api-url-additional-service"; +import { useMutation, UseMutationOptions } from "@tanstack/react-query"; +import { CBDCAxiosError } from "@/shared/@types/error"; + +export const extensionLinkPaySeparateAction = (params: ExtensionLInkPaySeparateActionParams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionLinkPaymentSeparateAction(), params) + ); +}; + +export const useExtensionLinkPaySeparateAction = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionLInkPaySeparateActionParams) => extensionLinkPaySeparateAction(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-detail-mutation.ts b/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-detail-mutation.ts new file mode 100644 index 0000000..7f653c6 --- /dev/null +++ b/src/entities/additional-service/api/link-payment/use-extension-link-pay-separate-detail-mutation.ts @@ -0,0 +1,23 @@ +import { resultify } from "@/shared/lib/resultify"; +import { ExtensionLinkPaySeparateDetailParams, ExtensionLinkPaySeparateDetailResponse } from "../../model/link-pay/types"; +import axios from "axios"; +import { API_URL_ADDITIONAL_SERVICE } from "@/shared/api/api-url-additional-service"; +import { useMutation, UseMutationOptions } from "@tanstack/react-query"; +import { CBDCAxiosError } from "@/shared/@types/error"; + +export const extensionLinkPaySeparateDetail = (params: ExtensionLinkPaySeparateDetailParams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionLinkPaymentSeparateDetail(), params) + ); +}; + +export const useExtensionLinkPaySeparateDetail = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionLinkPaySeparateDetailParams) => extensionLinkPaySeparateDetail(params), + }); + + return { + ...mutation, + }; +}; \ No newline at end of file diff --git a/src/entities/additional-service/model/link-pay/types.ts b/src/entities/additional-service/model/link-pay/types.ts index 73f08d6..d6b2f34 100644 --- a/src/entities/additional-service/model/link-pay/types.ts +++ b/src/entities/additional-service/model/link-pay/types.ts @@ -64,6 +64,16 @@ export enum LinkContentType { ADDITIONAL = "ADDITIONAL" } +export enum LinkPaymentSeparateType { + MAIN = "MAIN", + SUB = "SUB" +} + +export enum LinkPaymentSeparateAction { + EXTEND = "EXTEND", + DEACTIVATE = "DEACTIVATE" +} + export interface LinkPaymentHistoryListItem { requestId?: string; cursorId?: string; @@ -300,4 +310,44 @@ export interface ExtensionLinkPayWaitDeleteParams extends ExtensionRequestParams export interface ExtensionLinkPayWaitDeleteRespone { status: boolean +} + +// 분리승인 상세 조회 Request +export interface ExtensionLinkPaySeparateDetailParams { + reqId: string; +} + +// 분리승인 상세 조회 Response Item +export interface ExtensionLinkPaySeparateDetailItem { + type: string; + moid: string; + amount: number; + paymentStatus: string; + paymentStatusName: string; + paymentLimitDate: string; + paymentLimitCount: number; + requestId: string; + subRequestId: string; +} + +// 분리승인 상세 조회 Response +export interface ExtensionLinkPaySeparateDetailResponse { + details: Array; +} + +export interface ExtensionLInkPaySeparateActionParams extends ExtensionRequestParams { + action: string; + reqId: string; + selectedItems: Array<{ + type: string; + subRequestId: string; + }>; + extendDate?: string; +} + +export interface ExtensionLinkPaySeparateActionResponse { + success : boolean; + totalCount: number; + successCount: number; + failCount: number; } \ No newline at end of file diff --git a/src/entities/additional-service/model/types.ts b/src/entities/additional-service/model/types.ts index 888f554..c6ee102 100644 --- a/src/entities/additional-service/model/types.ts +++ b/src/entities/additional-service/model/types.ts @@ -117,6 +117,7 @@ export interface DetailResponse { titleInfo?: TitleInfo //최상단 섹션 detailInfo?: DetailInfo // '상세 정보' 섹션 paymentInfo?: PaymentInfo // '결제 정보' 섹션 + detailExposure?: boolean // 분리승인 상세 노출 여부 } export interface DetailInfoSectionProps extends DetailResponse { diff --git a/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx b/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx index c21559b..09c3ec6 100644 --- a/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx +++ b/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx @@ -14,7 +14,8 @@ export const LinkPaymentHistoryList = ({ let date = ''; let list: LinkPaymentHistoryListItem[] = []; for (let i = 0; i < listItems.length; i++) { - // paymentDate format: "20211018140420" (YYYYMMDDHHmmss) + + // sendDate(발송일자) 기준 let sendDate = listItems[i]?.sendDate || ''; let itemDate = sendDate.substring(0, 8); if (i === 0) { diff --git a/src/entities/additional-service/ui/list-item.tsx b/src/entities/additional-service/ui/list-item.tsx index 9bc3b47..056a95a 100644 --- a/src/entities/additional-service/ui/list-item.tsx +++ b/src/entities/additional-service/ui/list-item.tsx @@ -395,7 +395,7 @@ export const ListItem = ({ ); } else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory) { - if (paymentStatus === "3" || paymentStatus === "4") { + if (paymentStatus === "0" || paymentStatus === "3" || paymentStatus === "4") { rs.push(
{getPaymentStatusText(paymentStatus)} diff --git a/src/pages/additional-service/link-payment/link-payment-detail-page.tsx b/src/pages/additional-service/link-payment/link-payment-detail-page.tsx index d776d36..e03b174 100644 --- a/src/pages/additional-service/link-payment/link-payment-detail-page.tsx +++ b/src/pages/additional-service/link-payment/link-payment-detail-page.tsx @@ -29,7 +29,7 @@ export const LinkPaymentDetailPage = () => { const [titleInfo, setTitleInfo] = useState(); const [detailInfo, setDetailInfo] = useState(); const [paymentInfo, setPaymentInfo] = useState(); - + const [detailExposure, setDetailExposure] = useState(false); const [showPayment, setShowPayment] = useState(false); useSetHeaderTitle('링크결제 상세'); @@ -54,10 +54,11 @@ export const LinkPaymentDetailPage = () => { setTitleInfo(rs.titleInfo) setDetailInfo(rs.detailInfo) setPaymentInfo(rs.paymentInfo) + setDetailExposure(rs.detailExposure ?? false) }) } - //제발송 API + //재발송 API const resendPayment = () => { let resendParam: ExtensionLinkPayHistoryResendParams = { mid: mid, @@ -107,7 +108,7 @@ export const LinkPaymentDetailPage = () => { const onClickToSeparateApproval = () => { navigate(PATHS.additionalService.linkPayment.separateApproval, { - state: { mid, tid } + state: { mid, requestId } }); }; @@ -154,19 +155,20 @@ export const LinkPaymentDetailPage = () => { detailInfo={detailInfo} >
- {/*
+
-
*/} -
+
+ {/*
-
+
*/} diff --git a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-fail.tsx b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-fail.tsx index edd3d5f..5139fd0 100644 --- a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-fail.tsx +++ b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-fail.tsx @@ -10,19 +10,27 @@ import { export interface LinkPaymentApplyFailPageProps { pageOn: boolean; setPageOn: (pageOn: boolean) => void; + resultMessage?: string; errorMessage?: string; + successCount?: number; + failCount?: number; + totalCount?: number; + onClose?: () => void; } export const LinkPaymentApplyFailPage = ({ pageOn, setPageOn, - errorMessage + resultMessage, + errorMessage, + onClose }: LinkPaymentApplyFailPageProps) => { - const { navigate } = useNavigate(); const onClickToClose = () => { setPageOn(false); - navigate(PATHS.additionalService.linkPayment.shippingHistory); + if (onClose) { + onClose(); + } }; return ( @@ -44,10 +52,14 @@ export const LinkPaymentApplyFailPage = ({ >

링크결제_분리승인 -
- 처리에 실패했습니다 -

+ + {resultMessage && ( +

+ {resultMessage} +

+ )} +

결과 : diff --git a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx index 41b8556..7574cda 100644 --- a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx +++ b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx @@ -1,5 +1,6 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useState, useCallback } from 'react'; import { PATHS } from '@/shared/constants/paths'; +import { useLocation } from 'react-router'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { HeaderType } from '@/entities/common/model/types'; import { @@ -12,46 +13,35 @@ import { ExtendedPeriodBottomSheet } from '@/entities/additional-service/ui/link import { LinkBreakBottomSheet } from '@/entities/additional-service/ui/link-payment/bottom-sheet/link-break-bottom-sheet'; import { LinkPaymentApplySuccessPage } from './link-payment-separate-approval-success-page'; import { LinkPaymentApplyFailPage } from './link-payment-separate-approval-fail'; - -interface SeparateApprovalItem { - tid: string; - merchantId: string; - amount: number; - status: string; - validityPeriod: string; - approvalCount: number; -} +import { useExtensionLinkPaySeparateAction } from '@/entities/additional-service/api/link-payment/use-extension-link-pay-separate-action-mutaion'; +import { useExtensionLinkPaySeparateDetail } from '@/entities/additional-service/api/link-payment/use-extension-link-pay-separate-detail-mutation'; +import { ExtensionLinkPaySeparateDetailItem, LinkPaymentSeparateAction, LinkPaymentSeparateType } from '@/entities/additional-service/model/link-pay/types'; +import { useStore } from '@/shared/model/store'; +import moment from 'moment'; export const LinkPaymentSeparateApprovalPage = () => { const { navigate } = useNavigate(); + const location = useLocation(); + const userMid = useStore.getState().UserStore.mid; + const { mid: stateMid, requestId } = location.state || {}; + const mid = stateMid || userMid; + + const [items, setItems] = useState([]); const [selectedItems, setSelectedItems] = useState([]); + const [extendPeriods, setExtendPeriods] = useState<{ [key: string]: string }>({}); const [extendedPeriodBottomSheetOn, setExtendedPeriodBottomSheetOn] = useState(false); const [linkBreakBottomSheetOn, setLinkBreakBottomSheetOn] = useState(false); const [successPageOn, setSuccessPageOn] = useState(false); const [failPageOn, setFailPageOn] = useState(false); const [resultMessage, setResultMessage] = useState(''); const [errorMessage, setErrorMessage] = useState(''); + const [successCount, setSuccessCount] = useState(0); + const [failCount, setFailCount] = useState(0); + const [totalCount, setTotalCount] = useState(0); - const [mainItem] = useState({ - tid: 'NLPDAR2025101315330', - merchantId: '100,000', - amount: 100000, - status: '활성화', - validityPeriod: '2025/10/13', - approvalCount: 0 - }); - - const [additionalItems] = useState([ - { - tid: '', - merchantId: '(NNN,NNN)', - amount: 0, - status: '(결제상태)', - validityPeriod: 'YYYY/MM/DD', - approvalCount: 0 - } - ]); + const { mutateAsync: callItems } = useExtensionLinkPaySeparateDetail(); + const { mutateAsync: linkPaySeparateAction } = useExtensionLinkPaySeparateAction(); useSetHeaderTitle('분리승인 상세'); useSetHeaderType(HeaderType.RightClose); @@ -60,30 +50,27 @@ export const LinkPaymentSeparateApprovalPage = () => { }); useSetFooterMode(false); - const handleCheckboxChange = (tid: string) => { + const handleCheckboxChange = (subRequestId: string) => { setSelectedItems(prev => { - if (prev.includes(tid)) { - return prev.filter(id => id !== tid); + if (prev.includes(subRequestId)) { + return prev.filter(id => id !== subRequestId); } else { - return [...prev, tid]; + return [...prev, subRequestId]; } }); }; - const handleMainCheckboxChange = () => { - const mainTid = mainItem.tid; - setSelectedItems(prev => { - if (prev.includes(mainTid)) { - return prev.filter(id => id !== mainTid); - } else { - return [...prev, mainTid]; - } - }); + const handleExtendPeriodChange = (itemId: string, days: string) => { + setExtendPeriods(prev => ({ + ...prev, + [itemId]: days + })); }; - const handleAdditionalCheckboxChange = (index: number) => { - const itemTid = `additional-${index}`; - handleCheckboxChange(itemTid); + // 기간연장 버튼 활성화 조건: 선택된 항목이 있고, 모든 선택된 항목의 연장기간이 설정됨 + const isExtendButtonEnabled = () => { + if (selectedItems.length === 0) return false; + return selectedItems.every(id => extendPeriods[id] && extendPeriods[id] !== ''); }; const onClickToValidityPeriod = () => { @@ -100,42 +87,134 @@ export const LinkPaymentSeparateApprovalPage = () => { // 바텀시트 닫기 setExtendedPeriodBottomSheetOn(false); - // 기간연장 API 호출 로직 - console.log('기간연장 실행', selectedItems); - // TODO: 실제 API 호출 - const apiCallSuccess = true; // 임시로 성공으로 설정 - - if (apiCallSuccess) { - setResultMessage('기간이 성공적으로 연장되었습니다'); - setSuccessPageOn(true); - } else { - setErrorMessage('기간 연장에 실패했습니다'); + // 선택된 항목이 없으면 리턴 + if (selectedItems.length === 0) { + setErrorMessage('선택된 항목이 없습니다.'); setFailPageOn(true); + return; } + + // 모든 선택된 항목들의 연장 기간이 설정되었는지 확인 + const allHaveExtendPeriod = selectedItems.every(id => extendPeriods[id]); + + if (!allHaveExtendPeriod) { + setErrorMessage('모든 선택된 항목의 연장 기간을 선택해주세요.'); + setFailPageOn(true); + return; + } + + // 첫 번째 선택된 항목의 연장 기간 사용 (모든 항목이 같은 기간으로 연장) + const firstSelectedId = selectedItems[0] as string; + const extendDays = extendPeriods[firstSelectedId] as string; + + // 연장 날짜 계산 (오늘 날짜 + 연장일수) + const extendDate = moment().add(parseInt(extendDays), 'days').format('YYYYMMDD'); + + // selectedItems를 API 형식으로 변환 + const selectedItemsData = selectedItems.map(itemId => { + const item = items.find(i => (i.subRequestId || `item-${items.indexOf(i)}`) === itemId); + return { + type: item?.type || '', + subRequestId: item?.subRequestId || itemId + }; + }); + + // 기간연장 API 호출 + linkPaySeparateAction({ + mid: mid, + action: LinkPaymentSeparateAction.EXTEND, + reqId: requestId, + selectedItems: selectedItemsData, + extendDate: extendDate + }).then((response) => { + setSuccessCount(response.successCount); + setFailCount(response.failCount); + setTotalCount(response.totalCount); + + if (response.success) { + setResultMessage(`전체요청 성공했습니다.`); + setSuccessPageOn(true); + } else { + setResultMessage(`유효기간 연장에 실패했습니다. 개별 상태를 확인해주세요.`); + setErrorMessage(''); + setFailPageOn(true); + } + }).catch((error) => { + console.error('기간연장 실패:', error); + setResultMessage('유효기간 연장에 실패했습니다.'); + setFailPageOn(true); + }); }; const handleLinkBreak = () => { // 바텀시트 닫기 setLinkBreakBottomSheetOn(false); - // 링크중단 API 호출 로직 - console.log('링크중단 실행', selectedItems); - // TODO: 실제 API 호출 - const apiCallSuccess = true; // 임시로 성공으로 설정 - - if (apiCallSuccess) { - setResultMessage('링크가 성공적으로 중단되었습니다'); - setSuccessPageOn(true); - } else { - setErrorMessage('링크 중단에 실패했습니다'); + // 선택된 항목이 없으면 리턴 + if (selectedItems.length === 0) { + setErrorMessage('선택된 항목이 없습니다.'); setFailPageOn(true); + return; } + + const selectedItemsData = selectedItems.map(itemId => { + const item = items.find(i => (i.subRequestId || `item-${items.indexOf(i)}`) === itemId); + return { + type: item?.type || '', + subRequestId: item?.subRequestId || itemId + }; + }); + + // 링크중단 API 호출 + linkPaySeparateAction({ + mid: mid, + action: LinkPaymentSeparateAction.DEACTIVATE, + reqId: requestId, + selectedItems: selectedItemsData + }).then((response) => { + setSuccessCount(response.successCount); + setFailCount(response.failCount); + setTotalCount(response.totalCount); + if (response.success) { + setResultMessage(`전체요청 성공했습니다.`); + setSuccessPageOn(true); + } else { + setResultMessage('링크중단 요청에 실패했습니다. 개별 상태를 확인해주세요.'); + setErrorMessage(''); + setFailPageOn(true); + } + }).catch((error) => { + console.error('링크중단 실패:', error); + setResultMessage('링크중단 요청에 실패했습니다.'); + setFailPageOn(true); + }); }; + // 데이터 새로고침 함수 + const refreshItems = useCallback(() => { + if (requestId) { + callItems({ reqId: requestId }).then((response) => { + console.log('Separate Detail Response:', response); + // type이 MAIN인 항목을 최상위로 정렬 + const sortedItems = [...(response.details || [])].sort((a, b) => { + if (a.type === LinkPaymentSeparateType.MAIN) return -1; + if (b.type === LinkPaymentSeparateType.MAIN) return 1; + return 0; + }); + setItems(sortedItems); + // 선택 항목과 연장 기간 초기화 + setSelectedItems([]); + setExtendPeriods({}); + }).catch((error) => { + console.error('Failed to load separate detail:', error); + }); + } + }, [requestId, callItems]); + useEffect(() => { // API 호출하여 데이터 로드 - // const { mid, tid } = location.state || {}; - }, []); + refreshItems(); + }, [refreshItems]); return ( <> @@ -149,107 +228,63 @@ export const LinkPaymentSeparateApprovalPage = () => {

- {/* Main Item */} -
-
- - [MAIN] - {mainItem.tid} -
-
-
    -
  • - • 거래금액: - {mainItem.merchantId} -
  • -
  • - • 결제상태: - {mainItem.status} -
  • -
  • - • 유효기간: - {mainItem.validityPeriod} -
  • -
  • - • 연장횟수: - {mainItem.approvalCount} -
  • -
-
-
-
- - -
-
-
- - {/* Additional Items */} - {additionalItems.map((item, index) => ( -
- handleAdditionalCheckboxChange(index)} - className="card-checkbox" - /> -
- (유형) - 주문번호 -
-
-
    -
  • - • 거래금액: - {item.merchantId} -
  • -
  • - • 결제상태: - {item.status} -
  • -
  • - • 유효기간: - {item.validityPeriod} -
  • -
  • - • 연장횟수: - (N) -
  • -
-
-
-
- - + {items.map((item, index) => { + const itemId = item.subRequestId || `item-${index}`; + return ( +
+
+ handleCheckboxChange(itemId)} + className="card-checkbox" + /> + [{item.type}] + {item.moid} +
+
+
    +
  • + • 거래금액: + {item.amount.toLocaleString()} +
  • +
  • + • 결제상태: + {item.paymentStatusName} +
  • +
  • + • 유효기간: + {item.paymentLimitDate} +
  • +
  • + • 연장횟수: + {item.paymentLimitCount} +
  • +
+
+
+
+ + +
-
- ))} + ); + })}
@@ -257,11 +292,13 @@ export const LinkPaymentSeparateApprovalPage = () => {
@@ -285,12 +322,15 @@ export const LinkPaymentSeparateApprovalPage = () => { pageOn={successPageOn} setPageOn={setSuccessPageOn} resultMessage={resultMessage} + onClose={refreshItems} /> ); diff --git a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-success-page.tsx b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-success-page.tsx index 4af1e32..d5d5711 100644 --- a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-success-page.tsx +++ b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-success-page.tsx @@ -11,18 +11,27 @@ export interface LinkPaymentApplySuccessPageProps { pageOn: boolean; setPageOn: (pageOn: boolean) => void; resultMessage?: string; + successCount?: number; + failCount?: number; + totalCount?: number; + onClose?: () => void; } export const LinkPaymentApplySuccessPage = ({ pageOn, setPageOn, - resultMessage + resultMessage, + successCount, + failCount, + totalCount, + onClose }: LinkPaymentApplySuccessPageProps) => { - const { navigate } = useNavigate(); const onClickToClose = () => { setPageOn(false); - navigate(PATHS.additionalService.linkPayment.shippingHistory); + if (onClose) { + onClose(); + } }; return ( @@ -45,10 +54,11 @@ export const LinkPaymentApplySuccessPage = ({

링크결제_분리승인

+

결과 : - {resultMessage || '성공적으로 처리되었습니다'} + {resultMessage || '전체요청 성공했습니다.'}

diff --git a/src/shared/api/api-url-additional-service.ts b/src/shared/api/api-url-additional-service.ts index df14c56..dae70e8 100644 --- a/src/shared/api/api-url-additional-service.ts +++ b/src/shared/api/api-url-additional-service.ts @@ -69,6 +69,14 @@ export const API_URL_ADDITIONAL_SERVICE = { // POST: 링크결제 - 발송대기 삭제 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/linkpay/wait/delete`; }, + extensionLinkPaymentSeparateDetail: () => { + // POST: 링크결제 - 분리승인 상세 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/linkpay/separate/detail` + }, + extensionLinkPaymentSeparateAction: () => { + // POST: 링크결제 - 분리승인 액션 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/linkpay/separate/action` + }, extensionSmsResend: () => { // POST: SMS 결제 통보 > SMS 재발송 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/sms/resend`;