class PaymentLifecycle (View source)

결제 확정·환불·만료·취소 동기화의 상태 전이를 순수하게 계산하는 클래스.

DB도 PortOne도 건드리지 않으며, 저장할 절대값만 반환한다.

Methods

array
complete(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)

확정 결과를 계산한다. PortOne 결제 완료 + 금액 일치가 조건이다.

bool
isAmountMismatch(Payment $payment, GatewayPayment $gatewayPayment)

PortOne이 결제 완료라고 했는데 실결제액이 준비 금액과 다른지 판단한다.

array
amountMismatch(GatewayPayment $gatewayPayment)

금액 불일치 자동 취소의 두 결과를 PortOne 취소 요청 전에 계산한다.

array|null
expire(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)

만료 확인 결과를 계산한다.

array|null
syncCancellation(Payment $payment, GatewayPayment $gatewayPayment)

PortOne 취소 상태를 로컬 레코드에 맞추는 결과를 계산한다(취소 동기화).

array
refund(Payment $payment, int|null $amount)

환불 결과를 계산한다. 전액이면 CANCELLED, 일부면 PARTIALLY_CANCELLED이다.

Details

array complete(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)

확정 결과를 계산한다. PortOne 결제 완료 + 금액 일치가 조건이다.

Parameters

Payment $payment

확정할 PENDING 또는 EXPIRED 결제 레코드

GatewayPayment $gatewayPayment

PortOne 조회 결과

Carbon $paidAt

paid_at에 기록할 시각

Return Value

array

저장할 확정 값

Exceptions

PaymentNotPaidException
AmountMismatchException

bool isAmountMismatch(Payment $payment, GatewayPayment $gatewayPayment)

PortOne이 결제 완료라고 했는데 실결제액이 준비 금액과 다른지 판단한다.

실결제액을 알 수 없으면(null) 불일치로 보지 않는다. 기록할 수 없는 금액으로 취소하지 않기 위해서다.

Parameters

Payment $payment

확인할 결제 레코드

GatewayPayment $gatewayPayment

PortOne 조회 결과

Return Value

bool

array amountMismatch(GatewayPayment $gatewayPayment)

금액 불일치 자동 취소의 두 결과를 PortOne 취소 요청 전에 계산한다.

취소 성공이면 AMOUNT_MISMATCH_CANCELLED(실결제액 전액 취소), 실패면 AMOUNT_MISMATCH이다. 준비 금액(amount)과 paid_at은 바꾸지 않는다.

Parameters

GatewayPayment $gatewayPayment

isAmountMismatch()가 true인 PortOne 조회 결과

Return Value

array

취소 성공·실패 때 저장할 값

array|null expire(Payment $payment, GatewayPayment $gatewayPayment, Carbon $paidAt)

만료 확인 결과를 계산한다.

결제 완료 + 금액 일치면 PAID, 확인 시점에 결제되지 않은 결과(PAYMENT_NOT_FOUND, READY, FAILED — T-021 관측과 소유자 결정)면 EXPIRED, 그 밖에는 변경 없음(null)이다.

Parameters

Payment $payment

확인할 PENDING 결제 레코드

GatewayPayment $gatewayPayment

만료 확인용 PortOne 조회 결과

Carbon $paidAt

PAID일 때 paid_at에 기록할 시각

Return Value

array|null

저장할 값, 변경이 없으면 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)이다.

Parameters

Payment $payment

확인할 결제 레코드

GatewayPayment $gatewayPayment

PortOne 조회 결과

Return Value

array|null

저장할 값, 변경이 없으면 null

array refund(Payment $payment, int|null $amount)

환불 결과를 계산한다. 전액이면 CANCELLED, 일부면 PARTIALLY_CANCELLED이다.

Parameters

Payment $payment

환불할 결제 레코드(PAID 또는 PARTIALLY_CANCELLED)

int|null $amount

환불 금액(원, null이면 전액)

Return Value

array

저장할 환불 값

Exceptions

InvalidPaymentStatusException
InvalidRefundAmountException