From 9f402c8ec885d115da507ba9b084bbe6f53a8dfd Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Tue, 2 Jul 2024 14:50:01 +0900 Subject: [PATCH] =?UTF-8?q?PG=20=EC=88=98=EC=A0=95=20-=20=ED=9C=B4?= =?UTF-8?q?=EB=8C=80=ED=8F=B0=20=EA=B2=B0=EC=A0=9C:=20=EC=9B=B0=EC=BB=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EB=A8=BC=EC=B8=A0=20-=20=EB=82=98=EB=A8=B8?= =?UTF-8?q?=EC=A7=80=20:=20=ED=97=A5=ED=86=A0=ED=8C=8C=EC=9D=B4=EB=82=B8?= =?UTF-8?q?=EC=8A=A4(=EC=84=B8=ED=8B=80=EB=B1=85=ED=81=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SodaLive/Sources/MyPage/Can/CanApi.swift | 9 +- .../Sources/MyPage/Can/CanRepository.swift | 4 + .../Can/Payment/CanPgPaymentViewModel.swift | 113 +++++++++++++----- 3 files changed, 92 insertions(+), 34 deletions(-) diff --git a/SodaLive/Sources/MyPage/Can/CanApi.swift b/SodaLive/Sources/MyPage/Can/CanApi.swift index 27072cb..0766dfe 100644 --- a/SodaLive/Sources/MyPage/Can/CanApi.swift +++ b/SodaLive/Sources/MyPage/Can/CanApi.swift @@ -19,6 +19,7 @@ enum CanApi { case pgChargeCan(request: PgChargeRequest) case pgVerify(request: PgVerifyRequest) + case pgVerifyHecto(request: PgVerifyRequest) case useCanCoupon(request: UseCanCouponRequest) } @@ -54,6 +55,9 @@ extension CanApi: TargetType { case .pgVerify: return "/charge/verify" + case .pgVerifyHecto: + return "/charge/verify/hecto" + case .useCanCoupon: return "/can/coupon/use" } @@ -64,7 +68,7 @@ extension CanApi: TargetType { case .getCanStatus, .getCanChargeStatus, .getCanUseStatus, .getCans: return .get - case .chargeCan, .verify, .pgChargeCan, .pgVerify, .useCanCoupon: + case .chargeCan, .verify, .pgChargeCan, .pgVerify, .pgVerifyHecto, .useCanCoupon: return .post } } @@ -103,6 +107,9 @@ extension CanApi: TargetType { case .pgVerify(let request): return .requestJSONEncodable(request) + case .pgVerifyHecto(let request): + return .requestJSONEncodable(request) + case .useCanCoupon(let request): return .requestJSONEncodable(request) } diff --git a/SodaLive/Sources/MyPage/Can/CanRepository.swift b/SodaLive/Sources/MyPage/Can/CanRepository.swift index 2c34207..2debe48 100644 --- a/SodaLive/Sources/MyPage/Can/CanRepository.swift +++ b/SodaLive/Sources/MyPage/Can/CanRepository.swift @@ -41,6 +41,10 @@ final class CanRepository { return api.requestPublisher(.pgVerify(request: PgVerifyRequest(receiptId: receiptId, orderId: orderId))) } + func pgVerifyHecto(receiptId: String, orderId: String) -> AnyPublisher { + return api.requestPublisher(.pgVerifyHecto(request: PgVerifyRequest(receiptId: receiptId, orderId: orderId))) + } + func getCans() -> AnyPublisher { return api.requestPublisher(.getCans) } diff --git a/SodaLive/Sources/MyPage/Can/Payment/CanPgPaymentViewModel.swift b/SodaLive/Sources/MyPage/Can/Payment/CanPgPaymentViewModel.swift index 44c8cb0..c973f03 100644 --- a/SodaLive/Sources/MyPage/Can/Payment/CanPgPaymentViewModel.swift +++ b/SodaLive/Sources/MyPage/Can/Payment/CanPgPaymentViewModel.swift @@ -11,8 +11,8 @@ import Combine import Bootpay enum PaymentMethod: String { - case card = "디지털카드" - case bank = "디지털계좌이체" + case card = "카드" + case bank = "계좌이체" case phone = "휴대폰" } @@ -55,6 +55,14 @@ final class CanPgPaymentViewModel: ObservableObject { payload.orderId = "\(data.chargeId)" 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() } else { if let message = decoded.message { @@ -82,45 +90,84 @@ final class CanPgPaymentViewModel: ObservableObject { let receiptId = data["receipt_id"] as! String let orderId = data["order_id"] as! String - repository.pgVerify(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 + if paymentMethod == .phone { + repository.pgVerify(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) - onSuccess() - } else { - if let message = decoded.message { - self.errorMessage = message + if decoded.success { + self.errorMessage = "캔이 충전되었습니다" + self.isShowPopup = true + + onSuccess() } else { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + if let message = decoded.message { + self.errorMessage = message + } else { + self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." + } + + self.isShowPopup = true } - + } catch { + self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." self.isShowPopup = true } - } catch { - self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." - self.isShowPopup = true } - } - .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 { isLoading = false - errorMessage = "본인인증 중 오류가 발생했습니다." + self.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다." isShowPopup = true } }