Hello à tous.
Voilà je débute dans le langage swift, je me débrouille avec plein d'autre langages mais là je ne comprends pas comment passe les variables et les paramètres dans les fonctions...
Je souhaite rajouter une fonction de contrôle du 3D secure de chez Stripe, voici l'exemple donné par Stripe :
Il s'agit d'une application existante, voici la partie concerné par rapport au paiement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // 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) } }
PurchaseValidationController.swift :
On appel donc la fonction buyProduct du worker qui est dans "PuschaseValidationWorker.swift"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 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.user.id { displayUserOwnProductError() return } purchaseButton.displayActivity(true) worker.buyProduct { [weak self] (error) in if self == nil { return } print("Purchase validation controller") self?.purchaseButton.displayActivity(false) if error != nil { self?.displayPurchaseError() } else { if let id = self?.worker.product.id, let title = self?.worker.product.title, let order = self?.worker.order { print(order) Analytics.logEvent(AnalyticsEventBeginCheckout, parameters: [ AnalyticsParameterItemID: id, AnalyticsParameterItemName: title, ]) } self?.replaceByPurchaseConfirmationController() } } } }
Qui appel lui la fonction buyProduct de Product soit du fichier "Product Networking.swift"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import Foundation import Stripe class PurchaseValidationWorker { // Input var product: Product! var user: Account! // Ouput var order: Order? func buyProduct(completion: @escaping (_ error: AppError?) -> Void) { Product.buyProduct(id: product.id!){ [weak self] (order, error) in self?.order = order print("Purchase Validation Worker") completion(error) } } }
J'ai essayé de mettre la fonction Stripe dans chacun des 3 fichiers mais rien à faire. Je comprends pas où je dois la placer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 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) // On envoi la demande à une API nodeJS qui retourne le "result" // J'ai essayé de mettre la fonction ici mais il me met une erreur à cause du "paymentContext" } } }
En tout logique vu que je récupère la réponse de l'API dans la fonction "buyProduct" du fichier "Product Networking.swift" je dois la mettre à cette endroit ?
Je l'ai donc mise dans cette fonction mais il ne trouve pas le "paymentContext" de la fonction stripe (authenticationContext: paymentContext)
Certain utilise "self" comme paymentContext, je dois donc déclaré le paymentContext quelque part mais où ?
Merci d'avance, car je galère depuis des jours dessus!![]()
Partager