diff --git a/CHANGELOG.md b/CHANGELOG.md index 6951f1003..fd59848e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +### Breaking changes + +### New features + +## Fixes + +- Fixed an issue on iOS where `confirmSetupIntent` would throw an error if the `Card` payment method was provided with the `paymentMethodId` parameter. [#1151](https://github.com/stripe/stripe-react-native/pull/1151) + ## 0.19.0 - 2022-09-16 ### Breaking changes diff --git a/ios/StripeSdk.swift b/ios/StripeSdk.swift index ad329d23e..3ed5dc001 100644 --- a/ios/StripeSdk.swift +++ b/ios/StripeSdk.swift @@ -298,12 +298,17 @@ class StripeSdk: RCTEventEmitter, STPApplePayContextDelegate, STPBankSelectionVi return STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret, paymentMethodType: .USBankAccount) } else { let parameters = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret) - let factory = PaymentMethodFactory.init(paymentMethodData: paymentMethodData, options: options, cardFieldView: cardFieldView, cardFormView: cardFormView) - do { - let paymentMethodParams = try factory.createParams(paymentMethodType: paymentMethodType) - parameters.paymentMethodParams = paymentMethodParams - } catch { - err = Errors.createError(ErrorType.Failed, error as NSError?) + + if let paymentMethodId = paymentMethodData?["paymentMethodId"] as? String { + parameters.paymentMethodID = paymentMethodId + } else { + let factory = PaymentMethodFactory.init(paymentMethodData: paymentMethodData, options: options, cardFieldView: cardFieldView, cardFormView: cardFormView) + do { + let paymentMethodParams = try factory.createParams(paymentMethodType: paymentMethodType) + parameters.paymentMethodParams = paymentMethodParams + } catch { + err = Errors.createError(ErrorType.Failed, error as NSError?) + } } return parameters