Skip to content

Commit

Permalink
sync with stripe-react-native 0.26.0 (#1171)
Browse files Browse the repository at this point in the history
* sync with stripe-react-native 0.26.0

* add mandatedata to payment method and intents

* FEAT: add cashapppay payment method

* remove timeout from example app

---------

Co-authored-by: Remon <>
Co-authored-by: Rémon <remonhelmond@gmail.com>
  • Loading branch information
jonasbark and remonh87 committed Apr 18, 2023
1 parent bc89b50 commit deddf04
Show file tree
Hide file tree
Showing 18 changed files with 3,608 additions and 1,913 deletions.
4 changes: 1 addition & 3 deletions example/lib/screens/payment_sheet/payment_sheet_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,7 @@ class _PaymentSheetScreenState extends State<PaymentSheetScreen> {
Future<void> confirmPayment() async {
try {
// 3. display the payment sheet.
await Stripe.instance.presentPaymentSheet(
options: PaymentSheetPresentOptions(timeout: 10000),
);
await Stripe.instance.presentPaymentSheet();

setState(() {
step = 0;
Expand Down
2 changes: 1 addition & 1 deletion packages/stripe_android/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version '1.0-SNAPSHOT'

buildscript {
ext.kotlin_version = '1.8.0'
ext.stripe_version = '[20.19.2, 20.20.0['
ext.stripe_version = '[20.20.0, 20.22.0['

repositories {
google()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class PaymentMethodCreateParamsFactory(
PaymentMethod.Type.USBankAccount -> createUSBankAccountParams(paymentMethodData)
PaymentMethod.Type.PayPal -> createPayPalParams()
PaymentMethod.Type.Affirm -> createAffirmParams()
PaymentMethod.Type.CashAppPay -> createCashAppParams()
else -> {
throw Exception("This paymentMethodType is not supported yet")
}
Expand Down Expand Up @@ -202,13 +203,17 @@ class PaymentMethodCreateParamsFactory(
return PaymentMethodCreateParams.createAffirm(billingDetailsParams)
}

@Throws(PaymentMethodCreateParamsException::class)
private fun createCashAppParams(): PaymentMethodCreateParams {
return PaymentMethodCreateParams.createCashAppPay(billingDetailsParams)
}

@Throws(PaymentMethodCreateParamsException::class)
fun createParams(clientSecret: String, paymentMethodType: PaymentMethod.Type?, isPaymentIntent: Boolean): ConfirmStripeIntentParams {
try {
return when (paymentMethodType) {
PaymentMethod.Type.Card -> createCardStripeIntentParams(clientSecret, isPaymentIntent)
PaymentMethod.Type.USBankAccount -> createUSBankAccountStripeIntentParams(clientSecret, isPaymentIntent)
PaymentMethod.Type.PayPal -> createPayPalStripeIntentParams(clientSecret, isPaymentIntent)
PaymentMethod.Type.Affirm -> createAffirmStripeIntentParams(clientSecret, isPaymentIntent)
PaymentMethod.Type.Ideal,
PaymentMethod.Type.Alipay,
Expand All @@ -223,7 +228,9 @@ class PaymentMethodCreateParamsFactory(
PaymentMethod.Type.Fpx,
PaymentMethod.Type.AfterpayClearpay,
PaymentMethod.Type.AuBecsDebit,
PaymentMethod.Type.Klarna -> {
PaymentMethod.Type.Klarna,

Check warning on line 231 in packages/stripe_android/android/src/main/kotlin/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt

View workflow job for this annotation

GitHub Actions / Typo CI

Klarna

"Klarna" is a typo. Did you mean "Carnal"?
PaymentMethod.Type.PayPal,
PaymentMethod.Type.CashAppPay -> {
val params = createPaymentMethodParams(paymentMethodType)

return if (isPaymentIntent) {
Expand All @@ -232,11 +239,13 @@ class PaymentMethodCreateParamsFactory(
paymentMethodCreateParams = params,
clientSecret = clientSecret,
setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")),
mandateData = buildMandateDataParams()
)
} else {
ConfirmSetupIntentParams.create(
paymentMethodCreateParams = params,
clientSecret = clientSecret,
mandateData = buildMandateDataParams()
)
}
}
Expand Down Expand Up @@ -339,20 +348,6 @@ class PaymentMethodCreateParamsFactory(
}
}

@Throws(PaymentMethodCreateParamsException::class)
private fun createPayPalStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams {
if (!isPaymentIntent) {
throw PaymentMethodCreateParamsException("PayPal is not yet supported through SetupIntents.")
}

val params = createPayPalParams()

return ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams(
paymentMethodCreateParams = params,
clientSecret = clientSecret,
)
}

@Throws(PaymentMethodCreateParamsException::class)
private fun createAffirmStripeIntentParams(clientSecret: String, isPaymentIntent: Boolean): ConfirmStripeIntentParams {
if (!isPaymentIntent) {
Expand All @@ -366,6 +361,7 @@ class PaymentMethodCreateParamsFactory(
paymentMethodCreateParams = params,
clientSecret = clientSecret,
setupFutureUsage = mapToPaymentIntentFutureUsage(getValOr(options, "setupFutureUsage")),
mandateData = buildMandateDataParams()
)
}

Expand Down Expand Up @@ -401,6 +397,20 @@ class PaymentMethodCreateParamsFactory(
null
)
}

private fun buildMandateDataParams(): MandateDataParams? {
getMapOrNull(paymentMethodData, "mandateData")?.let { mandateData ->
getMapOrNull(mandateData, "customerAcceptance")?.let { customerAcceptance ->
getMapOrNull(customerAcceptance, "online")?.let { onlineParams ->
return MandateDataParams(MandateDataParams.Type.Online(
ipAddress = getValOr(onlineParams, "ipAddress", "") ?: "",
userAgent = getValOr(onlineParams, "userAgent", "") ?: "",
))
}
}
}
return null
}
}

class PaymentMethodCreateParamsException(message: String) : Exception(message)
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ internal fun mapPaymentMethodType(type: PaymentMethod.Type?): String {
PaymentMethod.Type.USBankAccount -> "USBankAccount"
PaymentMethod.Type.PayPal -> "PayPal"
PaymentMethod.Type.Affirm -> "Affirm"
PaymentMethod.Type.CashAppPay -> "CashApp"
else -> "Unknown"
}
}
Expand Down Expand Up @@ -152,6 +153,7 @@ internal fun mapToPaymentMethodType(type: String?): PaymentMethod.Type? {
"USBankAccount" -> PaymentMethod.Type.USBankAccount
"PayPal" -> PaymentMethod.Type.PayPal
"Affirm" -> PaymentMethod.Type.Affirm
"CashApp" -> PaymentMethod.Type.CashAppPay
else -> null
}
}
Expand Down
2 changes: 2 additions & 0 deletions packages/stripe_ios/ios/Classes/Stripe Sdk/Mappers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ class Mappers {
case STPPaymentMethodType.USBankAccount: return "USBankAccount"
case STPPaymentMethodType.payPal: return "PayPal"
case STPPaymentMethodType.affirm: return "Affirm"
case STPPaymentMethodType.cashApp: return "CashApp"
case STPPaymentMethodType.unknown: return "Unknown"
default: return "Unknown"
}
Expand Down Expand Up @@ -322,6 +323,7 @@ class Mappers {
case "USBankAccount": return STPPaymentMethodType.USBankAccount
case "PayPal": return STPPaymentMethodType.payPal
case "Affirm": return STPPaymentMethodType.affirm
case "CashApp": return STPPaymentMethodType.cashApp
default: return STPPaymentMethodType.unknown
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ class PaymentMethodFactory {
return try createPayPalPaymentMethodParams()
case STPPaymentMethodType.affirm:
return try createAffirmPaymentMethodParams()
case STPPaymentMethodType.cashApp:
return try createCashAppPaymentMethodParams()
// case STPPaymentMethodType.weChatPay:
// return try createWeChatPayPaymentMethodParams()
default:
Expand Down Expand Up @@ -106,6 +108,8 @@ class PaymentMethodFactory {
return nil
case STPPaymentMethodType.affirm:
return nil
case STPPaymentMethodType.cashApp:
return nil
default:
throw PaymentMethodError.paymentNotSupported
}
Expand Down Expand Up @@ -369,6 +373,26 @@ class PaymentMethodFactory {
let params = STPPaymentMethodAffirmParams()
return STPPaymentMethodParams(affirm: params, metadata: nil)
}

private func createCashAppPaymentMethodParams() throws -> STPPaymentMethodParams {
let params = STPPaymentMethodCashAppParams()
return STPPaymentMethodParams(cashApp: params, billingDetails: billingDetailsParams, metadata: nil)
}

func createMandateData() -> STPMandateDataParams? {
if let mandateParams = paymentMethodData?["mandateData"] as? NSDictionary {
if let customerAcceptanceParams = mandateParams["customerAcceptance"] as? NSDictionary {
let mandate = STPMandateDataParams.init(customerAcceptance: STPMandateCustomerAcceptanceParams.init())

mandate.customerAcceptance.type = .online
if let onlineParams = customerAcceptanceParams["online"] as? NSDictionary {
mandate.customerAcceptance.onlineParams = .init(ipAddress: onlineParams["ipAddress"] as? String ?? "", userAgent: onlineParams["userAgent"] as? String ?? "")
}
return mandate
}
}
return nil
}
}

enum PaymentMethodError: Error {
Expand Down
7 changes: 2 additions & 5 deletions packages/stripe_ios/ios/Classes/Stripe Sdk/StripeSdk.swift
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,6 @@ class StripeSdk: RCTEventEmitter, STPBankSelectionViewControllerDelegate, UIAdap
return
}

if (paymentMethodType == .payPal) {
resolve(Errors.createError(ErrorType.Failed, "PayPal is not yet supported through SetupIntents."))
return
}

var err: NSDictionary? = nil
let setupIntentParams: STPSetupIntentConfirmParams = {
// If payment method data is not supplied, assume payment method was attached through via collectBankAccount
Expand All @@ -260,6 +255,7 @@ class StripeSdk: RCTEventEmitter, STPBankSelectionViewControllerDelegate, UIAdap
do {
let paymentMethodParams = try factory.createParams(paymentMethodType: paymentMethodType)
parameters.paymentMethodParams = paymentMethodParams
parameters.mandateData = factory.createMandateData()
} catch {
err = Errors.createError(ErrorType.Failed, error as NSError?)
}
Expand Down Expand Up @@ -881,6 +877,7 @@ class StripeSdk: RCTEventEmitter, STPBankSelectionViewControllerDelegate, UIAdap
let paymentMethodOptions = try factory.createOptions(paymentMethodType: paymentMethodType)
parameters.paymentMethodParams = paymentMethodParams
parameters.paymentMethodOptions = paymentMethodOptions
parameters.mandateData = factory.createMandateData()
} catch {
err = Errors.createError(ErrorType.Failed, error as NSError?)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/stripe_ios/ios/stripe_ios.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint stripe_ios.podspec' to validate before publishing.
#
stripe_version = '~> 23.3.3'
stripe_version = '~> 23.5.0'
Pod::Spec.new do |s|
s.name = 'stripe_ios'
s.version = '0.0.1'
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';

import 'address.dart';
import 'next_action.dart';
import 'payment_methods.dart';

part 'payment_intents.freezed.dart';
part 'payment_intents.g.dart';
Expand Down Expand Up @@ -61,6 +62,9 @@ class PaymentIntent with _$PaymentIntent {

/// Shipping information of the payment intent.
ShippingDetails? shipping,

/// Mandata data for this paymentintent.

Check warning on line 66 in packages/stripe_platform_interface/lib/src/models/payment_intents.dart

View workflow job for this annotation

GitHub Actions / Typo CI

Mandata

"Mandata" is a typo. Did you mean "Mandate"?
MandateData? mandateData,
}) = _PaymentIntent;

factory PaymentIntent.fromJson(Map<String, dynamic> json) =>
Expand Down

0 comments on commit deddf04

Please sign in to comment.