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.common.persistence.TransactionExecutionUtil
|
||||||
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode
|
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.ExternalPaymentException
|
||||||
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
||||||
import com.sangdol.roomescape.payment.exception.PaymentException
|
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.client.TosspayClient
|
||||||
import com.sangdol.roomescape.payment.infrastructure.persistence.*
|
import com.sangdol.roomescape.payment.infrastructure.persistence.*
|
||||||
import com.sangdol.roomescape.payment.mapper.toResponse
|
import com.sangdol.roomescape.payment.mapper.toResponse
|
||||||
@ -36,20 +31,28 @@ class PaymentService(
|
|||||||
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
|
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
|
||||||
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
|
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
|
||||||
}
|
}
|
||||||
} catch (e: ExternalPaymentException) {
|
} catch (e: Exception) {
|
||||||
val errorCode = if (e.httpStatusCode in 400..<500) {
|
when(e) {
|
||||||
PaymentErrorCode.PAYMENT_CLIENT_ERROR
|
is ExternalPaymentException -> {
|
||||||
} else {
|
val errorCode = if (e.httpStatusCode in 400..<500) {
|
||||||
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
|
PaymentErrorCode.PAYMENT_CLIENT_ERROR
|
||||||
}
|
} else {
|
||||||
|
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
|
||||||
|
}
|
||||||
|
|
||||||
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
|
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
|
||||||
"${errorCode.message}(${e.message})"
|
"${errorCode.message}(${e.message})"
|
||||||
} else {
|
} else {
|
||||||
errorCode.message
|
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 {
|
): Nothing {
|
||||||
val requestType: String = paymentRequestType(url)
|
val requestType: String = paymentRequestType(url)
|
||||||
val errorResponse: TosspayErrorResponse = parseResponse(response)
|
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(
|
throw ExternalPaymentException(
|
||||||
httpStatusCode = response.statusCode.value(),
|
httpStatusCode = status.value(),
|
||||||
errorCode = errorResponse.code,
|
errorCode = errorResponse.code,
|
||||||
message = errorResponse.message
|
message = errorResponse.message
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user