5. 결제정보 검증하기
안정적인 결제서비스를 제공할 수 있도록 결제결과를 검증합니다.
결제금액의 위변조 검증 이유
결제 요청은 클라이언트 환경에서 이루어지기 때문에 별도의 검증을 하지 않으면 클라이언트가 스크립트를 조작해 금액을 위 변조하여 결제를 요청할 수 있습니다. 따라서 결제하고자 하는 상품의 금액과 실제로 결제된 금액을 반드시 검증해야 합니다.
예를 들어 420,000원짜리 상품을 결제할 때에는
amount: 420000
으로 결제요청을 하게 되는데, 공격자가 스크립트를 조작하여 해당 속성을 실제 금액보다 낮은 값(예amount: 420
)으로 변조할 수 있습니다.클라이언트에서의 스크립트 조작은 원천적으로 막을 수 없는 기술적 특징이 있기 때문에 결제 전후로 서버에서 결제금액의 위변조 여부를 반드시 검증해야 합니다.
운영중인 서버에서 클라이언트로 부터 전달 받은 결제 결과 데이터를 바탕으로 결제금액 위변조 여부를 검증하고 필요시 데이터베이스에 저장합니다. 결제 정보를 검증하는 과정은 크게 아래와 같은 단계로 진행합니다.
- 백엔드 - 사전 검증
- 프론트엔드 - 결제 요청
- SDK
IMP.request_pay
호출
- SDK
- 백엔드 - 사후 검증
- 포트원 결제고유번호(imp_uid), 고객사 주문번호(merchant_uid)를 프론트엔드로부터 수신
- 결제 상세내역 조회를 위해 포트원 결제 단건 조회 API 요청
- 응답받은 내용을 바탕으로 실 결제 금액과 결제요청금액(고객사 자체 데이터베이스)을 비교