Integration of a stripe function


I start in the swift language, I manage with many other languages ​​but there I do not understand how variables and parameters pass in functions ...

I want to add a 3D secure control function from Stripe, here is the example given by Stripe:

// Assemble the PaymentIntent parameters
let paymentIntentParams = STPPaymentIntentParams(clientSecret: clientSecret)
paymentIntentParams.paymentMethodId = paymentResult.paymentMethod.stripeId
// Confirm the PaymentIntent
STPPaymentHandler.shared().confirmPayment(withParams: paymentIntentParams, authenticationContext: paymentContext) { status, paymentIntent, error in
    switch status {
    case .succeeded:
        // Your backend asynchronously fulfills the customer's order, e.g. via webhook
        completion(.success, nil)
    case .failed:
        completion(.error, error) // Report error
    case .canceled:
        completion(.userCancellation, nil) // Customer cancelled
    @unknown default:
        completion(.error, nil)

But I don't understand where to place this function!

This is an existing application, here is the part concerned with regard to payment:

import UIKit
import Lottie
import Firebase
class PurchaseValidationController: UIViewController {
    let worker = PurchaseValidationWorker()
    @IBOutlet private weak var animationView: AnimationView!
    @IBOutlet private weak var titleLabel: UILabel!
    @IBOutlet private weak var subtitleLabel: UILabel!
    @IBOutlet private weak var purchaseButton: PrimaryButton!
    override func viewDidLoad() {
        // ...
    private func buyProduct() {
        if worker.product.creator?.id == {
        worker.buyProduct {
            [weak self] (error) in
            if self == nil { return }
            print("Purchase validation controller")
            if error != nil {
            } else {
                if let id = self?,
                    let title = self?.worker.product.title,
                    let order = self?.worker.order {
                    Analytics.logEvent(AnalyticsEventBeginCheckout, parameters: [
                        AnalyticsParameterItemID: id,
                        AnalyticsParameterItemName: title,

We therefore call the buyProduct function of the worker which is in "PuschaseValidationWorker.swift"

import Foundation
import Stripe
class PurchaseValidationWorker {
    // Input
    var product: Product!
    var user: Account!
    // Ouput
    var order: Order?
    func buyProduct(completion: @escaping (_ error: AppError?) -> Void) {
            [weak self] (order, error) in
            self?.order = order
            print("Purchase Validation Worker")

Who calls him the buyProduct function of Product either from the file "Product Networking.swift"

import Alamofire
import CoreLocation
import Stripe
extension Product {
    static func buyProduct(id: String,
                           completion: @escaping (_ order: Order?, _ error: AppError?) -> Void) {
        ProductAPIRouter.buyProduct(productId: id).performRequest { (result, networkError) in
            processOrderResponse(result: result,
                                 networkError: networkError,
                                 completion: completion)
            // We send the request to a nodeJS API which returns the "result"
            // I tried to put the function here but it gives me an error because of the "paymentContext"

I tried to put the Stripe function in each of the 3 files but nothing to do. I don't understand where I should put it.
Logically, since I get the API response in the "buyProduct" function of the "Product Networking.swift" file, should I put it there?
So I put it in this function but it does not find the "paymentContext" of the stripe function (authenticationContext: paymentContext)

Some use "self" as paymentContext, so I have to declare paymentContext somewhere but where?

Thank you in advance, because I have been struggling for days on!