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 } }