PG 수정

- 휴대폰 결제: 웰컴페이먼츠
- 나머지 : 헥토파이낸스(세틀뱅크)
This commit is contained in:
Yu Sung 2024-07-02 14:50:01 +09:00
parent 45b600ac41
commit 9f402c8ec8
3 changed files with 92 additions and 34 deletions

View File

@ -19,6 +19,7 @@ enum CanApi {
case pgChargeCan(request: PgChargeRequest) case pgChargeCan(request: PgChargeRequest)
case pgVerify(request: PgVerifyRequest) case pgVerify(request: PgVerifyRequest)
case pgVerifyHecto(request: PgVerifyRequest)
case useCanCoupon(request: UseCanCouponRequest) case useCanCoupon(request: UseCanCouponRequest)
} }
@ -54,6 +55,9 @@ extension CanApi: TargetType {
case .pgVerify: case .pgVerify:
return "/charge/verify" return "/charge/verify"
case .pgVerifyHecto:
return "/charge/verify/hecto"
case .useCanCoupon: case .useCanCoupon:
return "/can/coupon/use" return "/can/coupon/use"
} }
@ -64,7 +68,7 @@ extension CanApi: TargetType {
case .getCanStatus, .getCanChargeStatus, .getCanUseStatus, .getCans: case .getCanStatus, .getCanChargeStatus, .getCanUseStatus, .getCans:
return .get return .get
case .chargeCan, .verify, .pgChargeCan, .pgVerify, .useCanCoupon: case .chargeCan, .verify, .pgChargeCan, .pgVerify, .pgVerifyHecto, .useCanCoupon:
return .post return .post
} }
} }
@ -103,6 +107,9 @@ extension CanApi: TargetType {
case .pgVerify(let request): case .pgVerify(let request):
return .requestJSONEncodable(request) return .requestJSONEncodable(request)
case .pgVerifyHecto(let request):
return .requestJSONEncodable(request)
case .useCanCoupon(let request): case .useCanCoupon(let request):
return .requestJSONEncodable(request) return .requestJSONEncodable(request)
} }

View File

@ -41,6 +41,10 @@ final class CanRepository {
return api.requestPublisher(.pgVerify(request: PgVerifyRequest(receiptId: receiptId, orderId: orderId))) return api.requestPublisher(.pgVerify(request: PgVerifyRequest(receiptId: receiptId, orderId: orderId)))
} }
func pgVerifyHecto(receiptId: String, orderId: String) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.pgVerifyHecto(request: PgVerifyRequest(receiptId: receiptId, orderId: orderId)))
}
func getCans() -> AnyPublisher<Response, MoyaError> { func getCans() -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getCans) return api.requestPublisher(.getCans)
} }

View File

@ -11,8 +11,8 @@ import Combine
import Bootpay import Bootpay
enum PaymentMethod: String { enum PaymentMethod: String {
case card = "디지털카드" case card = "카드"
case bank = "디지털계좌이체" case bank = "계좌이체"
case phone = "휴대폰" case phone = "휴대폰"
} }
@ -55,6 +55,14 @@ final class CanPgPaymentViewModel: ObservableObject {
payload.orderId = "\(data.chargeId)" payload.orderId = "\(data.chargeId)"
payload.method = paymentMethod!.rawValue payload.method = paymentMethod!.rawValue
if paymentMethod == .phone {
let bootUser = BootUser()
bootUser.userId = "\(UserDefaults.int(forKey: .userId))"
bootUser.username = UserDefaults.string(forKey: .nickname)
payload.user = bootUser
}
onSuccess() onSuccess()
} else { } else {
if let message = decoded.message { if let message = decoded.message {
@ -82,6 +90,7 @@ final class CanPgPaymentViewModel: ObservableObject {
let receiptId = data["receipt_id"] as! String let receiptId = data["receipt_id"] as! String
let orderId = data["order_id"] as! String let orderId = data["order_id"] as! String
if paymentMethod == .phone {
repository.pgVerify(receiptId: receiptId, orderId: orderId) repository.pgVerify(receiptId: receiptId, orderId: orderId)
.sink { result in .sink { result in
switch result { switch result {
@ -118,9 +127,47 @@ final class CanPgPaymentViewModel: ObservableObject {
} }
} }
.store(in: &subscription) .store(in: &subscription)
} else {
repository.pgVerifyHecto(receiptId: receiptId, orderId: orderId)
.sink { result in
switch result {
case .finished:
DEBUG_LOG("finish")
case .failure(let error):
ERROR_LOG(error.localizedDescription)
}
} receiveValue: { [unowned self] response in
self.isLoading = false
let responseData = response.data
do {
let jsonDecoder = JSONDecoder()
let decoded = try jsonDecoder.decode(ApiResponseWithoutData.self, from: responseData)
if decoded.success {
self.errorMessage = "캔이 충전되었습니다"
self.isShowPopup = true
onSuccess()
} else {
if let message = decoded.message {
self.errorMessage = message
} else {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
}
self.isShowPopup = true
}
} catch {
self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
self.isShowPopup = true
}
}
.store(in: &subscription)
}
} else { } else {
isLoading = false isLoading = false
errorMessage = "본인인증 중 오류가 발생했습니다." self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
isShowPopup = true isShowPopup = true
} }
} }