에러 케이스별 가이드

결제 연동 시 자주 발생하는 에러와 해결 방법을 안내합니다.

빠른 해결을 위한 체크리스트

대부분의 에러는 아래 항목을 점검하면 해결됩니다.

  • 개발/운영 환경 설정이 올바른가? (env, mxId, passKey)
  • callHash 생성 시 파라미터 순서와 값이 정확한가?
  • 취소/환불 시 원거래 정보(mxIssueNo, mxIssueDate)를 그대로 사용했는가?

9010 Hash 데이터 검증 실패

가장 빈번하게 발생하는 오류입니다. 해시(Hash) 생성 시 파라미터가 잘못 구성된 경우 발생합니다.

원인
  • 해시 생성에 사용하는 파라미터 순서가 잘못됨
  • passKey 값이 환경(개발/운영)과 맞지 않음
  • passKey에 공백이 포함됨
  • passKey에 대소문자 구분 없이 모두 소문자나 대문자로 변환됨

해결 방법

  • 파라미터 순서가 연동 가이드와 일치하는지 확인
  • passKey가 환경(개발/운영)에 맞는지 확인
  • passKey에 공백이 포함되지 않았는지 확인
  • passKey가 대소문자 변환 없이 원본 그대로인지 확인

Hash 생성 순서 참고

기능Hash 생성 순서
일반 결제창 화면 호출, 일반/정기 결제 취소 API, 환불요청 API, 가상계좌 발급 요청mxId + mxIssueNo + mxIssueDate + amount + passKey
일반 승인 요청, 에스크로 배송 등록 요청mxId + mxIssueNo + passKey
빌키 등록 화면 호출mxId + custNo + passKey
정기 결제 승인 요청mxId + mxIssueNo + amount + passKey
빌키 삭제 요청mxId + billKey + passKey

이외의 기능들은 연동 가이드에서 확인해주세요.

환경별 passKey 주의

passKey는 개발/운영 환경별로 각각 다른 값이 발급됩니다. 혼용하지 않도록 주의하세요.

디버깅 방법

해시 생성이 의심된다면 개발 환경에서 raw 문자열을 출력해 확인하세요.


9713 중복 주문번호

동일한 주문번호로 결제가 두 번 이상 요청됐을 때 발생합니다.

원인
  • 같은 mxIssueNo로 재요청
  • 사용자가 페이지를 새로고침하여 요청이 중복 전송됨
  • 결제 실패 후 동일한 주문번호로 재시도

해결 방법

  • 주문번호를 요청마다 고유하게 생성
javascriptgenerateOrderNo.js
// 방법 1: 타임스탬프 사용 const mxIssueNo = `ORDER_${Date.now()}`; // 방법 2: UUID 사용 (권장) import { v4 as uuidv4 } from 'uuid'; const mxIssueNo = `ORDER_${uuidv4()}`;

9013 결제 시간 초과

결제 요청 또는 인증 후 일정 시간이 초과되면 발생합니다.

원인
  • 결제 요청 후 30분이 경과
  • 인증 완료 후 24시간 이내에 승인 요청을 보내지 않음

해결 방법

  • 결제창 표시 후 30분 이내에 결제 진행
  • 인증 완료 후 24시간 이내에 승인 요청
  • 유효시간 초과 시 새로운 결제 시작 안내
단계유효시간초과 시 조치
결제창 표시30분결제창 재호출
인증 완료 후 승인24시간새로운 결제 시작

P502 원거래 없음

결제 취소 또는 환불 요청 시, 원래 승인 거래를 찾지 못할 때 발생합니다.

원인

취소/환불 요청에 사용한 mxId, mxIssueNo, mxIssueDate 중 하나라도 승인 시 사용한 값과 다른 경우입니다.

가장 흔한 실수: mxIssueDate를 승인 당시의 시간이 아닌 취소 요청 시점의 시간으로 전송

해결 방법

  • 취소/환불 요청 시 승인 시점의 mxId, mxIssueNo, mxIssueDate 값 사용
