Skip to content

Commit 6c59a10

Browse files
committed
Call share endpoint in FC for Panther
1 parent f954959 commit 6c59a10

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

StripeFinancialConnections/StripeFinancialConnections/Source/API Bindings/FinancialConnectionsAPIClient.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,14 @@ protocol FinancialConnectionsAPI {
219219
bankAccountId: String
220220
) -> Future<FinancialConnectionsPaymentDetails>
221221

222+
// TODO: Figure out return type for this request.
223+
// We'll need to sort out the down-scoped client secret first.
224+
func sharePaymentDetails(
225+
consumerSessionClientSecret: String,
226+
paymentDetailsId: String,
227+
expectedPaymentMethodType: String
228+
) -> Future<FinancialConnectionsPaymentMethod>
229+
222230
func paymentMethods(
223231
consumerSessionClientSecret: String,
224232
paymentDetailsId: String
@@ -944,6 +952,27 @@ extension FinancialConnectionsAPIClient: FinancialConnectionsAPI {
944952
)
945953
}
946954

955+
func sharePaymentDetails(
956+
consumerSessionClientSecret: String,
957+
paymentDetailsId: String,
958+
expectedPaymentMethodType: String
959+
) -> Future<FinancialConnectionsPaymentMethod> {
960+
let parameters: [String: Any] = [
961+
"request_surface": requestSurface,
962+
"id": paymentDetailsId,
963+
"credentials": [
964+
"consumer_session_client_secret": consumerSessionClientSecret
965+
],
966+
"expected_payment_method_type": expectedPaymentMethodType,
967+
"expand": ["payment_method"],
968+
]
969+
return post(
970+
resource: APIEndpointSharePaymentDetails,
971+
parameters: parameters,
972+
useConsumerPublishableKeyIfNeeded: false
973+
)
974+
}
975+
947976
func paymentMethods(
948977
consumerSessionClientSecret: String,
949978
paymentDetailsId: String
@@ -995,4 +1024,5 @@ private let APIEndpointPollAccountNumbers = "link_account_sessions/poll_account_
9951024
private let APIEndpointLinkAccountsSignUp = "consumers/accounts/sign_up"
9961025
private let APIEndpointAttachLinkConsumerToLinkAccountSession = "consumers/attach_link_consumer_to_link_account_session"
9971026
private let APIEndpointPaymentDetails = "consumers/payment_details"
1027+
private let APIEndpointSharePaymentDetails = "consumers/payment_details/share"
9981028
private let APIEndpointPaymentMethods = "payment_methods"

StripeFinancialConnections/StripeFinancialConnections/Source/API Bindings/Models/FinancialConnectionsSessionManifest.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ struct FinancialConnectionsSessionManifest: Decodable {
126126
!livemode
127127
}
128128

129+
var isPantherPayment: Bool {
130+
let isLinkPaymentMethod = paymentMethodType == .link
131+
return isProductInstantDebits && isLinkPaymentMethod
132+
}
133+
129134
init(
130135
accountholderCustomerEmailAddress: String? = nil,
131136
accountholderIsLinkConsumer: Bool? = nil,

StripeFinancialConnections/StripeFinancialConnections/Source/Native/NativeFlowController.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -513,10 +513,18 @@ extension NativeFlowController {
513513
}
514514

515515
bankAccountDetails = paymentDetails.redactedPaymentDetails.bankAccountDetails
516-
return self.dataManager.createPaymentMethod(
517-
consumerSessionClientSecret: consumerSession.clientSecret,
518-
paymentDetailsId: paymentDetails.redactedPaymentDetails.id
519-
)
516+
if self.dataManager.manifest.isPantherPayment {
517+
return self.dataManager.apiClient.sharePaymentDetails(
518+
consumerSessionClientSecret: consumerSession.clientSecret,
519+
paymentDetailsId: paymentDetails.redactedPaymentDetails.id,
520+
expectedPaymentMethodType: "card"
521+
)
522+
} else {
523+
return self.dataManager.createPaymentMethod(
524+
consumerSessionClientSecret: consumerSession.clientSecret,
525+
paymentDetailsId: paymentDetails.redactedPaymentDetails.id
526+
)
527+
}
520528
}
521529
.observe { result in
522530
switch result {
@@ -801,7 +809,7 @@ extension NativeFlowController: ManualEntryViewControllerDelegate {
801809
// to the Link signup/save call later in the flow. We don't need them anymore since we know
802810
// they've failed us in some way at this point.
803811
dataManager.linkedAccounts = nil
804-
812+
805813
dataManager.paymentAccountResource = paymentAccountResource
806814
dataManager.accountNumberLast4 = accountNumberLast4
807815

0 commit comments

Comments
 (0)