작성자: 권지원

PG사 부분취소 정책 제한을 우회하기 위한 내부 정산 분리


1. 문제

보호자가 확정된 예약을 개인 사유로 취소하면, 결제 금액 중 위약금을 제외한 금액만 환불해야 했다.

기존 의도는 다음과 같았다.

보호자 결제 100,000원
→ 위약금 20,000원
→ PG 부분취소 80,000원
→ 시터에게 위약금 Settlement 20,000원 생성

하지만 실제 PG 호출에서 다음 오류가 발생했다.

502 Bad Gateway
pgCode=500503
pgMessage=간편결제 부분취소 제한 가맹점

부분취소가 실패하면서 보호자 환불도 실패하고, 위약금 정산 기록도 생성되지 않는 문제가 생겼다.


2. 원인

PortOne을 통해 연동한 KG 이니시스는 결제 수단과 가맹점 설정에 따라 부분취소가 제한될 수 있다.

애플리케이션 로직은 부분취소가 가능하다고 전제했지만, 실제 PG 정책은 모든 결제 수단에서 부분취소를 보장하지 않았다.

서비스 정책: 부분 환불 필요
PG 정책: 일부 결제 수단 또는 가맹점에서 부분취소 불가

외부 PG의 기능을 서비스 정책의 필수 전제로 두면, PG 제약 하나로 예약 취소 플로우 전체가 막히는 구조가 된다.


3. 해결 방법

PG 부분취소를 직접 호출하지 않고, 환불 금액과 위약금을 내부 정산 기록으로 분리했다.

변경 후 흐름은 다음과 같다.