필수
조건부 필수
key타입필수설명
mxIdString가맹점 ID (승인 시 사용한 값)
mxIssueNoString주문번호 (승인 시 사용한 값)
mxIssueDateString주문일시 (승인 시 사용한 값, 취소 요청 시점 X)
javaCancelService.java
// 잘못된 예 - 취소 요청 시점의 시간 사용 String mxIssueDate = LocalDateTime.now().format(formatter); // X // 올바른 예 - 원거래의 주문일시 사용 Payment originalPayment = paymentRepository.findByOrderId(orderId); String mxIssueDate = originalPayment.getMxIssueDate(); // O

9003 기초정보 확인 중 오류

가맹점 정보 또는 환경 설정이 잘못 구성된 경우 발생합니다.

원인
  • SDK 호출 시 env 파라미터 누락 (운영 환경에서 개발 서버로 요청됨)
  • 개발용 MID를 운영 환경에서 사용 (또는 그 반대)
  • 개발용/운영용 passKey 혼용
  • 해당 MID에 요청한 결제수단(LPAY, 가상계좌 등)이 등록되지 않음

해결 방법

  • 환경 변수 env가 올바르게 설정되어 있는지 확인
  • MID와 passKey가 동일한 환경(개발/운영)에 속하는지 확인
  • 요청한 결제수단이 해당 MID에 등록되어 있는지 확인
javascriptpayment-config.js
// 환경별 설정 분리 예시 const config = { development: { env: 'develop', mxId: 'testcorp', passKey: process.env.DEV_PASS_KEY, endpoint: 'https://dev.firstpay.co.kr' }, production: { env: 'product', mxId: 'yourcorp', passKey: process.env.PROD_PASS_KEY, endpoint: 'https://api.firstpay.co.kr' } }; const currentConfig = config[process.env.NODE_ENV];
결제수단 미등록

사용하고자 하는 결제수단이 노출되지 않은 경우 영업팀에 문의해주시기 바랍니다.


P798 가맹점 정보 오류

존재하지 않는 가맹점 정보로 요청하거나, 서비스가 중지된 MID를 사용할 때 발생합니다.

원인
  • MID가 유효하지 않음
  • MID가 서비스 중지 상태
  • 가맹점 계약이 만료됨

해결 방법

  • MID가 유효한지 영업 담당자에게 확인
  • 가맹점 계약 상태 확인

9704 거래 내역 없음

가상계좌 강제 입금 처리 시, 해당 거래 건을 DB에서 찾지 못할 때 발생합니다.

원인
  • 요청한 거래 정보가 승인 거래 정보와 불일치
  • 운영 환경에서 승인된 거래를 개발 환경 DB에서 조회
  • 개발 환경에서 승인된 거래를 운영 환경 DB에서 조회

해결 방법

  • 개발 환경에서 테스트한 거래 건인지 확인
  • 요청 거래 정보가 승인 당시와 동일한지 확인
  • 환경(개발/운영)이 일치하는지 확인

8873 / 8373 미등록 가맹점 / 하위사업자몰 오류

원인

MID의 서브몰 심사가 완료되지 않았거나, 특정 카드사에 등록되지 않은 경우 발생합니다.

해결 방법

  • 다른 카드사로 결제 시도
  • 여러 카드사에서 동일 오류 발생 시 영업팀에 문의
간편결제도 동일

카카오페이, 토스페이, 네이버페이, 페이코 등 간편결제에서 카드로 결제할 때도 동일하게 적용됩니다.


P520 빌키 중복 등록

정기결제용 빌키(Bill Key) 등록 시, 이미 등록된 회원번호와 중복될 때 발생합니다.

원인

동일한 custNo(회원번호)로 빌키가 이미 등록되어 있습니다. 회원번호당 하나의 카드만 등록할 수 있습니다.

해결 방법

  • 기존 빌키 삭제 후 재등록 (권장)
  • 또는 서로 다른 custNo 사용
권장 방법

빌키 삭제 API를 이용하여 기존 빌키를 삭제한 후, 빌키 등록 API로 새로운 카드를 등록해주세요.


추가 도움말

위 내용으로 해결되지 않는 경우 아래 리소스를 참고해주세요.

리소스설명
에러 코드모든 에러 코드와 상세 설명
문의하기eComm솔루션팀 기술 지원 요청