그냥 코드같은거 없이 몇 줄 적어야 겠다...
일단 결제 시스템을 연동하면서 몇가지 문제점이 나중에서야 보였다.
한 번의 주문에 한 번의 결제가 이루어지는데 Orders에 Payment를 1:N 관계로 설정해두었다.
사실 이거야 연관 관계를 다시 1:1 로 설정해두고 기존에 orderId로 Payment를 찾는걸 그냥
Payment findByOrderId
Optional<Payment> findByOrderId
로 찾으면 되니까
여러개를 구매했을 때 하나의 상품만 취소가 가능한가? <- 사실 이 문제가 조금 더 크긴 했다.
만약 A판매자에게서 100원 가격의 상품을 1개, B판매자에게서 200원 가격의 상품을 1개 구매한다고 가정했을 때
Payment의 amonut는 300으로 설정되어 결제과정으로 넘어간다.
그런데 결제를 하고 나서 200원만 취소하려 한다면?
물론 결제 취소를 구현할 때 checksum을 통해 취소하고자 하는 금액을 넣는다면 부분 환불이 가능하지만 취소 데이터에 imp_uid나 merchant_uid 를 파라미터로 같이 받게 된다.
그럼 이것도 같이 넣어서 취소하면 되는거 아니야?
라고 생각할 수 있는데 내가 이해했을 때 결제가 완료되고 포트원 서버에서 넘어오는 imp_uid와 merchant_uid의 값이 하나씩 오기 때문에 두 개의 상품에서도 같은 같은 결제로 묶인 상품들은 개별적인 취소가 가능한가 라는 생각이 들었다.
그럼 금액이 다르면 금액 구분해서 그것만 취소하는건?
이것도 생각을 해봤는데 금액이 똑같은 상품이라면? 더 복잡한것 같으니 결국 당장에 내가 생각할 수 있는 부분 환불은 어렵다는 결론이었다....
(환불 자체는 쉽겠지만... 해당 금액과 매칭되는 상품을 찾아 상태를 관리하기가 힘들겠다는 생각)
어떡하지.....