redirect 방식의 결과처리

windowType 파라미터에서 redirect를 선택한 경우의 결과 처리 방법을 안내합니다.

Deprecated

이 문서는 더 이상 관리되지 않습니다.

PortOne 개발자센터를 이용해주세요.

결제창 형태가 새로운 페이지로 리디렉션되어 결제가 진행되는 대부분의 모바일 환경에서의 결제요청애 대한 응답을 처리하는 부분입니다.

redirect 방식은 새로운 페이지에서 결제를 진행된 뒤, 결제 요청 시에 전달하신 redirectUrl로 리디렉션됩니다.

function requestPayment() {
  // 리디렉션의 경우 결제 프로세스 완료 시(성공, 실패 모두) redirectUrl로 이동되므로
  // 함수의 반환 값을 이용해 결과처리할 수 없습니다.
  PortOne.requestPayment({
    /* 객체 생략 */
    redirectUrl: "https://리디렉션될-URL",
  });
}

함수의 반환 값을 사용할 수 없는 대신, redirectUrl 주소로 결과 값을 Query string(쿼리 스트링) 형태로 전달받을 수 있습니다.

Query string 이란?

URL 뒤에 데이터를 전달하는 가장 단순한 방법으로 주로 GET 요청과 함께 데이터를 전송할 때 사용합니다.

아래는 쿼리 스트링 형태로 리디렉션되는 URL의 예시입니다.

https://my-redirect-url.com/payments/redirect?
  tx_id=결제건을_특정하는_포트원_번호&
  payment_id=가맹점_고유_주문번호
파라미터명설명비고

tx_id

포트원 결제거래번호

공통

payment_id

가맹점 주문번호

공통

code

오류코드

실패 시

message

오류메세지

실패 시

결제 프로세스 완료의 의미

결제 프로세스 완료는 아래와 같은 경우를 모두 포함합니다.

  1. 결제 성공 (결제 상태: paid)

  2. 결제 실패 (결제 상태: failed)

  3. PG 모듈 설정이 올바르지 않아, 결제 창이 열리지 않음

  4. 사용자가 임의로 X 버튼이나 취소 버튼을 눌러 결제를 종료

  5. 카드 정보 불일치, 한도 초과, 잔액 부족 등의 사유로 결제가 중단

  6. 가상계좌 발급 완료(결제 상태: ready)

결제검증 API를 이용해 결제완료 처리하기

리디렉션 URL에 해당하는 페이지에서 쿼리 스트링으로 결과 정보를 받은 뒤, 3. 결제검증 API 구현하기에서 구현한 API를 호출하여 결제가 올바르게 완료되었는지 확인해주세요.

결제는 사용자의 페이지에서 이루어지기 때문에 금액이 위변조될 가능성이 있으니 위 단계를 꼭 진행해주세요.

전체적인 결제결과 처리(가상계좌 입금 확인 등)는 웹훅(Webhook)을 연동하여 수신되는 데이터를 기준으로 처리하셔야 결제결과 누락없이 결과처리를 완료하실 수 있습니다.

결제금액의 위변조 검증 이유

결제 요청은 클라이언트 환경에서 이루어지기 때문에 클라이언트 스크립트를 조작해 금액을 위 변조하여 결제를 요청할 수 있습니다. 따라서 결제완료 후 처음 요청했던 금액과 실제로 결제된 금액을 반드시 비교해야 합니다.

예를 들어, 가격이 100,000원인 상품을 결제할 때 amount: 100000으로 결제요청을 하게 되는데, 공격자가 스크립트를 조작하여 해당 속성을 실제 금액보다 낮은 값으로 변조할 수 있습니다. 클라이언트에서의 스크립트 조작은 원천적으로 막을 수 없기 때문에 결제 후 서버에서 결제금액의 위변조 여부를 반드시 검증해야 합니다.

Last updated