Return 409 when setting a payment method that hasn't finished initialization

This commit is contained in:
Ravi Khadiwala 2024-12-16 14:20:24 -06:00 committed by Jon Chambers
parent a96c0ec7a3
commit 6460327372
2 changed files with 9 additions and 0 deletions

View File

@ -712,6 +712,11 @@ public class SubscriptionController {
// a missing customer ID indicates the client made requests out of order, // a missing customer ID indicates the client made requests out of order,
// and needs to call create_payment_method to create a customer for the given payment method // and needs to call create_payment_method to create a customer for the given payment method
new ClientErrorException(Status.CONFLICT))) new ClientErrorException(Status.CONFLICT)))
.exceptionally(ExceptionUtils.exceptionallyHandler(SubscriptionException.InvalidArguments.class, e -> {
// Here, invalid arguments must mean that the client has made requests out of order, and needs to finish
// setting up the paymentMethod first
throw new ClientErrorException(Status.CONFLICT);
}))
.thenApply(customer -> Response.ok().build()); .thenApply(customer -> Response.ok().build());
} }

View File

@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
import com.stripe.StripeClient; import com.stripe.StripeClient;
import com.stripe.exception.CardException; import com.stripe.exception.CardException;
import com.stripe.exception.IdempotencyException; import com.stripe.exception.IdempotencyException;
import com.stripe.exception.InvalidRequestException;
import com.stripe.exception.StripeException; import com.stripe.exception.StripeException;
import com.stripe.model.Charge; import com.stripe.model.Charge;
import com.stripe.model.Customer; import com.stripe.model.Customer;
@ -171,6 +172,9 @@ public class StripeManager implements CustomerAwareSubscriptionPaymentProcessor
try { try {
stripeClient.customers().update(customerId, params, commonOptions()); stripeClient.customers().update(customerId, params, commonOptions());
return null; return null;
} catch (InvalidRequestException e) {
// Could happen if the paymentMethodId was bunk or the client didn't actually finish setting it up
throw ExceptionUtils.wrap(new SubscriptionException.InvalidArguments(e.getMessage()));
} catch (StripeException e) { } catch (StripeException e) {
throw new CompletionException(e); throw new CompletionException(e);
} }