From 093f17dce254f42765d10d7fb42eb055fe4d0eca Mon Sep 17 00:00:00 2001
From: Chris Eager <79161849+eager-signal@users.noreply.github.com>
Date: Tue, 29 Aug 2023 17:18:16 -0500
Subject: [PATCH] Update to stripe-java 23.1.1
---
pom.xml | 2 +-
.../subscriptions/StripeManager.java | 74 ++++++++++++-------
2 files changed, 50 insertions(+), 26 deletions(-)
diff --git a/pom.xml b/pom.xml
index d0580fa08..78c6978b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
1.7.0
3.1.0
1.7.36
- 22.30.0
+ 23.1.1
0.10.4
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
index d5f313206..23fa3893f 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/subscriptions/StripeManager.java
@@ -7,6 +7,7 @@ package org.whispersystems.textsecuregcm.subscriptions;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
+import com.stripe.StripeClient;
import com.stripe.exception.StripeException;
import com.stripe.model.Charge;
import com.stripe.model.Customer;
@@ -16,6 +17,7 @@ import com.stripe.model.PaymentIntent;
import com.stripe.model.Price;
import com.stripe.model.Product;
import com.stripe.model.SetupIntent;
+import com.stripe.model.StripeCollection;
import com.stripe.model.Subscription;
import com.stripe.model.SubscriptionItem;
import com.stripe.net.RequestOptions;
@@ -29,6 +31,7 @@ import com.stripe.param.PriceRetrieveParams;
import com.stripe.param.SetupIntentCreateParams;
import com.stripe.param.SubscriptionCancelParams;
import com.stripe.param.SubscriptionCreateParams;
+import com.stripe.param.SubscriptionItemListParams;
import com.stripe.param.SubscriptionListParams;
import com.stripe.param.SubscriptionRetrieveParams;
import com.stripe.param.SubscriptionUpdateParams;
@@ -69,7 +72,7 @@ public class StripeManager implements SubscriptionProcessorManager {
private static final String METADATA_KEY_LEVEL = "level";
- private final String apiKey;
+ private final StripeClient stripeClient;
private final Executor executor;
private final byte[] idempotencyKeyGenerator;
private final String boostDescription;
@@ -81,10 +84,10 @@ public class StripeManager implements SubscriptionProcessorManager {
@Nonnull byte[] idempotencyKeyGenerator,
@Nonnull String boostDescription,
@Nonnull Set supportedCurrencies) {
- this.apiKey = Objects.requireNonNull(apiKey);
if (Strings.isNullOrEmpty(apiKey)) {
throw new IllegalArgumentException("apiKey cannot be empty");
}
+ this.stripeClient = new StripeClient(apiKey);
this.executor = Objects.requireNonNull(executor);
this.idempotencyKeyGenerator = Objects.requireNonNull(idempotencyKeyGenerator);
if (idempotencyKeyGenerator.length == 0) {
@@ -116,7 +119,6 @@ public class StripeManager implements SubscriptionProcessorManager {
private RequestOptions commonOptions(@Nullable String idempotencyKey) {
return RequestOptions.builder()
.setIdempotencyKey(idempotencyKey)
- .setApiKey(apiKey)
.build();
}
@@ -127,7 +129,8 @@ public class StripeManager implements SubscriptionProcessorManager {
.putMetadata("subscriberUser", HexFormat.of().formatHex(subscriberUser))
.build();
try {
- return Customer.create(params, commonOptions(generateIdempotencyKeyForSubscriberUser(subscriberUser)));
+ return stripeClient.customers()
+ .create(params, commonOptions(generateIdempotencyKeyForSubscriberUser(subscriberUser)));
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -139,7 +142,7 @@ public class StripeManager implements SubscriptionProcessorManager {
return CompletableFuture.supplyAsync(() -> {
CustomerRetrieveParams params = CustomerRetrieveParams.builder().build();
try {
- return Customer.retrieve(customerId, params, commonOptions());
+ return stripeClient.customers().retrieve(customerId, params, commonOptions());
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -150,15 +153,13 @@ public class StripeManager implements SubscriptionProcessorManager {
public CompletableFuture setDefaultPaymentMethodForCustomer(String customerId, String paymentMethodId,
@Nullable String currentSubscriptionId) {
return CompletableFuture.supplyAsync(() -> {
- Customer customer = new Customer();
- customer.setId(customerId);
CustomerUpdateParams params = CustomerUpdateParams.builder()
.setInvoiceSettings(InvoiceSettings.builder()
.setDefaultPaymentMethod(paymentMethodId)
.build())
.build();
try {
- customer.update(params, commonOptions());
+ stripeClient.customers().update(customerId, params, commonOptions());
return null;
} catch (StripeException e) {
throw new CompletionException(e);
@@ -173,7 +174,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.setCustomer(customerId)
.build();
try {
- return SetupIntent.create(params, commonOptions());
+ return stripeClient.setupIntents().create(params, commonOptions());
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -198,7 +199,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.putMetadata("level", Long.toString(level))
.build();
try {
- return PaymentIntent.create(params, commonOptions());
+ return stripeClient.paymentIntents().create(params, commonOptions());
} catch (StripeException e) {
if ("amount_too_small".equalsIgnoreCase(e.getCode())) {
throw new WebApplicationException(Response
@@ -215,7 +216,7 @@ public class StripeManager implements SubscriptionProcessorManager {
public CompletableFuture getPaymentDetails(String paymentIntentId) {
return CompletableFuture.supplyAsync(() -> {
try {
- final PaymentIntent paymentIntent = PaymentIntent.retrieve(paymentIntentId, commonOptions());
+ final PaymentIntent paymentIntent = stripeClient.paymentIntents().retrieve(paymentIntentId, commonOptions());
return new PaymentDetails(paymentIntent.getId(),
paymentIntent.getMetadata() == null ? Collections.emptyMap() : paymentIntent.getMetadata(),
@@ -263,7 +264,8 @@ public class StripeManager implements SubscriptionProcessorManager {
//
// If the client tells the server several times in a row before the initial creation of a subscription to
// create a subscription, we want to ensure only one gets created.
- return Subscription.create(params, commonOptions(generateIdempotencyKeyForCreateSubscription(
+ return stripeClient.subscriptions()
+ .create(params, commonOptions(generateIdempotencyKeyForCreateSubscription(
customerId, lastSubscriptionCreatedAt)));
} catch (StripeException e) {
throw new CompletionException(e);
@@ -280,7 +282,11 @@ public class StripeManager implements SubscriptionProcessorManager {
return CompletableFuture.supplyAsync(() -> {
List items = new ArrayList<>();
- for (final SubscriptionItem item : subscription.getItems().autoPagingIterable(null, commonOptions())) {
+ try {
+ final StripeCollection subscriptionItems = stripeClient.subscriptionItems()
+ .list(SubscriptionItemListParams.builder().setSubscription(subscription.getId()).build(),
+ commonOptions());
+ for (final SubscriptionItem item : subscriptionItems.autoPagingIterable()) {
items.add(SubscriptionUpdateParams.Item.builder()
.setId(item.getId())
.setDeleted(true)
@@ -300,9 +306,9 @@ public class StripeManager implements SubscriptionProcessorManager {
.setPaymentBehavior(SubscriptionUpdateParams.PaymentBehavior.ERROR_IF_INCOMPLETE)
.addAllItem(items)
.build();
- try {
- return subscription.update(params, commonOptions(generateIdempotencyKeyForSubscriptionUpdate(
- subscription.getCustomer(), idempotencyKey)));
+ return stripeClient.subscriptions().update(subscription.getId(), params,
+ commonOptions(
+ generateIdempotencyKeyForSubscriptionUpdate(subscription.getCustomer(), idempotencyKey)));
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -317,7 +323,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.addExpand("latest_invoice.charge")
.build();
try {
- return Subscription.retrieve(subscriptionId, params, commonOptions());
+ return stripeClient.subscriptions().retrieve(subscriptionId, params, commonOptions());
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -345,7 +351,8 @@ public class StripeManager implements SubscriptionProcessorManager {
.setCustomer(customer.getId())
.build();
try {
- return Lists.newArrayList(Subscription.list(params, commonOptions()).autoPagingIterable(null, commonOptions()));
+ return Lists.newArrayList(
+ stripeClient.subscriptions().list(params, commonOptions()).autoPagingIterable(null, commonOptions()));
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -356,7 +363,7 @@ public class StripeManager implements SubscriptionProcessorManager {
return CompletableFuture.supplyAsync(() -> {
SubscriptionCancelParams params = SubscriptionCancelParams.builder().build();
try {
- return subscription.cancel(params, commonOptions());
+ return stripeClient.subscriptions().cancel(subscription.getId(), params, commonOptions());
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -369,7 +376,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.setCancelAtPeriodEnd(true)
.build();
try {
- return subscription.update(params, commonOptions());
+ return stripeClient.subscriptions().update(subscription.getId(), params, commonOptions());
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -378,7 +385,16 @@ public class StripeManager implements SubscriptionProcessorManager {
public CompletableFuture> getItemsForSubscription(Subscription subscription) {
return CompletableFuture.supplyAsync(
- () -> Lists.newArrayList(subscription.getItems().autoPagingIterable(null, commonOptions())),
+ () -> {
+ try {
+ final StripeCollection subscriptionItems = stripeClient.subscriptionItems().list(
+ SubscriptionItemListParams.builder().setSubscription(subscription.getId()).build(), commonOptions());
+ return Lists.newArrayList(subscriptionItems.autoPagingIterable(null, commonOptions()));
+
+ } catch (final StripeException e) {
+ throw new CompletionException(e);
+ }
+ },
executor);
}
@@ -416,7 +432,7 @@ public class StripeManager implements SubscriptionProcessorManager {
return CompletableFuture.supplyAsync(() -> {
PriceRetrieveParams params = PriceRetrieveParams.builder().addExpand("product").build();
try {
- return Price.retrieve(priceId, params, commonOptions()).getProductObject();
+ return stripeClient.prices().retrieve(priceId, params, commonOptions()).getProductObject();
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -441,7 +457,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.build())
.build();
try {
- ArrayList invoices = Lists.newArrayList(Invoice.list(params, commonOptions())
+ ArrayList invoices = Lists.newArrayList(stripeClient.invoices().list(params, commonOptions())
.autoPagingIterable(null, commonOptions()));
invoices.sort(Comparator.comparingLong(Invoice::getCreated).reversed());
return invoices;
@@ -505,7 +521,7 @@ public class StripeManager implements SubscriptionProcessorManager {
.addExpand("latest_invoice")
.build();
try {
- return Subscription.retrieve(subscriptionId, params, commonOptions()).getLatestInvoiceObject();
+ return stripeClient.subscriptions().retrieve(subscriptionId, params, commonOptions()).getLatestInvoiceObject();
} catch (StripeException e) {
throw new CompletionException(e);
}
@@ -551,7 +567,15 @@ public class StripeManager implements SubscriptionProcessorManager {
public CompletableFuture> getInvoiceLineItemsForInvoice(Invoice invoice) {
return CompletableFuture.supplyAsync(
- () -> Lists.newArrayList(invoice.getLines().autoPagingIterable(null, commonOptions())), executor);
+ () -> {
+ try {
+ final StripeCollection lineItems = stripeClient.invoices().lineItems()
+ .list(invoice.getId(), commonOptions());
+ return Lists.newArrayList(lineItems.autoPagingIterable(null, commonOptions()));
+ } catch (final StripeException e) {
+ throw new CompletionException(e);
+ }
+ }, executor);
}
/**