Skip to content

Fix: 부분 취소는 거부하고, 환불 금액 및 포인트를 결제 기준으로 파생하도록 수정 - #415

Merged
soyeon1806 merged 1 commit into
devfrom
fix/payment-full-cancel-only
Jul 14, 2026
Merged

Fix: 부분 취소는 거부하고, 환불 금액 및 포인트를 결제 기준으로 파생하도록 수정#415
soyeon1806 merged 1 commit into
devfrom
fix/payment-full-cancel-only

Conversation

@soyeon1806

@soyeon1806 soyeon1806 commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

✅ PR 설명

결제 취소 시 클라이언트가 보낸 cancelAmount를 결제 금액과 대조하지 않고 그대로 사용해, 부분 취소 요청 시 데이터가 사방으로 어긋나는 문제를 수정했습니다.
예를 들어 30,000원 결제에 cancelAmount=1,000(카탈로그의 유효 가격)을 보내면 Toss는 1,000원만 취소, 포인트는 100P만 차감(지급됐던 건 4,000P), 환불 로그는 -4,000P로 기록, 결제 상태는 통째로 CANCELED가 되어 Toss, 포인트, 로그, 상태 네 곳이 서로 다른 값을 갖게 됐습니다.
이에 취소는 오직 전액 취소로만 고정하여 부분 취소는 명시적으로 거부하며, 환불 금액과 차감 포인트를 클라이언트 값이 아닌 결제 정보에서 파생하도록 변경했습니다.

🏗 작업 내용

  • /api/payments/cancel에서 cancelAmount가 결제 전액과 다르면 PARTIAL_CANCEL_NOT_SUPPORTED(400)로 거부, cancelAmount=null이면 전액 취소로 간주하도록 수정
  • 환불 금액, 차감 포인트, Toss 취소 요청, 환불 로그를 모두 payment.getAmount()(및 카탈로그 파생값) 기준으로 통일
  • ErrorCode.PARTIAL_CANCEL_NOT_SUPPORTED(400) 추가
  • 취소 엔드포인트 Swagger에 400(부분 취소 미지원), 403 명시
  • 테스트 케이스 2개 추가

📸 테스트 결과 (선택)

  • PaymentServiceTest 22/22

🔗 관련 이슈 (선택)

관련된 Issue가 있다면 #이슈번호 형식으로 작성해주세요.

🚨 참고 사항 (선택)

  • 정상 클라이언트(전액을 보내거나 cancelAmount를 생략)는 기존과 동일하게 동작합니다.
  • 결제 금액과 다른 부분 금액을 보내던 요청만 400을 받습니다.
  • 이전 PR에서 처리된 cancelAmount=null 시 NPE(500)는 이번에 전액 취소 정상 동작으로 흡수되었습니다.

@soyeon1806 soyeon1806 self-assigned this Jul 14, 2026
@soyeon1806
soyeon1806 merged commit c33ade8 into dev Jul 14, 2026
2 checks passed
@soyeon1806
soyeon1806 deleted the fix/payment-full-cancel-only branch July 14, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant