diff --git a/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Interactor/DynamicCheckoutDefaultInteractor.swift b/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Interactor/DynamicCheckoutDefaultInteractor.swift index 105ca37d8..39f140690 100644 --- a/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Interactor/DynamicCheckoutDefaultInteractor.swift +++ b/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Interactor/DynamicCheckoutDefaultInteractor.swift @@ -355,7 +355,7 @@ final class DynamicCheckoutDefaultInteractor: cardTokenizationInteractor: nil, nativeAlternativePaymentInteractor: nil, isCancellable: false, - shouldInvalidateInvoice: true + shouldInvalidateInvoice: false ) state = .paymentProcessing(paymentProcessingState) Task { @MainActor in @@ -363,17 +363,17 @@ final class DynamicCheckoutDefaultInteractor: guard let delegate else { throw POFailure(message: "Delegate must be set to authorize invoice.", code: .generic(.mobile)) } - let tokenizationRequest = POApplePayTokenizationRequest(paymentRequest: request) - let coordinator = DynamicCheckoutApplePayTokenizationCoordinator { [invoicesService] card in - var authorizationRequest = POInvoiceAuthorizationRequest( - invoiceId: startedState.invoice.id, source: card.id - ) - let threeDSService = await delegate.dynamicCheckout(willAuthorizeInvoiceWith: &authorizationRequest) - try await invoicesService.authorizeInvoice( - request: authorizationRequest, threeDSService: threeDSService - ) - } - _ = try await cardsService.tokenize(request: tokenizationRequest, delegate: coordinator) + let card = try await cardsService.tokenize( + request: POApplePayTokenizationRequest(paymentRequest: request) + ) + invalidateInvoiceIfPossible() + var authorizationRequest = POInvoiceAuthorizationRequest( + invoiceId: startedState.invoice.id, source: card.id + ) + let threeDSService = await delegate.dynamicCheckout(willAuthorizeInvoiceWith: &authorizationRequest) + try await invoicesService.authorizeInvoice( + request: authorizationRequest, threeDSService: threeDSService + ) setSuccessState() } catch { recoverPaymentProcessing(error: error) diff --git a/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Utils/ApplePay/DynamicCheckoutApplePayTokenizationCoordinator.swift b/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Utils/ApplePay/DynamicCheckoutApplePayTokenizationCoordinator.swift deleted file mode 100644 index d5e4ae204..000000000 --- a/Sources/ProcessOutUI/Sources/Modules/DynamicCheckout/Utils/ApplePay/DynamicCheckoutApplePayTokenizationCoordinator.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// DynamicCheckoutApplePayTokenizationCoordinator.swift -// ProcessOutUI -// -// Created by Andrii Vysotskyi on 17.03.2024. -// - -import Foundation -import PassKit -import ProcessOut - -final class DynamicCheckoutApplePayTokenizationCoordinator: POApplePayTokenizationDelegate { - - init(didTokenizeCard: @escaping (POCard) async throws -> Void) { - self.didTokenizeCard = didTokenizeCard - } - - /// Closure that is called when invoice is authorized. - let didTokenizeCard: (POCard) async throws -> Void - - // MARK: - - - func applePayTokenization( - didAuthorizePayment payment: PKPayment, card: POCard - ) async -> PKPaymentAuthorizationResult { - do { - try await didTokenizeCard(card) - } catch { - return .init(status: .failure, errors: [error]) - } - return .init(status: .success, errors: nil) - } -}