이 문서는 결제 요청·승인·취소 과정에서 발생하는 PG 연동 에러 코드를 분류별로 정리해요.
API 호출이 실패하면 응답의 error_code 를 먼저 보고, 이 표에서 원인과 대처법을 찾아요.
고객·상품·주문·구독 커머스 API 에러 코드는 커머스 오류코드 에서 봐요.
자주 만나는 에러 TOP 6
연동 중 가장 많이 마주치는 에러와 해결법이에요.
1APP_AT_AUTHORIZE_HEADER_BLANK Authorization 헤더 누락/오류
흔한 원인: Basic Auth 헤더가 없거나 형식이 올바르지 않아요.
// 올바른 예 — SDK 사용 시 자동 처리
Bootpay.setConfiguration({
client_key: 'YOUR_CLIENT_KEY',
secret_key: 'YOUR_SECRET_KEY'
})
const receipt = await Bootpay.receiptPayment(receiptId)
// 직접 호출 시 — Basic Auth 헤더 추가
const BASIC_AUTH = 'Basic ' + btoa(`${CLIENT_KEY}:${SECRET_KEY}`)javascript2RC_PRICE_MISMATCH PG 승인 금액과 부트페이 기록 금액 불일치
흔한 원인: 가맹점 DB와의 비교에서 나는 에러가 아니에요. 부트페이가 PG(토스·라이트페이)에 결제 건을 조회했을 때 PG가 알려준 승인 금액과 부트페이에 기록된 결제 금액이 다를 때 발생해요. 가맹점 코드로 고칠 수 있는 상황이 아니니 receipt_id와 함께 관리자에 문의해요.
승인 요청 금액이 최초 요청 금액과 다른 경우는 별도 코드로 내려와요.
| 상황 | 코드 |
|---|---|
| 승인 직전 검증에서 금액이 다름 | RC_CONFIRM_READY_PRICE_INVALID |
| 승인 완료 후 검증에서 금액이 다름 | RC_CONFIRM_PRICE_INVALID |
가맹점 주문 금액과의 대조는 부트페이가 대신해 주지 않아요. 서버에서 직접 비교해요.
// 서버 DB에서 계산한 금액과 결제 조회 결과를 비교
const receipt = await Bootpay.receiptPayment(receiptId)
const order = await db.orders.findByPk(orderId)
if (receipt.price !== order.total_amount) {
// 금액 불일치 → 결제 취소 또는 주문 보류
}javascript응답의 price 는 원금이 아니라 남은 금액(원금 − 누적 취소금액) 이에요. 부분취소가 한 번이라도 있었다면 price !== total_amount 가 정상이고, 원금은 price + cancelled_price 로 복원해요.
3APP_SK_NOT_MATCHED Secret KEY 불일치
흔한 원인: 테스트 키와 운영 키를 헷갈렸거나 .env 에 잘못된 키를 복사한 경우예요.
- 관리자 > 개발자 설정 > API 연동키 (결제) 에서 Private Key 를 다시 복사해요.
- 테스트·운영 환경의 키가 다르면
BOOTPAY_SANDBOX설정을 확인해요.
4RC_ALREADY_CANCELLED 이미 취소 처리됨
흔한 원인: 웹훅과 프론트엔드에서 동시에 취소 요청을 보내거나 취소 전에 결제 상태를 확인하지 않는 경우예요.
// 올바른 예 — 취소 전 결제 상태와 가맹점 DB 상태 확인
const receipt = await Bootpay.receiptPayment(receiptId)
const order = await db.orders.findByPk(orderId)
if (receipt.status === 20 || order.status === 'refunded') {
return res.json({ error: '이미 취소된 결제입니다' })
}
// 취소 진행...javascript5APP_CLIENT_KEY_NOT_FOUND / APP_KEY_CHAIN_EXPIRED 연동키 오류
흔한 원인: Client Key 로 연동키를 찾지 못했거나(APP_CLIENT_KEY_NOT_FOUND), Client Key 와 Secret Key 의 짝이 맞지 않거나(APP_SK_NOT_MATCHED), 발급받은 연동키의 유효기간이 지난 경우(APP_KEY_CHAIN_EXPIRED)예요.
- 관리자 > 개발자 설정 > API 연동키 에서 Client Key·Private Key 와 만료일을 함께 확인해요.
- Client Key 와 Secret Key 는 반드시 같은 연동키에서 발급된 짝으로 보내야 해요.
6RC_NOT_FOUND 영수증 정보 없음
흔한 원인: receipt_id 오타, 다른 프로젝트의 결제 건 조회, 테스트·운영 환경 혼동 중 하나예요.
에러 응답 형식
HTTP/1.1 400 Bad Request
Content-Type: application/json{
"error_code": "RC_ALREADY_CANCELLED",
"message": "요청하신 결제는 이미 취소처리가 되었습니다."
}json| 필드 | 타입 | 설명 |
|---|---|---|
| error_code | String | 에러 코드 텍스트 |
| message | String | 에러 메시지 (한국어) |
| payload | Object | 추가 데이터 (에러에 따라 포함, 없으면 생략) |
| pg_error_code | String | PG사 에러 코드 (결제 관련 에러에서만 포함) |
이 문서는 결제 API에서 확인해야 하는 텍스트형 에러 코드를 기준으로 정리해요. 응답의 error_code를 그대로 검색하면 원인과 대처 방법을 찾을 수 있어요.
2xx 라고 해서 항상 정상 응답은 아니에요. 아래 두 코드는 2xx 상태 코드와 함께 에러 응답 본문(error_code 포함) 으로 내려와요.
| HTTP | error_code | 의미 |
|---|---|---|
| 201 | RC_CONFIRM_ALREADY_COMPLETE |
이미 승인이 끝난 건에 대한 재승인 요청(승인 직후 10초 이내). 성공으로 간주하고 결제 조회로 최종 상태를 확인해요 |
| 202 | RC_CONFIRM_PENDING |
승인 처리가 지연 중이에요. 결과는 웹훅 또는 결제 조회로 확인해요 |
응답 본문에 error_code 가 있는지로 분기하고, 위 두 코드는 실패로 처리하지 않아요.
표의 메시지 컬럼은 코드의 의미를 풀어 쓴 설명문이지, 응답으로 내려오는 문자열 원문이 아니에요. 사용자 화면에 그대로 옮기거나 문자열 비교로 분기하지 말고 error_code 로 분기해요.
메시지가 서버에 정의되지 않은 코드는 message 가 Translation missing: ko.error.code.XXXX 형태로 내려올 수 있어요. 이때도 error_code 는 정상적으로 내려오니 그 값을 기준으로 처리해요.
인증 관련 에러 {#인증-관련-에러}
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
APP_KEY_CHAIN_NOT_FOUND |
Basic Auth 헤더에서 Client Key 또는 Secret Key 를 읽지 못했다 | Authorization: Basic {base64(client_key:secret_key)} 로 두 값이 모두 들어갔는지 확인해요 |
APP_CLIENT_KEY_NOT_FOUND |
Client Key 로 연동키를 찾지 못했다 | 관리자 > 개발자 설정 > API 연동키 에서 Client Key 를 다시 복사해요 |
APP_SK_NOT_MATCHED |
Client Key 와 짝이 맞는 Secret Key 가 아니다 | 같은 연동키에서 발급된 Client Key·Private Key 쌍인지 확인해요 |
APP_KEY_CHAIN_EXPIRED |
연동키의 유효기간이 지났다 | 관리자에서 연동키 만료일을 확인하고 새 키를 발급받아요 |
APP_KEY_NOT_FOUND |
Application ID 를 찾지 못했다 | 레거시 Application ID(Bearer 토큰) 경로에서만 발생해요. 현행 Basic Auth 로 전환하거나 Application ID 를 확인해요 |
APP_KEY_PLATFORM_NOT_MATCH |
요청한 Platform Type 과 SDK Platform Type 이 일치하지 않는다 | Client Key 의 플랫폼 타입(Web/Android/iOS)을 확인해요 |
APP_KEY_NOT_REST |
요청한 Client Key가 REST API 키가 아니다 | REST API용 Client Key 를 사용해요 |
APP_FIREWALL_BLOCKED |
접근이 허가된 IP 가 아니다 | 관리자 > 개발자 설정 > 보안 정책 에서 IP 보안 설정을 확인해요 |
APP_AT_AUTHORIZE_TYPE_INVALID |
Authorization 헤더가 Basic 도 Bearer 도 아니다 |
Authorization: Basic {base64} 형식인지 확인해요 |
APP_AT_AUTHORIZE_HEADER_BLANK |
Authorization 헤더가 비어 있다 | Authorization: Basic {base64(client_key:secret_key)} 형식으로 헤더를 추가해요 |
API_SCOPE_INVALID |
사용 중인 연동키에 이 API 의 Scope 가 설정되지 않았다 | 관리자 > 개발자 설정 > API 연동키 에서 해당 Scope 를 추가해요 |
API_ROLE_NOT_SUPPORT |
요청한 API 에 대응하는 Scope 정의를 찾지 못했다 | API 경로를 확인하고, 계속 발생하면 관리자에 문의해요 |
APP_API_SCOPE_NOT_MATCHED |
연동키를 만들거나 수정할 때 지정한 Scope 값이 올바르지 않다 | 관리자에서 연동키 Scope 를 다시 설정해요. API 호출 시 권한 부족은 API_SCOPE_INVALID 로 내려와요 |
APP_LEAVED |
삭제된 프로젝트이거나 탈퇴한 가맹점이다 | 프로젝트 상태를 확인해요 |
PROVIDER_NOT_ALLOW |
이미 탈퇴했거나 결제가 허용된 가맹점이 아니다 | 관리자에 문의해요 |
API_ONLY_SELLER |
판매점 계정만 사용할 수 있는 API 다 | 판매점 계정의 연동키로 호출해요 |
ONLY_INTERNAL_SERVER |
부트페이 내부용 API다. 외부에서는 사용할 수 없다 | 외부에서 호출 가능한 API 엔드포인트를 사용해요 |
SESSION_RESULT_BLANK |
세션 정보가 비어 있다 | 다시 로그인하거나 API 인증 정보를 확인해요 |
SERVICE_WALLET_REQUIRED |
서비스 이용료 결제 등록이 필요하다 | 관리자 > 이용요금 > 결제수단 관리 에서 지갑을 추가해요 |
REST_API_ERROR |
REST API 처리 중 오류가 발생했다 | 요청 파라미터를 확인하고 재시도해요 |
공통 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
PROCESS_DUPLICATED |
이미 처리된 요청이다 (중복 요청) | 중복 요청인지 확인해요 |
CURRENCY_DATA_INVALIDATE |
부트페이 내부 환율 데이터 검증에 실패했다 (500) | 요청 값과 무관한 서버 측 오류예요. 잠시 후 재시도하고 계속되면 관리자에 문의해요 |
결제 관련 에러
결제 요청, 승인, 취소 과정에서 발생하는 에러예요.
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
RC_NOT_FOUND |
영수증 정보를 찾지 못했다 | receipt_id 를 확인해요 |
RC_PG_NOT_FOUND |
PG 정보를 찾지 못했다 | PG 설정을 확인해요 |
RC_PM_NOT_FOUND |
결제수단 정보를 찾지 못했다 | 결제수단 설정을 확인해요 |
RC_NAME_BLANK |
상품명을 입력한다 | name 파라미터를 입력해요 |
RC_PRICE_LEAST_LT |
최소 결제금액 미만이다 (KRW 100원 미만, USD 0.01 미만) | 100원 자체는 허용돼요. extra.minimum_price_limit: false 로 이 검증을 끌 수 있어요 |
RC_O_ID_BLANK |
order_id 값을 입력한다 | order_id 파라미터를 입력해요. 빌링키 발급에서는 subscription_id, 본인인증에서는 authentication_id 를 안내하는 메시지로 바뀌어요 |
RC_UUID_BLANK |
UUID 값이 비어있다 | UUID 를 확인해요 |
RC_SK_BLANK |
SK 값이 비어있다 | Secret Key 를 확인해요 |
RC_ITEM_NAME_BLANK |
세부 상품명이 비어 있다 | 상품명을 입력해요 |
RC_ITEM_QTY_INVALID |
세부 상품 구매 qty 가 0보다 커야 한다 | qty 를 1 이상으로 설정해요 |
RC_ITEM_ID_BLANK |
세부 상품 고유 ID 값이 비어있다 | item_id 를 입력해요 |
RC_ITEM_PRICE_INVALID |
세부 상품 금액이 0보다 작을 수 없다 | 가격을 확인해요 |
RC_ITEM_TOTAL_PRICE_INVALID |
세부 상품 총 구매합이 결제 요청 금액과 불일치한다 | 아이템 합계를 확인해요 |
RC_NOT_READY |
결제 시작 대기 상태가 아니다 | 결제를 다시 요청해요 |
RC_PG_NOT_SELECTED |
PG 가 선택되지 않았다 | PG 를 선택한다 |
RC_PM_NOT_SELECTED |
결제 수단이 선택되지 않았다 | 결제수단을 선택한다 |
RC_RESOURCE_NOT_CONFIG |
결제수단이 허가/설정되지 않았다 | 관리자에서 결제수단을 설정해요 |
RC_WINDOW_CLOSE |
선택한 PG 는 부트페이에서 구현되지 않았다 (현재 사용되지 않는 코드) | 실제로 발생하지 않아요. 결제창 닫힘은 RC_PROCESS_CANCELLED 로 내려와요 |
RC_REQUEST_ERROR |
결제 요청 중 오류가 발생했다 | 결제 정보를 확인 후 재시도해요 |
RC_REQUEST_FAILED |
PG 결제 요청 자체가 실패했다 | PG 응답 메시지와 pg_error_code 를 확인해요 |
RC_PROCESS_CANCELLED |
결제창이 닫혔다 | 사용자가 결제를 중단한 경우예요. 실제 메시지는 gateway 가 내려주는 "결제창이 닫혔습니다." 또는 PG 가 전달한 문구예요 |
RC_NOT_DOING |
결제 진행 상태가 아니다 | 이미 종료되었거나 시작되지 않은 결제예요. 결제를 다시 요청해요 |
RC_METHOD_INVALID |
PG 가 돌려준 결제수단을 부트페이가 해석하지 못했다 | 사용 중인 PG·결제수단 조합을 확인하고 관리자에 문의해요 |
RC_NOT_CONFIRM_READY |
결제 승인 대기 상태가 아니다 | 결제 상태를 확인해요 |
RC_CONFIRM_READY_SERVER_ERROR |
승인 대기 처리 중 서버 오류가 발생했다 | 결제 상태를 조회해 실제 처리 여부를 확인한 뒤 재시도해요 |
RC_CONFIRM_ONLY_REST_API |
REST API 로만 승인할 수 있는 결제다 | extra.confirm_only_rest_api: true 로 클라이언트 승인이 차단된 건이에요. 서버에서 승인 API 를 호출해요 |
RC_CONFIRM_ALREADY_COMPLETE |
이미 승인이 끝난 건에 대한 재승인 요청이다 (HTTP 201) | 승인 직후 10초 이내 재요청 시 발생해요. 성공으로 간주하고 결제 조회로 최종 상태를 확인해요 |
RC_CONFIRM_PENDING |
승인 처리가 지연 중이다 (HTTP 202) | 실패가 아니에요. 웹훅 또는 결제 조회로 결과를 확인해요 |
RC_CONFIRM_NOT_PERMIT |
Client Key가 결제 요청과 불일치한다 | 결제 요청에 사용한 Client Key가 승인 요청의 인증 키와 같은 프로젝트인지 확인해요 |
RC_CONFIRM_METHOD_NOT_FOUND |
결제 승인 함수가 구현되지 않았다 | 관리자에 문의해요 |
RC_CONFIRM_FAILED |
결제 승인에 실패했다 | 결제 정보를 확인 후 재시도해요 |
RC_ALREADY_CANCELLED |
이미 취소 처리된 결제이다 | 주문 상태를 확인해요 |
RC_NOT_ABLE_CANCEL |
결제 완료 상태가 아니라 취소할 수 없다 | 결제 상태를 확인해요 |
RC_CANCEL_ID_ALREADY_EXIST |
동일한 cancel_id 로 이미 취소 요청되었다 | cancel_id 를 확인해요 |
RC_PM_CANCEL_NOT_SUPPORT |
해당 PG 결제수단은 취소 API를 지원하지 않는다 | PG 취소 지원 여부를 확인해요 |
RC_PM_P_CANCEL_NOT_SUPPORT |
해당 PG 결제수단은 부분취소를 지원하지 않는다 | 전액취소를 진행해요 |
RC_CANCEL_SERVER_ERROR |
결제 취소 오류이다 | 재시도하거나 관리자에 문의해요 |
RC_CANCEL_METHOD_NOT_FOUND |
취소 구현이 되지 않은 PG 이다 | 관리자에 문의해요 |
RC_APP_NOT_FOUND |
결제에 저장된 프로젝트 정보를 찾을 수 없다 | 프로젝트 설정을 확인해요 |
RC_PROVIDER_NOT_FOUND |
결제에 저장된 가맹점 정보를 찾을 수 없다 | 가맹점 정보를 확인해요 |
RC_NOT_ALLOW |
해당 계정의 결제 정보가 아니다 | 인증 정보를 확인해요 |
RC_NOT_ISSUED |
가상계좌 입금 대기 상태가 아니다 | 가상계좌 상태를 확인해요 |
RC_PERMISSION_LOW |
결제에 대한 작업 진행 권한이 없다 | API 인증 권한을 확인해요 |
RC_WEBHOOK_STATUS_INVALID |
웹훅 재전송이 가능한 상태가 아니다 | 결제완료(1), 결제취소완료(20), 가상계좌발급완료(5), 본인인증완료(12) 상태에서만 재전송할 수 있어요 |
RC_CANCEL_PRICE_NOT_ZERO |
취소금액이 0보다 커야 한다 | cancel_price 를 확인해요 |
RC_CANCEL_PRICE_OVER |
취소 요청 금액이 취소 가능 잔액을 초과한다 | 실제 메시지에는 남은 금액과 요청 금액이 함께 들어가요. 부분취소 이후에는 원금이 아니라 잔액이 기준이에요 |
RC_CANCEL_TAX_FREE_OVER |
면세 취소 요청 금액이 취소 가능한 면세 잔액을 초과한다 | 실제 메시지에는 취소 가능 면세금액과 요청 금액이 함께 들어가요 |
RC_NOT_SUBSCRIBE |
정기결제 요청 정보가 아니다 | 빌링키 결제를 사용해요 |
RC_ONLY_REST_API |
REST API 로만 요청 가능한 결제수단이다 | REST API 로 요청해요 |
RC_USER_EMAIL_INVALID |
user 필드의 이메일 포맷이 잘못되었다 | 이메일 형식을 확인해요 |
RC_USER_PHONE_INVALID |
user 필드의 전화번호 포맷이 잘못되었다 | 전화번호 형식을 확인해요 |
RC_CONFIRM_READY_PRICE_INVALID |
최초 요청 금액과 승인 요청 금액이 다르다 (승인 직전 검증) | 승인 API 에 넘기는 price 값을 확인해요 |
RC_CONFIRM_PRICE_INVALID |
최초 요청 금액과 승인 완료 금액이 다르다 (승인 이후 검증) | 결제 상태가 -17(결제금액변조승인)로 전이돼요. 응답 payload 의 request_price(요청 금액)와 request_confirm_price(승인된 금액)를 비교하고 관리자에 문의해요 |
RC_REQUEST_OVER_ON_IP |
동일 IP 에서 여러 번 결제 요청할 수 없다 | 잠시 후 다시 시도한다 |
RC_USER_TOKEN_INVALID |
UserToken 값이 잘못되었거나 다른 프로젝트에서 발급된 값이다 | UserToken 을 다시 확인해요 |
RC_REDIRECT_URL_INVALID |
redirect 모드에서 redirect_url 이 필요하다 | redirect_url 을 입력해요 |
RC_REQUIRE_LEAST_PRICE |
PG 최소 결제 금액 미만이다 | 최소 금액 이상으로 결제한다 |
RC_TIMEOUT |
결제 유효시간이 지났다 | 다시 결제를 요청해요 |
RC_COMPLETED |
이미 결제 진행이 완료된 건이다 | 주문 상태를 확인해요 |
RC_CONFIRM_CRITICAL_FAILED |
복구 금액이 취소 금액을 초과하거나 0원 이하이다 | 금액을 확인해요 |
RC_CANCEL_CRITICAL_ERROR |
결제 취소 중 치명적 오류가 발생했다 | 관리자에 문의해요 |
RC_PROVIDER_PAYMENT_NOT_ALLOW |
서비스 이용료 미납으로 결제 진행 불가하다 | 관리자에 문의해요 |
RC_PROVIDER_NOT_ALLOW |
가맹점이 탈퇴/차단 상태이다 | 관리자에 문의해요 |
RC_PRICE_MISMATCH |
PG 조회 결과의 승인 금액과 부트페이 기록 금액이 일치하지 않는다 | 가맹점 DB 와의 비교가 아니에요. receipt_id 와 함께 관리자에 문의해요 |
RC_NOT_AUTH |
receipt_id 가 본인인증 건이 아니다 | 본인인증 조회 API 에 결제 receipt_id 를 넣지 않았는지 확인해요 |
RC_NOT_PAYMENT |
receipt_id 가 결제 건이 아니다 | 결제 조회 API 에 본인인증·빌링키 receipt_id 를 넣지 않았는지 확인해요 |
RC_WIDGET_BLANK |
위젯 정보가 필요하다 | 위젯에서 시작된 결제인지 확인해요 |
정기결제(빌링) 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
SUBSCRIBE_NEED_PG_METHOD |
정기결제 요청에는 pg 와 method 정보가 필수이다 | pg, method 파라미터를 추가해요 |
SUBSCRIBE_REQUEST_FAILED |
빌링키 발급 요청이 실패했다 | 결제 정보를 확인 후 재시도해요 |
SUBSCRIBE_PUBLISH_READY_FAILED |
빌링키 발급 승인 전 요청이 실패했다 | 결제 정보를 확인해요 |
SUBSCRIBE_PUBLISH_FAILED |
PG 의 빌링키 발급 처리가 실패했다 | PG 응답 메시지와 pg_error_code 를 확인하고 카드 정보를 다시 확인해요 |
SUBSCRIBE_PUBLISH_NOT_READY |
빌링키 발급 대기 상태가 아니다 | 빌링키 상태를 확인해요 |
SUBSCRIBE_PUBLISH_M_NOT_FOUND |
빌링키 발급 기능이 없는 PG 이다 | 다른 PG 를 사용해요 |
SUBSCRIBE_NOT_SUCCESS |
빌링키 발급이 완료된 건이 아니다 | 빌링키 상태를 확인해요 |
SUBSCRIBE_BK_NOT_FOUND |
빌링키 발급 내역을 찾지 못했다 | billing_key 를 확인해요 |
SUBSCRIBE_BK_EXPIRED |
빌링키 사용 유효기간이 지났다 | 새로운 빌링키를 발급받아요 |
SUBSCRIBE_CARD_NO_BLANK |
카드 번호를 입력한다 | card_no 파라미터를 입력해요 |
SUBSCRIBE_CARD_PW_BLANK |
카드 비밀번호 앞 2자리를 입력한다 | card_pw 파라미터를 입력해요 |
SUBSCRIBE_CARD_IDENTITY_BLANK |
생년월일 또는 사업자등록번호를 입력한다 | identity_no 파라미터를 입력해요 |
SUBSCRIBE_CARD_EX_YEAR_BLANK |
카드 만료 년도를 입력한다 | expire_year 를 입력해요 |
SUBSCRIBE_CARD_EX_MONTH_BLANK |
카드 만료 월을 입력한다 | expire_month 를 입력해요 |
SUBSCRIBE_ALREADY_PUBLISHED |
이미 발급된 빌링키이다 | 기존 빌링키를 사용해요 |
계좌자동이체 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
SUBSCRIBE_AT_BLANK_NOT_FOUND |
은행 코드/은행명이 올바르지 않다 | 지원하는 은행 코드를 확인해요 |
SUBSCRIBE_AT_USERNAME_BLANK |
은행 예금주명을 입력한다 | username 파라미터를 입력해요 |
SUBSCRIBE_AT_BANK_ACCOUNT_BLANK |
은행 계좌번호를 입력한다 | bank_account 파라미터를 입력해요 |
SUBSCRIBE_AT_IDENTITY_NO_BLANK |
생년월일 또는 사업자등록번호를 입력한다 | identity_no 를 입력해요. 이 코드는 SUBSCRIBE_AT_AUTH_TYPE_INVALID 와 같은 번호(2353)를 쓰기 때문에 응답의 error_code 는 SUBSCRIBE_AT_AUTH_TYPE_INVALID 로 내려와요 |
SUBSCRIBE_AT_PHONE_BLANK |
휴대폰 번호를 입력한다 | phone 파라미터를 입력해요 |
SUBSCRIBE_AT_BANK_CODE_BLANK |
은행코드가 올바르지 않거나 비어있다 | bank_code 를 확인해요 |
본인인증 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
AUTH_NEED_PG_METHOD |
본인인증 요청에는 pg 와 method 정보가 필수이다 | pg, method 파라미터를 추가해요 |
AUTH_REQUEST_FAILED |
본인인증 요청이 실패했다 | 결제 정보를 확인 후 재시도해요 |
AUTH_CONFIRM_READY_FAILED |
본인인증 승인 전 요청이 실패했다 | PG 응답 메시지와 pg_error_code 를 확인하고 인증을 다시 요청해요 |
AUTH_ALREADY_AUTHENTICATED |
이미 본인인증이 완료된 건이다 | 인증 상태를 확인해요 |
AUTH_NOT_READY |
본인인증 준비 상태가 아니다 | 인증을 다시 요청해요 |
AUTH_CONFIRM_FAILED |
본인인증 승인이 실패했다 | 재시도하거나 관리자에 문의해요 |
AUTH_NOT_FOUND |
본인인증 정보를 찾지 못했다 | receipt_id 를 확인해요 |
AUTH_NOT_CONFIRMED |
아직 승인되지 않은 본인인증이다 | 인증을 완료해요 |
AUTH_EXPIRED |
본인인증 확인 유효시간(30분)이 지났다 | 인증을 다시 요청해요 |
예약결제 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
SR_RESERVE_TIME_PAST |
예약 결제 시간이 과거이다 | 미래 시간으로 설정해요 |
SR_BK_RESERVE_OVER |
빌링키당 예약건이 10건을 초과했다 | 기존 예약을 취소한다 |
SR_ON_BLANK |
자동결제 예약 상품명을 입력한다 | order_name 을 입력해요 |
BS_NOT_FOUND |
예약결제 정보를 찾지 못했다 | 예약 ID 를 확인해요 |
BS_NOT_READY |
예약결제 대기 상태가 아니다 | 예약 상태를 확인해요 |
SR_EXIST |
동일 빌링키에 중복 order_id 가 있다 | 다른 order_id 를 사용해요 |
SR_PRICE_LT_100 |
예약 결제 금액은 100원 이상이어야 한다 | price 를 100원 이상으로 설정해요 |
SR_WEBHOOK_URL_BLANK |
웹훅 URL 을 입력하거나 관리자에서 등록한다 | webhook_url 을 설정해요 |
에스크로 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
RC_ESCROW_NOT_READY |
에스크로 대기 상태가 아니면 배송 시작 불가하다 | 에스크로 상태를 확인해요 |
RC_ESCROW_SHIPPING_START_FAILED |
배송시작 API 수행에 실패했다 | 재시도해요 |
RC_NOT_ESCROW |
에스크로 결제건이 아니다 | 에스크로 결제인지 확인해요 |
RC_TRACKING_NUMBER_BLANK |
운송장 번호를 입력한다 | tracking_number 를 입력해요 |
RC_DELIVERY_CORP_BLANK |
택배회사를 입력한다 | delivery_corp 를 입력해요 |
delivery_corp 에는 CJ대한통운, 한진, 롯데 처럼 택배사 목록의 한글 이름을 넣어요. 목록에 없는 값을 보내면 코드 오류가 나는 대신 기타(KCP ETC, 이니시스 9999)로 폴백돼요. 원하는 택배사로 전달되지 않으면 이름 표기를 먼저 확인해요.
현금영수증 관련 에러
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
RC_CASH_RECEIPT_FAILED |
현금영수증 발행에 실패했다 | 재시도하거나 관리자에 문의해요 |
RC_CASH_RECEIPT_METHOD_NOT_FOUND |
해당 PG 는 현금영수증 발행을 지원하지 않는다 | 다른 PG 를 사용해요 |
RC_CASH_RECEIPT_ALREADY_CANCELLED |
이미 취소 처리된 현금영수증이다 | 취소 상태를 확인해요 |
RC_NOT_CASH_RECEIPT |
현금영수증 처리건이 아니다 | receipt_id 를 확인해요 |
RC_CASH_RECEIPT_PUBLISHED |
현금영수증이 이미 발행되었다 | 기존 발행 내역을 확인해요 |
RC_CASH_RECEIPT_NEED_USERNAME |
구매자 명이 필요하다 | username 을 입력해요 |
RC_CASH_RECEIPT_NEED_IDENTITY_NO |
전화번호, 현금영수증 카드번호, 또는 사업자번호가 필요하다 | identity_no 를 입력해요 |
프론트엔드 에러 코드
| 코드 | 메시지 | 원인 |
|---|---|---|
RC_PROCESS_CANCELLED |
결제창이 닫혔다 | 사용자가 결제창을 닫거나 취소했어요. 결제창 닫힘은 모두 이 코드로 내려와요 |
RC_TIMEOUT |
결제 유효시간이 지났다 | 결제 시간 초과 |
서버 오류 코드
부트페이 서버 처리 중 발생하는 오류예요.
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
RC_CONFIRM_READY_SERVER_ERROR |
승인 대기 처리 중 서버 오류가 발생했다 | 결제 조회로 실제 처리 여부를 확인한 뒤 재시도해요 |
RC_CANCEL_SERVER_ERROR |
결제 취소 처리 중 오류가 발생했다 | 결제 상태를 조회해 취소 반영 여부를 확인하고 재시도해요 |
BS_BOOTPAY_SERVER_ERROR |
예약결제 실행 중 부트페이 서버 오류가 발생했다 | 예약 상태를 확인하고 관리자에 문의해요 |
코드표 (Enum)
PG사·결제수단·카드사·은행·통화 등 코드값은 별도 페이지에서 봐요.
