const [selected, setSelected] = useState<number | null>(null);
const [selectedIdx, setSelectedIdx] = useState<number | null>(null);
const { data: orderInfo } = useQuery({
queryKey: ["productOrder", selectedIdx],
enabled: open && selectedIdx !== null,
queryFn: () =>
getAdjustmentOrder({
productInfoIdx: selectedIdx!,
}),
});
<Script
src="https://pay.nicepay.co.kr/v1/js/"
strategy="afterInteractive"
onLoad={() => setScriptLoaded(true)}
/>
if (!scriptLoaded || !window.AUTHNICE) {
alert("결제 모듈을 불러오는 중입니다.");
return;
}
returnUrl : 결제 완료 후 이동할 URL => 백엔드로 전달할 api 요청window.AUTHNICE.requestPay({
clientId,
method: "card",
orderId: orderInfo.orderId,
amount: orderInfo.amount,
goodsName: `캐시 ${formatPrice(selected)} 충전`,
returnUrl: `${process.env.NEXT_PUBLIC_API_BASE_URL}/adjustment?redirectBaseUrl=${encodeURIComponent(redirectBaseUrl)}`,
fnError: (result) => {
const params = new URLSearchParams({
code: result.errorCode,
message: result.errorMsg,
});
window.location.href = `/billing/payment/fail?${params.toString()}`;
},
});
const redirectBaseUrl = window.location.origin;
returnUrl =
`${API_BASE_URL}/adjustment?redirectBaseUrl=${encodeURIComponent(
redirectBaseUrl
)}`;
fnError: (result) => {
const params = new URLSearchParams({
code: result.errorCode,
message: result.errorMsg,
});
window.location.href =
`/billing/payment/fail?${params.toString()}`;
}
결제창
↓
성공 URL 이동
↓
프론트엔드
↓
백엔드 승인 API 호출
결제창
↓
returnUrl 호출
↓
백엔드
↓
결제 검증 및 승인
↓
성공/실패 페이지 이동