Compare commits

...

2 Commits

Author SHA1 Message Date
cb2e3ea581 fix(payverse-wehook): 한국 원화일 때와 USD일 때 mid 값이 달라야 하는데 성공 여부 비교시 원화 mid로 고정하여 비교하던 로직 수정 2025-10-03 01:29:59 +09:00
42eaf1d5e3 fix(payverse-verify): 결제 성공 여부 판단 로직 수정
- processingAmount 대신 requestAmount와 can 가격 비교
- productName, customerId 비교 추가
2025-10-03 01:25:27 +09:00
2 changed files with 15 additions and 10 deletions

View File

@@ -70,8 +70,9 @@ data class PayverseVerifyResponse(
val transactionMessage: String,
val orderId: String,
val customerId: String,
val processingCurrency: String,
val processingAmount: BigDecimal
val productName: String,
val requestCurrency: String,
val requestAmount: BigDecimal
)
data class PayverseWebhookRequest(

View File

@@ -102,6 +102,11 @@ class ChargeService(
return when (charge.payment?.status) {
PaymentStatus.REQUEST -> {
// 성공 조건 검증
val mid = if (request.requestCurrency == "KRW") {
payverseMid
} else {
payverseUsdMid
}
val expectedSign = DigestUtils.sha512Hex(
String.format(
"||%s||%s||%s||%s||%s||",
@@ -110,11 +115,7 @@ class ChargeService(
} else {
payverseUsdSecretKey
},
if (request.requestCurrency == "KRW") {
payverseMid
} else {
payverseUsdMid
},
mid,
request.orderId,
request.requestAmount,
request.approvalDay
@@ -126,7 +127,7 @@ class ChargeService(
) == 0
val isSuccess = request.resultStatus == "SUCCESS" &&
request.mid == payverseMid &&
request.mid == mid &&
charge.title == request.productName &&
isAmountMatch &&
request.sign == expectedSign
@@ -346,10 +347,13 @@ class ChargeService(
val verifyResponse = objectMapper.readValue(body, PayverseVerifyResponse::class.java)
println(verifyResponse)
val customerId = "${serverEnv}_user_${member.id!!}"
val isSuccess = verifyResponse.resultStatus == "SUCCESS" &&
verifyResponse.transactionStatus == "SUCCESS" &&
verifyResponse.orderId.toLongOrNull() == charge.id &&
verifyResponse.processingAmount.compareTo(charge.can!!.price) == 0
verifyResponse.productName == charge.title &&
verifyResponse.customerId == customerId &&
verifyResponse.requestAmount.compareTo(charge.can!!.price) == 0
println(isSuccess)
if (isSuccess) {
@@ -363,7 +367,7 @@ class ChargeService(
charge.payment?.method = mappedMethod ?: verifyResponse.schemeCode
charge.payment?.status = PaymentStatus.COMPLETE
// 통화코드 설정
charge.payment?.locale = verifyResponse.processingCurrency
charge.payment?.locale = verifyResponse.requestCurrency
member.charge(charge.chargeCan, charge.rewardCan, "pg")