From 8d1cc4ea95c285c32762eb33926b8a98f1317eaf Mon Sep 17 00:00:00 2001 From: Victoria Park Date: Wed, 29 Nov 2023 22:00:40 -0800 Subject: [PATCH] setupTokenPaymentSource --- Demo/Demo/Models/SetupTokenRequest.swift | 26 ++++++++++++++++------ Demo/Demo/Models/SetupTokenResponse.swift | 6 +++++ Demo/Demo/Networking/DemoMerchantAPI.swift | 2 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Demo/Demo/Models/SetupTokenRequest.swift b/Demo/Demo/Models/SetupTokenRequest.swift index 4336c9aa7..9414bbfca 100644 --- a/Demo/Demo/Models/SetupTokenRequest.swift +++ b/Demo/Demo/Models/SetupTokenRequest.swift @@ -1,9 +1,15 @@ import Foundation +enum PaymentSourceType { + case card + case paypal(usageType: String) +} + struct SetUpTokenRequest { let customerID: String? - + let paymentSource: PaymentSourceType + var path: String { "/setup_tokens/" } @@ -17,13 +23,19 @@ struct SetUpTokenRequest { } var body: Data? { + var paymentSourceDict: [String: Any] = [:] + + switch paymentSource { + case .card: + paymentSourceDict["card"] = [:] + case .paypal(let usageType): + paymentSourceDict["paypal"] = ["usage_type": usageType] + paymentSourceDict["experience_context"] = ["return_url": "https://example.com/returnUrl", "cance_url": "https://example.com/cancelUrl"] + } + let requestBody: [String: Any] = [ - "customer": [ - "id": customerID - ], - "payment_source": [ - "card": [:] - ] + "customer": ["id": customerID], + "payment_source": paymentSourceDict ] return try? JSONSerialization.data(withJSONObject: requestBody) diff --git a/Demo/Demo/Models/SetupTokenResponse.swift b/Demo/Demo/Models/SetupTokenResponse.swift index f79552b4d..f18d1e972 100644 --- a/Demo/Demo/Models/SetupTokenResponse.swift +++ b/Demo/Demo/Models/SetupTokenResponse.swift @@ -8,9 +8,15 @@ struct SetUpTokenResponse: Decodable, Equatable { let id, status: String let customer: Customer? + let links: [Link] struct Customer: Decodable { let id: String } + + struct Link: Decodable { + + let href, rel, method: String + } } diff --git a/Demo/Demo/Networking/DemoMerchantAPI.swift b/Demo/Demo/Networking/DemoMerchantAPI.swift index 7165d5d56..d6d8c911b 100644 --- a/Demo/Demo/Networking/DemoMerchantAPI.swift +++ b/Demo/Demo/Networking/DemoMerchantAPI.swift @@ -23,7 +23,7 @@ final class DemoMerchantAPI { // TODO: pass in headers depending on integration type // Different request struct or integration type property // in SetUpTokenRequest to conditionally add header - let request = SetUpTokenRequest(customerID: customerID) + let request = SetUpTokenRequest(customerID: customerID, paymentSource: .card) let urlRequest = try createSetupTokenUrlRequest( setupTokenRequest: request, environment: DemoSettings.environment,