결제 결과 수신 단계에서는 error도 받을 수 있습니다. SDK 에러는 화면 안내와 재시도 흐름으로 연결하고, 서버·PG 에러는 에러 코드표에서 원인을 확인합니다.
부트페이 에러 결과 UI 사용
결제 요청 시 extra.display_error_result: true를 함께 보내면, 오류가 발생했을 때 부트페이가 제공하는 결과 UI에서 에러 내용을 보여줍니다.
UI 표시와 별개로, 주문 상태는 서버에서 receipt_id 기준으로 검증하거나 웹훅을 받아 확정해야 합니다.
전체 에러 코드
이 페이지는 SDK에서 자주 발생하는 에러만 다룹니다. PG사·서버 에러를 포함한 전체 코드는 에러 코드표를 참고합니다.
에러 처리 코드
import { Bootpay } from '@bootpay/client-js'
try {
await Bootpay.requestPayment({
client_key: '[ Client Key ]',
price: 50000,
order_name: '나이키 운동화 외 2건',
order_id: 'order_' + Date.now(),
pg: 'nicepay',
method: 'card',
extra: {
separately_confirmed: true,
open_type: 'redirect',
redirect_url: 'https://yoursite.com/order/result',
// true면 오류 발생 시 부트페이 제공 결과 UI에 에러 내용을 표시합니다.
display_error_result: true
}
})
} catch (data) {
// cancel: 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
// error: 결제 요청·승인 과정에서 오류가 발생한 경우. error_code, pg_error_code, message를 로그로 남깁니다.
if (data.event === 'cancel') {
keepOrderUnpaid(data)
return
}
if (data.event === 'error') {
logPaymentError({
error_code: data.error_code,
pg_error_code: data.pg_error_code,
message: data.message
})
showPaymentError(data.message)
}
}javascript<script src="https://js.bootpay.co.kr/bootpay-5.3.0.min.js"></script>
<script>
Bootpay.requestPayment({
client_key: '[ Client Key ]',
price: 50000,
order_name: '나이키 운동화 외 2건',
order_id: 'order_' + Date.now(),
pg: 'nicepay',
method: 'card',
extra: {
separately_confirmed: true,
open_type: 'redirect',
redirect_url: 'https://yoursite.com/order/result',
// true면 오류 발생 시 부트페이 제공 결과 UI에 에러 내용을 표시합니다.
display_error_result: true
}
}).catch(function (data) {
// cancel: 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
// error: 결제 요청·승인 과정에서 오류가 발생한 경우. error_code, pg_error_code, message를 로그로 남깁니다.
if (data.event === 'cancel') {
keepOrderUnpaid(data)
return
}
if (data.event === 'error') {
logPaymentError(data.error_code, data.pg_error_code, data.message)
showPaymentError(data.message)
}
})
</script>htmlBootpay.requestPayment(viewController: self, payload: payload)
.onIssued { data in
// issued: 가상계좌 발급. 주문은 입금 대기 상태로 저장해야 합니다.
self.savePendingVbankOrder(data)
}
.onConfirm { data in
// confirm: 서버 승인 방식을 쓰면 receipt_id를 백엔드로 보내야 합니다.
self.requestServerApproval(data)
return false
}
.onDone { data in
// done: 서버 승인(separately_confirmed: true)에서는 호출되지 않습니다.
// 클라이언트 자동 승인 방식에서만 결제 완료 후 호출됩니다.
}
.onCancel { data in
// cancel: 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
self.keepOrderUnpaid(data)
}
.onError { data in
// error: 결제 요청·승인 과정에서 오류가 발생한 경우.
// error_code, pg_error_code, message를 로그로 남기고 재시도 흐름을 보여줍니다.
self.logPaymentError(data)
self.showPaymentError(data)
}
.onClose {
// close: 결제창이 닫힌 경우. UI 상태만 정리하고 주문 확정 처리하면 안 됩니다.
self.resetPaymentUi()
}swiftBootpay.init(supportFragmentManager)
.setPayload(payload)
.setEventListener(object : BootpayEventListener {
override fun onConfirm(data: String): Boolean {
requestServerApproval(data)
return false
}
override fun onCancel(data: String) {
// 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
keepOrderUnpaid(data)
}
override fun onError(data: String) {
// 결제 요청·승인 과정에서 오류가 발생한 경우.
// data에서 error_code, pg_error_code, message를 확인해 로그로 남깁니다.
logPaymentError(data)
showPaymentError(data)
}
override fun onClose() {
// close: 결제창이 닫힌 경우. UI 상태만 정리하고 주문 확정 처리하면 안 됩니다.
Bootpay.removePaymentWindow()
}
override fun onIssued(data: String) {
// issued: 가상계좌 발급. 주문은 입금 대기 상태로 저장해야 합니다.
savePendingVbankOrder(data)
}
override fun onDone(data: String) {
// done: 서버 승인(separately_confirmed: true)에서는 호출되지 않습니다.
// 클라이언트 자동 승인 방식에서만 결제 완료 후 호출됩니다.
}
})
.requestPayment()kotlinBootpay().requestPayment(
context: context,
payload: payload,
onConfirm: (data) {
// confirm: 서버 승인 방식을 쓰면 receipt_id를 백엔드로 보내야 합니다.
requestServerApproval(data);
return false;
},
onIssued: (data) {
// issued: 가상계좌 발급. 주문은 입금 대기 상태로 저장해야 합니다.
savePendingVbankOrder(data);
},
onDone: (data) {
// done: 서버 승인(separatelyConfirmed: true)에서는 호출되지 않습니다.
// 클라이언트 자동 승인 방식에서만 결제 완료 후 호출됩니다.
},
onCancel: (data) {
// cancel: 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
keepOrderUnpaid(data);
},
onError: (data) {
// error: 결제 요청·승인 과정에서 오류가 발생한 경우.
// data에서 error_code, pg_error_code, message를 확인해 로그로 남깁니다.
logPaymentError(data);
showPaymentError(data);
},
onClose: () => resetPaymentUi(),
);dartBootpay().requestPayment(
context: context,
payload: payload,
onIssued: (data) {
// issued: 가상계좌 발급. 주문은 입금 대기 상태로 저장해야 합니다.
savePendingVbankOrder(data);
},
onDone: (data) {
// done: 서버 승인(separatelyConfirmed: true)에서는 호출되지 않습니다.
// 클라이언트 자동 승인 방식에서만 결제 완료 후 호출됩니다.
},
onCancel: (data) {
// cancel: Flutter Web에서 결제창이 닫히면 주문은 미결제 상태로 유지해야 합니다.
keepOrderUnpaid(data);
},
onError: (data) {
// error: 결제 요청·승인 과정에서 오류가 발생한 경우.
// redirect_url로 넘어온 error 결과도 서버에서 같은 기준으로 처리해야 합니다.
logPaymentError(data);
showPaymentError(data);
},
onClose: () => resetPaymentUi(),
);dart<Bootpay
ref={bootpay}
client_key={'[ Client Key ]'}
onConfirm={(data) => {
// confirm: 서버 승인 방식을 쓰면 receipt_id를 백엔드로 보내야 합니다.
requestServerApproval(data)
return false
}}
onIssued={(data) => {
// issued: 가상계좌 발급. 주문은 입금 대기 상태로 저장해야 합니다.
savePendingVbankOrder(data)
}}
onDone={(data) => {
// done: 서버 승인(separately_confirmed: true)에서는 호출되지 않습니다.
// 클라이언트 자동 승인 방식에서만 결제 완료 후 호출됩니다.
}}
onCancel={(data) => {
// cancel: 사용자가 결제창을 닫은 경우. 주문은 미결제 상태로 유지해야 합니다.
keepOrderUnpaid(data)
}}
onError={(data) => {
// error: 결제 요청·승인 과정에서 오류가 발생한 경우.
// error_code, pg_error_code, message를 로그로 남기고 재시도 흐름을 보여줍니다.
logPaymentError(data)
showPaymentError(data.message)
}}
onClose={() => {
// close: 결제창이 닫힌 경우. UI 상태만 정리하고 주문 확정 처리하면 안 됩니다.
resetPaymentUi()
}}
/>jsx에러 응답 예시
{
"event": "error",
"error_code": "RC_RESOURCE_NOT_CONFIG",
"message": "결제 요청하신 결제수단이 사용 허가가 되지 않았거나 부트페이 관리자에서 설정되지 않아 결제 진행을 할 수 없습니다."
}json에러 응답 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| event | String | 이벤트 유형 (error, cancel) |
| error_code | String | 부트페이 에러 코드 |
| pg_error_code | String | PG사 에러 코드 |
| message | String | 에러 상세 메시지 |
에러 발생 시나리오
1결제 요청 실패
결제 요청 시 PG사가 요구하는 필수 파라미터가 누락된 경우 발생합니다.
| 에러 코드 | 설명 |
|---|---|
RC_REQUEST_FAILED |
결제 요청 실패 |
RC_REQUEST_ERROR |
결제 요청 오류 |
2승인 전 오류
결제 승인 직전에 PG사 측 사유로 승인이 불가능한 경우 발생합니다. 카드사 점검, PG사 내부 점검, 휴대폰 소액결제 서비스 미가입 등이 해당됩니다.
| 에러 코드 | 설명 |
|---|---|
RC_CONFIRM_READY_SERVER_ERROR |
승인 준비 서버 오류 |
3승인 중 오류
결제 승인 도중 PG사 측에서 승인이 거부되는 경우입니다. 한도 초과, 도난·분실 카드, 미등록 카드, 계좌이체 점검 시간, 휴대폰결제 점검 시간 등이 해당됩니다.
| 에러 코드 | 설명 |
|---|---|
RC_CONFIRM_FAILED |
결제 승인 실패 |



