Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MOBILESDK 2686] When “Set as default” checkbox is checked, set set_as_default_payment_method on PaymentIntent/SetupIntent #10219

Merged
merged 15 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions payments-core/api/payments-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -1989,8 +1989,8 @@ public final class com/stripe/android/model/ConfirmPaymentIntentParams : com/str
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Ljava/lang/Boolean;
public final fun component9 ()Lcom/stripe/android/model/PaymentMethodOptionsParams;
public final fun copy (Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/SourceParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ZLcom/stripe/android/model/PaymentMethodOptionsParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;Lcom/stripe/android/model/ConfirmPaymentIntentParams$SetupFutureUsage;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;Ljava/lang/String;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public static synthetic fun copy$default (Lcom/stripe/android/model/ConfirmPaymentIntentParams;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/SourceParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ZLcom/stripe/android/model/PaymentMethodOptionsParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;Lcom/stripe/android/model/ConfirmPaymentIntentParams$SetupFutureUsage;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;Ljava/lang/String;ILjava/lang/Object;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public final fun copy (Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/SourceParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ZLcom/stripe/android/model/PaymentMethodOptionsParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;Lcom/stripe/android/model/ConfirmPaymentIntentParams$SetupFutureUsage;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public static synthetic fun copy$default (Lcom/stripe/android/model/ConfirmPaymentIntentParams;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/SourceParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ZLcom/stripe/android/model/PaymentMethodOptionsParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;Lcom/stripe/android/model/ConfirmPaymentIntentParams$SetupFutureUsage;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public static final fun create (Ljava/lang/String;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public static final fun create (Ljava/lang/String;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
public static final fun create (Ljava/lang/String;Lcom/stripe/android/model/ConfirmPaymentIntentParams$Shipping;Lcom/stripe/android/model/ConfirmPaymentIntentParams$SetupFutureUsage;)Lcom/stripe/android/model/ConfirmPaymentIntentParams;
Expand Down Expand Up @@ -2133,8 +2133,8 @@ public final class com/stripe/android/model/ConfirmSetupIntentParams : com/strip
public final fun component4 ()Ljava/lang/String;
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Lcom/stripe/android/model/MandateDataParams;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;ZLjava/lang/String;Lcom/stripe/android/model/MandateDataParams;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public static synthetic fun copy$default (Lcom/stripe/android/model/ConfirmSetupIntentParams;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;ZLjava/lang/String;Lcom/stripe/android/model/MandateDataParams;ILjava/lang/Object;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;ZLjava/lang/String;Lcom/stripe/android/model/MandateDataParams;Ljava/lang/Boolean;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public static synthetic fun copy$default (Lcom/stripe/android/model/ConfirmSetupIntentParams;Ljava/lang/String;Ljava/lang/String;Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;ZLjava/lang/String;Lcom/stripe/android/model/MandateDataParams;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public static final fun create (Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public static final fun create (Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
public static final fun create (Lcom/stripe/android/model/PaymentMethodCreateParams;Ljava/lang/String;Lcom/stripe/android/model/MandateDataParams;Ljava/lang/String;)Lcom/stripe/android/model/ConfirmSetupIntentParams;
Expand Down Expand Up @@ -4388,6 +4388,22 @@ public final class com/stripe/android/model/PaymentMethodExtraParams$BacsDebit$C
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/model/PaymentMethodExtraParams$Card$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/model/PaymentMethodExtraParams$Card;
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
public final fun newArray (I)[Lcom/stripe/android/model/PaymentMethodExtraParams$Card;
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/model/PaymentMethodExtraParams$USBankAccount$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/model/PaymentMethodExtraParams$USBankAccount;
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
public final fun newArray (I)[Lcom/stripe/android/model/PaymentMethodExtraParams$USBankAccount;
public synthetic fun newArray (I)[Ljava/lang/Object;
}

public final class com/stripe/android/model/PaymentMethodMessage$Creator : android/os/Parcelable$Creator {
public fun <init> ()V
public final fun createFromParcel (Landroid/os/Parcel;)Lcom/stripe/android/model/PaymentMethodMessage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.stripe.android.model.MandateDataParams
import com.stripe.android.model.PaymentIntent
import com.stripe.android.model.PaymentMethod
import com.stripe.android.model.PaymentMethodCreateParams
import com.stripe.android.model.PaymentMethodExtraParams
import com.stripe.android.model.PaymentMethodOptionsParams
import com.stripe.android.model.SetupIntent
import com.stripe.android.model.StripeIntent
Expand All @@ -22,21 +23,25 @@ sealed class ConfirmStripeIntentParamsFactory<out T : ConfirmStripeIntentParams>
paymentMethodId: String,
paymentMethodType: PaymentMethod.Type?,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?,
): T

abstract fun create(
createParams: PaymentMethodCreateParams,
optionsParams: PaymentMethodOptionsParams? = null,
extraParams: PaymentMethodExtraParams? = null,
): T

fun create(
paymentMethod: PaymentMethod,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?,
): T {
return create(
paymentMethodId = paymentMethod.id.orEmpty(),
paymentMethodType = paymentMethod.type,
optionsParams = optionsParams,
extraParams = extraParams,
)
}

Expand Down Expand Up @@ -69,6 +74,7 @@ internal class ConfirmPaymentIntentParamsFactory(
paymentMethodId: String,
paymentMethodType: PaymentMethod.Type?,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?
): ConfirmPaymentIntentParams {
return ConfirmPaymentIntentParams.createWithPaymentMethodId(
paymentMethodId = paymentMethodId,
Expand All @@ -82,12 +88,14 @@ internal class ConfirmPaymentIntentParamsFactory(
override fun create(
createParams: PaymentMethodCreateParams,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?,
): ConfirmPaymentIntentParams {
return ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams(
return ConfirmPaymentIntentParams.createWithSetAsDefaultPaymentMethod(
paymentMethodCreateParams = createParams,
clientSecret = clientSecret,
paymentMethodOptions = optionsParams,
shipping = shipping,
setAsDefaultPaymentMethod = extraParams?.extractSetAsDefaultPaymentMethodFromExtraParams()
)
}
}
Expand All @@ -101,6 +109,7 @@ internal class ConfirmSetupIntentParamsFactory(
paymentMethodId: String,
paymentMethodType: PaymentMethod.Type?,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?,
): ConfirmSetupIntentParams {
return ConfirmSetupIntentParams.create(
paymentMethodId = paymentMethodId,
Expand All @@ -112,10 +121,12 @@ internal class ConfirmSetupIntentParamsFactory(
override fun create(
createParams: PaymentMethodCreateParams,
optionsParams: PaymentMethodOptionsParams?,
extraParams: PaymentMethodExtraParams?,
): ConfirmSetupIntentParams {
return ConfirmSetupIntentParams.create(
return ConfirmSetupIntentParams.createWithSetAsDefaultPaymentMethod(
paymentMethodCreateParams = createParams,
clientSecret = clientSecret,
setAsDefaultPaymentMethod = extraParams?.extractSetAsDefaultPaymentMethodFromExtraParams()
)
}
}
Expand All @@ -141,3 +152,11 @@ private fun PaymentIntent.canSetupFutureUsage(): Boolean {
StripeIntent.Usage.OffSession -> true
}
}

private fun PaymentMethodExtraParams.extractSetAsDefaultPaymentMethodFromExtraParams(): Boolean? {
return when (this) {
is PaymentMethodExtraParams.Card -> this.setAsDefault
is PaymentMethodExtraParams.USBankAccount -> this.setAsDefault
else -> null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_MANDAT
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_PAYMENT_METHOD_DATA
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_PAYMENT_METHOD_ID
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_RETURN_URL
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_SET_AS_DEFAULT_PAYMENT_METHOD
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_USE_STRIPE_SDK
import kotlinx.parcelize.Parcelize

Expand Down Expand Up @@ -118,6 +119,12 @@ constructor(
* See [receipt_email](https://stripe.com/docs/api/payment_intents/confirm#confirm_payment_intent-receipt_email).
*/
var receiptEmail: String? = null,

/**
* Indicates that this should be the default payment method going forward.
*/
internal val setAsDefaultPaymentMethod: Boolean? = null,

) : ConfirmStripeIntentParams {
fun shouldSavePaymentMethod(): Boolean {
return savePaymentMethod == true
Expand Down Expand Up @@ -158,6 +165,10 @@ constructor(
setupFutureUsage?.let {
mapOf(PARAM_SETUP_FUTURE_USAGE to it.code)
}.orEmpty()
).plus(
setAsDefaultPaymentMethod?.let {
mapOf(PARAM_SET_AS_DEFAULT_PAYMENT_METHOD to it)
}.orEmpty()
).plus(
shipping?.let {
mapOf(PARAM_SHIPPING to it.toParamMap())
Expand Down Expand Up @@ -389,7 +400,7 @@ constructor(
mandateId: String? = null,
mandateData: MandateDataParams? = null,
setupFutureUsage: SetupFutureUsage? = null,
shipping: Shipping? = null
shipping: Shipping? = null,
): ConfirmPaymentIntentParams {
return ConfirmPaymentIntentParams(
clientSecret = clientSecret,
Expand All @@ -399,7 +410,7 @@ constructor(
mandateId = mandateId,
mandateData = mandateData,
setupFutureUsage = setupFutureUsage,
shipping = shipping
shipping = shipping,
)
}

Expand Down Expand Up @@ -431,17 +442,18 @@ constructor(
mandateData: MandateDataParams? = null,
setupFutureUsage: SetupFutureUsage? = null,
shipping: Shipping? = null,
paymentMethodOptions: PaymentMethodOptionsParams? = null
paymentMethodOptions: PaymentMethodOptionsParams? = null,
): ConfirmPaymentIntentParams {
return ConfirmPaymentIntentParams(
return createWithSetAsDefaultPaymentMethod(
clientSecret = clientSecret,
paymentMethodCreateParams = paymentMethodCreateParams,
savePaymentMethod = savePaymentMethod,
mandateId = mandateId,
mandateData = mandateData,
setupFutureUsage = setupFutureUsage,
shipping = shipping,
paymentMethodOptions = paymentMethodOptions
paymentMethodOptions = paymentMethodOptions,
setAsDefaultPaymentMethod = null,
)
}

Expand Down Expand Up @@ -529,6 +541,30 @@ constructor(
)
}

internal fun createWithSetAsDefaultPaymentMethod(
paymentMethodCreateParams: PaymentMethodCreateParams,
clientSecret: String,
savePaymentMethod: Boolean? = null,
mandateId: String? = null,
mandateData: MandateDataParams? = null,
setupFutureUsage: SetupFutureUsage? = null,
shipping: Shipping? = null,
paymentMethodOptions: PaymentMethodOptionsParams? = null,
setAsDefaultPaymentMethod: Boolean?,
): ConfirmPaymentIntentParams {
return ConfirmPaymentIntentParams(
clientSecret = clientSecret,
paymentMethodCreateParams = paymentMethodCreateParams,
savePaymentMethod = savePaymentMethod,
mandateId = mandateId,
mandateData = mandateData,
setupFutureUsage = setupFutureUsage,
shipping = shipping,
paymentMethodOptions = paymentMethodOptions,
setAsDefaultPaymentMethod = setAsDefaultPaymentMethod,
)
}

internal fun createForDashboard(
clientSecret: String,
paymentMethodId: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_MANDAT
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_PAYMENT_METHOD_DATA
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_PAYMENT_METHOD_ID
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_RETURN_URL
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_SET_AS_DEFAULT_PAYMENT_METHOD
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_USE_STRIPE_SDK
import kotlinx.parcelize.Parcelize

Expand Down Expand Up @@ -48,6 +49,11 @@ constructor(
* See [mandate_data](https://stripe.com/docs/api/setup_intents/confirm#confirm_setup_intent-mandate_data).
*/
var mandateData: MandateDataParams? = null,

/**
* Indicates that this should be the default payment method going forward.
*/
internal val setAsDefaultPaymentMethod: Boolean? = null,
) : ConfirmStripeIntentParams {

override fun shouldUseStripeSdk(): Boolean {
Expand All @@ -74,6 +80,10 @@ constructor(
mandateDataParams?.let {
mapOf(PARAM_MANDATE_DATA to it)
}.orEmpty()
).plus(
setAsDefaultPaymentMethod?.let {
mapOf(PARAM_SET_AS_DEFAULT_PAYMENT_METHOD to it)
}.orEmpty()
).plus(paymentMethodParamMap)
}

Expand Down Expand Up @@ -194,13 +204,30 @@ constructor(
paymentMethodCreateParams: PaymentMethodCreateParams,
clientSecret: String,
mandateData: MandateDataParams? = null,
mandateId: String? = null
mandateId: String? = null,
): ConfirmSetupIntentParams {
return createWithSetAsDefaultPaymentMethod(
clientSecret = clientSecret,
paymentMethodCreateParams = paymentMethodCreateParams,
mandateId = mandateId,
mandateData = mandateData,
setAsDefaultPaymentMethod = null,
)
}

internal fun createWithSetAsDefaultPaymentMethod(
paymentMethodCreateParams: PaymentMethodCreateParams,
clientSecret: String,
mandateData: MandateDataParams? = null,
mandateId: String? = null,
setAsDefaultPaymentMethod: Boolean?,
): ConfirmSetupIntentParams {
return ConfirmSetupIntentParams(
clientSecret = clientSecret,
paymentMethodCreateParams = paymentMethodCreateParams,
mandateId = mandateId,
mandateData = mandateData
mandateData = mandateData,
setAsDefaultPaymentMethod = setAsDefaultPaymentMethod
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ sealed interface ConfirmStripeIntentParams : StripeParamsModel, Parcelable {
internal const val PARAM_USE_STRIPE_SDK: String = "use_stripe_sdk"
internal const val PARAM_MANDATE_ID: String = "mandate"
internal const val PARAM_MANDATE_DATA = "mandate_data"
internal const val PARAM_SET_AS_DEFAULT_PAYMENT_METHOD = "set_as_default_payment_method"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.stripe.android.model

import android.os.Parcelable
import androidx.annotation.RestrictTo
import com.stripe.android.model.ConfirmStripeIntentParams.Companion.PARAM_SET_AS_DEFAULT_PAYMENT_METHOD
import kotlinx.parcelize.Parcelize

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
Expand Down Expand Up @@ -39,4 +40,28 @@ sealed class PaymentMethodExtraParams(
const val PARAM_CONFIRMED = "confirmed"
}
}

@Parcelize
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
data class Card(
val setAsDefault: Boolean? = null
) : PaymentMethodExtraParams(PaymentMethod.Type.Card) {
override fun createTypeParams(): List<Pair<String, Any?>> {
return listOf(
PARAM_SET_AS_DEFAULT_PAYMENT_METHOD to setAsDefault?.toString()
)
}
}

@Parcelize
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
data class USBankAccount(
val setAsDefault: Boolean? = null
) : PaymentMethodExtraParams(PaymentMethod.Type.USBankAccount) {
override fun createTypeParams(): List<Pair<String, Any?>> {
return listOf(
PARAM_SET_AS_DEFAULT_PAYMENT_METHOD to setAsDefault?.toString()
)
}
}
}
Loading
Loading