개발자센터
V1
V2
릴리즈 노트 기술 블로그

6. 결제완료 처리하기

결제가 완료되면 사용자에게 결제 실패 유무 메세지를 작성하는 예제입니다.

Iframe 방식으로 진행되는 대부분의 PC환경 결제인 경우 결제응답은 callback 함수로 받아볼 수 있으며 고객사 서버에서 결제결과 처리가 최종적으로 완료되면 아래 예제처럼 결제 성공유무에 따른 분기를 통해 결과 메세지 처리를 진행 하실 수 있습니다.

IMP.request_pay(
  {/* 결제 요청 객체 */},
  async requestPayResponse => {
    const { success, error_msg } = requestPayResponse;
    if (!success) {
      alert(`결제에 실패하였습니다. 에러 내용: ${error_msg}`);
      return;
    }
    // 이전 단계에서 구현한 결제정보 사후 검증 API 호출
    const res = await axios({
      url: "/payments/complete",
      method: "post",
      headers: { "Content-Type": "application/json" }, 
      data: { imp_uid: "...", merchant_uid: "..." },
    });
    switch (res.status) {
      case: "vbankIssued":
        // 가상계좌 발급 시 로직
        break;
      case: "success":
        // 결제 성공 시 로직
        break;
    }
  }
);

새로운 페이지로 리디렉션되어 결제가 진행되는 대부분의 모바일환경에서의 결제는 m_redirect_url 파라미터로 설정하신 고객사 EndPoint URL 에서 최종 결제완료 메세지 처리를 진행해 주시면 됩니다.

error_msg, error_code 정의

결제 실패 시 응답으로 내려가는 해당 파라미터는 PG사에서 내려준 오류코드와 메세지를 2차 가공없이 그대로 내려드리고 있습니다.

인증결제 과정에서 다음과 같은 사용자 동작이 일어날 경우 [비정상 접근입니다.]와 같은 오류가 발생할 수 있습니다.

  1. PG사 결제창 페이지 내 새로고침하는 경우
  2. 결제 진행 중 뒤로가기 버튼으로 카드사 ACS창으로 이동한 후 추가로 뒤로가기 버튼 클릭하여 PG사 결제창으로 돌아오는 경우
  3. 카드사 ACS 창 내 새로고침하는 경우 (카드사별로 상이)

결제페이지에서 뒤로가기 또는 새로고침 등의 동작을 방지하면 위 오류를 줄일 수 있습니다.