결제창 형태가 새로운 페이지로 리디렉션되어 결제가 진행되는 대부분의 모바일 환경에서의 결제요청애 대한 응답을 처리하는 부분입니다.
redirect 방식은 새로운 페이지에서 결제를 진행된 뒤, 결제 요청 시에 전달하신 redirectUrl로 리디렉션됩니다.
functionrequestPayment(){ // 리디렉션의 경우 결제 프로세스 완료 시(성공, 실패 모두) redirectUrl로 이동되므로 // 함수의 반환 값을 이용해 결과처리할 수 없습니다.PortOne.requestPayment({/* 객체 생략 */redirectUrl:"https://리디렉션될-URL",});}
함수의 반환 값을 사용할 수 없는 대신, redirectUrl 주소로 결과 값을 Query string(쿼리 스트링) 형태로 전달받을 수 있습니다.
Query string 이란?
URL 뒤에 데이터를 전달하는 가장 단순한 방법으로 주로 GET 요청과 함께 데이터를 전송할 때 사용합니다.
리디렉션 URL에 해당하는 페이지에서 쿼리 스트링으로 결과 정보를 받은 뒤, 3. 결제검증 API 구현하기에서 구현한 API를 호출하여 결제가 올바르게 완료되었는지 확인해주세요.
결제는 사용자의 페이지에서 이루어지기 때문에 금액이 위변조될 가능성이 있으니 위 단계를 꼭 진행해주세요.
전체적인 결제결과 처리(가상계좌 입금 확인 등)는 웹훅(Webhook)을 연동하여 수신되는 데이터를 기준으로 처리하셔야 결제결과 누락없이 결과처리를 완료하실 수 있습니다.
결제금액의 위변조 검증 이유
결제 요청은 클라이언트 환경에서 이루어지기 때문에 클라이언트 스크립트를 조작해 금액을 위 변조하여 결제를 요청할 수 있습니다. 따라서 결제완료 후 처음 요청했던 금액과 실제로 결제된 금액을 반드시 비교해야 합니다.
예를 들어, 가격이 100,000원인 상품을 결제할 때 amount: 100000으로 결제요청을 하게 되는데, 공격자가 스크립트를 조작하여 해당 속성을 실제 금액보다 낮은 값으로 변조할 수 있습니다. 클라이언트에서의 스크립트 조작은 원천적으로 막을 수 없기 때문에 결제 후 서버에서 결제금액의 위변조 여부를 반드시 검증해야 합니다.