generated from pricelees/issue-pr-template
[#56] 예약 & 결제 프로세스 및 패키지 구조 재정의 #57
@ -2,15 +2,10 @@ package com.sangdol.roomescape.payment.business
|
||||
|
||||
import com.sangdol.common.persistence.TransactionExecutionUtil
|
||||
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode
|
||||
import com.sangdol.roomescape.payment.dto.PaymentCancelRequest
|
||||
import com.sangdol.roomescape.payment.dto.*
|
||||
import com.sangdol.roomescape.payment.exception.ExternalPaymentException
|
||||
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
||||
import com.sangdol.roomescape.payment.exception.PaymentException
|
||||
import com.sangdol.roomescape.payment.dto.PaymentGatewayCancelResponse
|
||||
import com.sangdol.roomescape.payment.dto.PaymentConfirmRequest
|
||||
import com.sangdol.roomescape.payment.dto.PaymentCreateResponse
|
||||
import com.sangdol.roomescape.payment.dto.PaymentGatewayResponse
|
||||
import com.sangdol.roomescape.payment.dto.PaymentResponse
|
||||
import com.sangdol.roomescape.payment.infrastructure.client.TosspayClient
|
||||
import com.sangdol.roomescape.payment.infrastructure.persistence.*
|
||||
import com.sangdol.roomescape.payment.mapper.toResponse
|
||||
@ -36,20 +31,28 @@ class PaymentService(
|
||||
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
|
||||
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
|
||||
}
|
||||
} catch (e: ExternalPaymentException) {
|
||||
val errorCode = if (e.httpStatusCode in 400..<500) {
|
||||
PaymentErrorCode.PAYMENT_CLIENT_ERROR
|
||||
} else {
|
||||
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
when(e) {
|
||||
is ExternalPaymentException -> {
|
||||
val errorCode = if (e.httpStatusCode in 400..<500) {
|
||||
PaymentErrorCode.PAYMENT_CLIENT_ERROR
|
||||
} else {
|
||||
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
|
||||
}
|
||||
|
||||
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
|
||||
"${errorCode.message}(${e.message})"
|
||||
} else {
|
||||
errorCode.message
|
||||
}
|
||||
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
|
||||
"${errorCode.message}(${e.message})"
|
||||
} else {
|
||||
errorCode.message
|
||||
}
|
||||
|
||||
throw PaymentException(errorCode, message)
|
||||
throw PaymentException(errorCode, message)
|
||||
}
|
||||
else -> {
|
||||
log.warn(e) { "[requestConfirm] 예상치 못한 결제 실패: paymentKey=${request.paymentKey}" }
|
||||
throw PaymentException(PaymentErrorCode.PAYMENT_UNEXPECTED_ERROR)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -142,10 +142,16 @@ private class TosspayErrorHandler(
|
||||
): Nothing {
|
||||
val requestType: String = paymentRequestType(url)
|
||||
val errorResponse: TosspayErrorResponse = parseResponse(response)
|
||||
log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
|
||||
val status = response.statusCode
|
||||
|
||||
if (status.is5xxServerError) {
|
||||
log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
|
||||
} else {
|
||||
log.info { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" }
|
||||
}
|
||||
|
||||
throw ExternalPaymentException(
|
||||
httpStatusCode = response.statusCode.value(),
|
||||
httpStatusCode = status.value(),
|
||||
errorCode = errorResponse.code,
|
||||
message = errorResponse.message
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user