Propagate another subscription processor error to clients
This commit is contained in:
parent
3548c3df15
commit
bb347999ce
|
@ -285,14 +285,8 @@ public class StripeManager implements SubscriptionProcessorManager {
|
||||||
} catch (StripeException e) {
|
} catch (StripeException e) {
|
||||||
|
|
||||||
if (e instanceof CardException ce) {
|
if (e instanceof CardException ce) {
|
||||||
throw new CompletionException(new SubscriptionProcessorException(getProcessor(),
|
throw new CompletionException(
|
||||||
new ChargeFailure(
|
new SubscriptionProcessorException(getProcessor(), createChargeFailureFromCardException(e, ce)));
|
||||||
StringUtils.defaultIfBlank(ce.getDeclineCode(), ce.getCode()),
|
|
||||||
e.getStripeError().getMessage(),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new CompletionException(e);
|
throw new CompletionException(e);
|
||||||
|
@ -308,39 +302,45 @@ public class StripeManager implements SubscriptionProcessorManager {
|
||||||
final Subscription subscription = getSubscription(subscriptionObj);
|
final Subscription subscription = getSubscription(subscriptionObj);
|
||||||
|
|
||||||
return CompletableFuture.supplyAsync(() -> {
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
List<SubscriptionUpdateParams.Item> items = new ArrayList<>();
|
List<SubscriptionUpdateParams.Item> items = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
final StripeCollection<SubscriptionItem> subscriptionItems = stripeClient.subscriptionItems()
|
final StripeCollection<SubscriptionItem> subscriptionItems = stripeClient.subscriptionItems()
|
||||||
.list(SubscriptionItemListParams.builder().setSubscription(subscription.getId()).build(),
|
.list(SubscriptionItemListParams.builder().setSubscription(subscription.getId()).build(),
|
||||||
commonOptions());
|
commonOptions());
|
||||||
for (final SubscriptionItem item : subscriptionItems.autoPagingIterable()) {
|
for (final SubscriptionItem item : subscriptionItems.autoPagingIterable()) {
|
||||||
items.add(SubscriptionUpdateParams.Item.builder()
|
|
||||||
.setId(item.getId())
|
|
||||||
.setDeleted(true)
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
items.add(SubscriptionUpdateParams.Item.builder()
|
items.add(SubscriptionUpdateParams.Item.builder()
|
||||||
.setPrice(priceId)
|
.setId(item.getId())
|
||||||
.build());
|
.setDeleted(true)
|
||||||
SubscriptionUpdateParams params = SubscriptionUpdateParams.builder()
|
.build());
|
||||||
.putMetadata(METADATA_KEY_LEVEL, Long.toString(level))
|
}
|
||||||
|
items.add(SubscriptionUpdateParams.Item.builder()
|
||||||
|
.setPrice(priceId)
|
||||||
|
.build());
|
||||||
|
SubscriptionUpdateParams params = SubscriptionUpdateParams.builder()
|
||||||
|
.putMetadata(METADATA_KEY_LEVEL, Long.toString(level))
|
||||||
|
|
||||||
// since badge redemption is untrackable by design and unrevokable, subscription changes must be immediate and
|
// since badge redemption is untrackable by design and unrevokable, subscription changes must be immediate and
|
||||||
// not prorated
|
// not prorated
|
||||||
.setProrationBehavior(ProrationBehavior.NONE)
|
.setProrationBehavior(ProrationBehavior.NONE)
|
||||||
.setBillingCycleAnchor(BillingCycleAnchor.NOW)
|
.setBillingCycleAnchor(BillingCycleAnchor.NOW)
|
||||||
.setOffSession(true)
|
.setOffSession(true)
|
||||||
.setPaymentBehavior(SubscriptionUpdateParams.PaymentBehavior.ERROR_IF_INCOMPLETE)
|
.setPaymentBehavior(SubscriptionUpdateParams.PaymentBehavior.ERROR_IF_INCOMPLETE)
|
||||||
.addAllItem(items)
|
.addAllItem(items)
|
||||||
.build();
|
.build();
|
||||||
return stripeClient.subscriptions().update(subscription.getId(), params,
|
return stripeClient.subscriptions().update(subscription.getId(), params,
|
||||||
commonOptions(
|
commonOptions(
|
||||||
generateIdempotencyKeyForSubscriptionUpdate(subscription.getCustomer(), idempotencyKey)));
|
generateIdempotencyKeyForSubscriptionUpdate(subscription.getCustomer(), idempotencyKey)));
|
||||||
} catch (StripeException e) {
|
} catch (StripeException e) {
|
||||||
throw new CompletionException(e);
|
|
||||||
}
|
if (e instanceof CardException ce) {
|
||||||
}, executor)
|
throw new CompletionException(
|
||||||
.thenApply(subscription1 -> new SubscriptionId(subscription1.getId()));
|
new SubscriptionProcessorException(getProcessor(), createChargeFailureFromCardException(e, ce)));
|
||||||
|
}
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}, executor)
|
||||||
|
.thenApply(subscription1 -> new SubscriptionId(subscription1.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletableFuture<Object> getSubscription(String subscriptionId) {
|
public CompletableFuture<Object> getSubscription(String subscriptionId) {
|
||||||
|
@ -504,6 +504,16 @@ public class StripeManager implements SubscriptionProcessorManager {
|
||||||
outcome != null ? outcome.getType() : null);
|
outcome != null ? outcome.getType() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ChargeFailure createChargeFailureFromCardException(StripeException e, CardException ce) {
|
||||||
|
return new ChargeFailure(
|
||||||
|
StringUtils.defaultIfBlank(ce.getDeclineCode(), ce.getCode()),
|
||||||
|
e.getStripeError().getMessage(),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<SubscriptionInformation> getSubscriptionInformation(Object subscriptionObj) {
|
public CompletableFuture<SubscriptionInformation> getSubscriptionInformation(Object subscriptionObj) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue