PaymentLifecycle
class PaymentLifecycle (View source)
결제 확정·환불·만료·취소 동기화의 상태 전이를 순수하게 계산하는 클래스.
DB도 PortOne도 건드리지 않으며, 저장할 절대값만 반환한다.
Methods
확정 결과를 계산한다. PortOne 결제 완료 + 금액 일치가 조건이다.
PortOne이 결제 완료라고 했는데 실결제액이 준비 금액과 다른지 판단한다.
PortOne 취소 상태를 로컬 레코드에 맞추는 결과를 계산한다(취소 동기화).
Details
array
complete(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)
확정 결과를 계산한다. PortOne 결제 완료 + 금액 일치가 조건이다.
bool
isAmountMismatch(Payment $payment, GatewayPayment $gatewayPayment)
PortOne이 결제 완료라고 했는데 실결제액이 준비 금액과 다른지 판단한다.
실결제액을 알 수 없으면(null) 불일치로 보지 않는다. 기록할 수 없는 금액으로 취소하지 않기 위해서다.
array
amountMismatch(GatewayPayment $gatewayPayment)
금액 불일치 자동 취소의 두 결과를 PortOne 취소 요청 전에 계산한다.
취소 성공이면 AMOUNT_MISMATCH_CANCELLED(실결제액 전액 취소), 실패면 AMOUNT_MISMATCH이다. 준비 금액(amount)과 paid_at은 바꾸지 않는다.
array|null
expire(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)
만료 확인 결과를 계산한다.
결제 완료 + 금액 일치면 PAID, 확인 시점에 결제되지 않은 결과(PAYMENT_NOT_FOUND, READY, FAILED — T-021 관측과 소유자 결정)면 EXPIRED, 그 밖에는 변경 없음(null)이다.
array|null
syncCancellation(Payment $payment, GatewayPayment $gatewayPayment)
PortOne 취소 상태를 로컬 레코드에 맞추는 결과를 계산한다(취소 동기화).
PAID·PARTIALLY_CANCELLED 레코드는 PortOne CANCELLED(취소 총액 = amount)면 CANCELLED, PARTIAL_CANCELLED(0 < 취소 총액 < amount, 기존 cancelled_amount 이상)면 PARTIALLY_CANCELLED가 된다. AMOUNT_MISMATCH 레코드는 PortOne CANCELLED(취소 총액 = paid_amount)면 AMOUNT_MISMATCH_CANCELLED가 된다. 그 밖의 조합(PortOne이 아직 PAID, 취소 총액 없음 등)은 변경 없음(null)이다.
array
refund(Payment $payment, int|null $amount)
환불 결과를 계산한다. 전액이면 CANCELLED, 일부면 PARTIALLY_CANCELLED이다.