작성
·
13
0
현재는 클라이언트에서 넘어온 amount를 검증하고 있는데 이는 조작 위험이 있지 않은지 궁금합니다.
예를 들어 1원만 결제하고 서버에는 10000원을 결제했다고 보내면 서버에서는 결제 승인 API를 호출하여 totalAmount를 확인하기 전까지는 알 수 없는걸까요?
결제 승인 API에서 반환되는 Paymet 객체에 totalAmount 필드가 있기는 하지만 결제를 승인하기 전에 toss 서버에서 실제 결제된 금액을 조회하는 방법이 따로 없는건지 궁금합니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김정환님.
질문하신 부분은 결제 시스템에서 중요한 요소입니다. 클라이언트에서 amount를 검증하는 것은 조작의 위험이 있으므로 결제 과정에서 서버를 신뢰할 수 있도록 여러 검증 단계를 거치는 것이 중요합니다.
결제 시스템에서는 일반적으로 다음과 같은 과정을 거쳐 amount를 검증합니다:
클라이언트 검증: 클라이언트는 기본적으로 사용자가 입력한 정보를 서버로 전송합니다. 이 정보는 사용자 조작이 가능하므로 항상 신뢰할 수 없습니다.
서버 검증: 서버에서는 클라이언트로부터 전송된 데이터를 신뢰하지 않고, 내부에서 저장하거나 관리하는 데이터와 비교하여 검증합니다.
3rd-party 검증: 결제를 처리하는 3rd-party(예: 토스)에서 결제 정보를 확인할 수 있는 API를 제공합니다. 이 API를 통해 결제가 실제로 이루어진 금액과 클라이언트에서 전달된 amount를 비교하여 조작 여부를 파악할 수 있습니다. 이때는 반환되는 Payment
객체의 totalAmount
필드와 같은 정보를 사용합니다.
토스와 같은 결제 대행사에서는 실제 결제된 금액을 확인하기 위해 결제 승인 후 세부 정보를 확인할 수 있는 API들을 제공합니다. 결제 승인 전에도 검증이 필요한 경우, 결제 준비 단계나 결제 세부사항 확인 API를 활용하여 보다 정확한 정보를 얻는 방법을 고려할 수 있습니다.
관련하여 유사 질문이 과거에 있었으니 참고하시기 바랍니다:
- 토스 결제 위젯 연동 API 키 비활성화 에러 관련
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.