Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions Example/Example/Sources/Application/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,4 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate {
window?.rootViewController = FeaturesBuilder().build()
window?.makeKeyAndVisible()
}

func scene(_ scene: UIScene, openURLContexts urlContexts: Set<UIOpenURLContext>) {
if let url = urlContexts.first?.url {
ProcessOut.shared.processDeepLink(url: url)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ final class AlternativePaymentMethodsBuilder {
let interactor = AlternativePaymentMethodsInteractor(
gatewayConfigurationsRepository: ProcessOut.shared.gatewayConfigurations,
invoicesService: ProcessOut.shared.invoices,
alternativePaymentsService: ProcessOut.shared.alternativePayments,
filter: filter
)
let router = AlternativePaymentMethodsRouter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ final class AlternativePaymentMethodsInteractor:
init(
gatewayConfigurationsRepository: POGatewayConfigurationsRepository,
invoicesService: POInvoicesService,
alternativePaymentsService: POAlternativePaymentsService,
filter: POAllGatewayConfigurationsRequest.Filter?
) {
self.gatewayConfigurationsRepository = gatewayConfigurationsRepository
self.invoicesService = invoicesService
self.alternativePaymentsService = alternativePaymentsService
self.filter = filter
super.init(state: .idle)
}
Expand Down Expand Up @@ -111,6 +113,12 @@ final class AlternativePaymentMethodsInteractor:
}
}

func authorize(request: POAlternativePaymentAuthorizationRequest) {
Task {
try await alternativePaymentsService.authorize(request: request)
}
}

// MARK: - Private Nested Types

private enum Constants {
Expand All @@ -121,6 +129,7 @@ final class AlternativePaymentMethodsInteractor:

private let gatewayConfigurationsRepository: POGatewayConfigurationsRepository
private let invoicesService: POInvoicesService
private let alternativePaymentsService: POAlternativePaymentsService
private let filter: POAllGatewayConfigurationsRequest.Filter?

// MARK: - State Management
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ protocol AlternativePaymentMethodsInteractorType: InteractorType<AlternativePaym
/// Creates invoice and calls success closure if operation completes with success.
func createInvoice(amount: Decimal, currencyCode: String, success: @escaping (_ invoice: POInvoice) -> Void)

/// Authorizes alternative payment using given request.
func authorize(request: POAlternativePaymentAuthorizationRequest)

/// Loads more data if possible.
func loadMore()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ enum AlternativePaymentMethodsRoute: RouteType {
/// Alternative payment executed natively.
case nativeAlternativePayment(NativeAlternativePayment)

/// Alternative payment.
case alternativePayment(request: POAlternativePaymentMethodRequest)

/// Asks user for authorisation amount and currency.
case authorizationtAmount(completion: (Decimal, String) -> Void)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,6 @@ final class AlternativePaymentMethodsRouter: RouterType {
)
viewController.isModalInPresentation = true
self.viewController?.present(viewController, animated: true)
case let .alternativePayment(request):
let session = POWebAuthenticationSession(request: request, returnUrl: Constants.returnUrl) { _ in }
Task {
_ = await session.start()
}
case let .authorizationtAmount(completion):
let viewController = AuthorizationAmountBuilder(completion: completion).build()
self.viewController?.present(viewController, animated: true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,12 @@ final class AlternativePaymentMethodsViewModel:
route = .nativeAlternativePayment(paymentRoute)
} else {
route = AlternativePaymentMethodsRoute.additionalData { [weak self] additionalData in
let request = POAlternativePaymentMethodRequest(
let request = POAlternativePaymentAuthorizationRequest(
invoiceId: invoice.id,
gatewayConfigurationId: gatewayConfiguration.id,
additionalData: additionalData
)
self?.router.trigger(route: .alternativePayment(request: request))
self?.interactor.authorize(request: request)
}
}
self?.router.trigger(route: route)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ final class FeaturesViewModel: BaseViewModel<FeaturesViewModelState>, FeaturesVi
}
let configuration = PODynamicCheckoutConfiguration(
invoiceRequest: .init(invoiceId: invoice.id, clientSecret: invoice.clientSecret),
alternativePayment: .init(returnUrl: Constants.returnUrl),
cancelButton: .init(confirmation: .init())
)
self.router.trigger(route: .dynamicCheckout(configuration: configuration, delegate: self))
Expand Down

This file was deleted.

32 changes: 10 additions & 22 deletions Sources/ProcessOut/Sources/Api/ProcessOut.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,35 +28,21 @@ public final class ProcessOut: @unchecked Sendable {
/// Invoices service.
public private(set) var invoices: POInvoicesService!

/// Alternative payment methods service.
public private(set) var alternativePaymentMethods: POAlternativePaymentMethodsService!
/// Alternative payments service.
public private(set) var alternativePayments: POAlternativePaymentsService!

/// Cards service.
public private(set) var cards: POCardsService!

/// Returns customer tokens service.
public private(set) var customerTokens: POCustomerTokensService!

/// Call this method in your app or scene delegate whenever your implementation receives incoming URL. Only deep
/// links are supported.
///
/// - Returns: `true` if the URL is expected and will be handled by SDK. `false` otherwise.
@discardableResult
public func processDeepLink(url: URL) -> Bool {
logger.debug("Will process deep link: \(url)")
return eventEmitter.emit(event: PODeepLinkReceivedEvent(url: url))
}

// MARK: - SPI

/// Logger with application category.
@_spi(PO)
public private(set) var logger: POLogger!

/// Event emitter to use for events exchange.
@_spi(PO)
public private(set) var eventEmitter: POEventEmitter!

/// Images repository.
@_spi(PO)
public let images: POImagesRepository = UrlSessionImagesRepository(session: .shared)
Expand Down Expand Up @@ -107,14 +93,13 @@ public final class ProcessOut: @unchecked Sendable {
invoices = Self.createInvoicesService(
httpConnector: httpConnector, threeDSService: threeDSService, logger: logger
)
alternativePaymentMethods = createAlternativePaymentsService()
alternativePayments = createAlternativePaymentsService()
cards = Self.createCardsService(
httpConnector: httpConnector, logger: logger
)
customerTokens = Self.createCustomerTokensService(
httpConnector: httpConnector, threeDSService: threeDSService, logger: logger
)
eventEmitter = LocalEventEmitter(logger: logger)
}

// MARK: -
Expand Down Expand Up @@ -145,21 +130,24 @@ public final class ProcessOut: @unchecked Sendable {
return DefaultCustomerTokensService(repository: repository, threeDSService: threeDSService, logger: logger)
}

private func createAlternativePaymentsService() -> POAlternativePaymentMethodsService {
let serviceConfiguration = { @Sendable [unowned self] () -> AlternativePaymentMethodsServiceConfiguration in
private func createAlternativePaymentsService() -> POAlternativePaymentsService {
let serviceConfiguration = { @Sendable [unowned self] () -> AlternativePaymentsServiceConfiguration in
let configuration = self.configuration
return .init(projectId: configuration.projectId, baseUrl: configuration.checkoutBaseUrl)
}
return DefaultAlternativePaymentMethodsService(configuration: serviceConfiguration, logger: logger)
let webSession = WebAuthenticationSession()
return DefaultAlternativePaymentsService(
configuration: serviceConfiguration, webSession: webSession, logger: logger
)
}

private static func create3DSService() -> DefaultThreeDSService {
let webSession = WebAuthenticationSession()
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .useDefaultKeys
let encoder = JSONEncoder()
encoder.dataEncodingStrategy = .base64
encoder.keyEncodingStrategy = .useDefaultKeys
let webSession = WebAuthenticationSession()
return DefaultThreeDSService(decoder: decoder, encoder: encoder, webSession: webSession)
}

Expand Down

This file was deleted.

17 changes: 0 additions & 17 deletions Sources/ProcessOut/Sources/Core/EventEmitter/POEventEmitter.swift

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,13 @@ public struct POCreateCustomerTokenRequest: Encodable, Sendable {
/// Return URL to assign to verification invoice.
public let invoiceReturnUrl: URL?

public init(customerId: String, verify: Bool = false, invoiceReturnUrl: URL? = nil) {
/// Return URL.
public let returnUrl: URL?

public init(customerId: String, verify: Bool = false, returnUrl: URL? = nil) {
self._customerId = .init(value: customerId)
self.verify = verify
self.invoiceReturnUrl = invoiceReturnUrl
self.invoiceReturnUrl = returnUrl
self.returnUrl = returnUrl
}
}

This file was deleted.

Loading