Skip to content

Commit 8d1cc4e

Browse files
committed
setupTokenPaymentSource
1 parent 29307de commit 8d1cc4e

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

Demo/Demo/Models/SetupTokenRequest.swift

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import Foundation
22

3+
enum PaymentSourceType {
4+
case card
5+
case paypal(usageType: String)
6+
}
7+
38
struct SetUpTokenRequest {
49

510
let customerID: String?
6-
11+
let paymentSource: PaymentSourceType
12+
713
var path: String {
814
"/setup_tokens/"
915
}
@@ -17,13 +23,19 @@ struct SetUpTokenRequest {
1723
}
1824

1925
var body: Data? {
26+
var paymentSourceDict: [String: Any] = [:]
27+
28+
switch paymentSource {
29+
case .card:
30+
paymentSourceDict["card"] = [:]
31+
case .paypal(let usageType):
32+
paymentSourceDict["paypal"] = ["usage_type": usageType]
33+
paymentSourceDict["experience_context"] = ["return_url": "https://example.com/returnUrl", "cance_url": "https://example.com/cancelUrl"]
34+
}
35+
2036
let requestBody: [String: Any] = [
21-
"customer": [
22-
"id": customerID
23-
],
24-
"payment_source": [
25-
"card": [:]
26-
]
37+
"customer": ["id": customerID],
38+
"payment_source": paymentSourceDict
2739
]
2840

2941
return try? JSONSerialization.data(withJSONObject: requestBody)

Demo/Demo/Models/SetupTokenResponse.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ struct SetUpTokenResponse: Decodable, Equatable {
88

99
let id, status: String
1010
let customer: Customer?
11+
let links: [Link]
1112

1213
struct Customer: Decodable {
1314

1415
let id: String
1516
}
17+
18+
struct Link: Decodable {
19+
20+
let href, rel, method: String
21+
}
1622
}

Demo/Demo/Networking/DemoMerchantAPI.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ final class DemoMerchantAPI {
2323
// TODO: pass in headers depending on integration type
2424
// Different request struct or integration type property
2525
// in SetUpTokenRequest to conditionally add header
26-
let request = SetUpTokenRequest(customerID: customerID)
26+
let request = SetUpTokenRequest(customerID: customerID, paymentSource: .card)
2727
let urlRequest = try createSetupTokenUrlRequest(
2828
setupTokenRequest: request,
2929
environment: DemoSettings.environment,

0 commit comments

Comments
 (0)