Add method to set default payment method
This commit is contained in:
parent
f84e7aebd0
commit
75c5032cd3
|
@ -11,7 +11,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.stripe.model.Invoice;
|
import com.stripe.model.Invoice;
|
||||||
import com.stripe.model.InvoiceLineItem;
|
import com.stripe.model.InvoiceLineItem;
|
||||||
import com.stripe.model.Product;
|
|
||||||
import com.stripe.model.Subscription;
|
import com.stripe.model.Subscription;
|
||||||
import io.dropwizard.auth.Auth;
|
import io.dropwizard.auth.Auth;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -33,6 +32,7 @@ import java.util.stream.Collectors;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.crypto.Mac;
|
import javax.crypto.Mac;
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.ws.rs.BadRequestException;
|
import javax.ws.rs.BadRequestException;
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
|
@ -190,6 +190,22 @@ public class SubscriptionController {
|
||||||
.thenApply(setupIntent -> Response.ok(new CreatePaymentMethodResponse(setupIntent.getClientSecret())).build());
|
.thenApply(setupIntent -> Response.ok(new CreatePaymentMethodResponse(setupIntent.getClientSecret())).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Timed
|
||||||
|
@POST
|
||||||
|
@Path("/{subscriberId}/default_payment_method/{paymentMethodId}")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public CompletableFuture<Response> setDefaultPaymentMethod(
|
||||||
|
@Auth Optional<AuthenticatedAccount> authenticatedAccount,
|
||||||
|
@PathParam("subscriberId") String subscriberId,
|
||||||
|
@PathParam("paymentMethodId") @NotEmpty String paymentMethodId) {
|
||||||
|
RequestData requestData = RequestData.process(authenticatedAccount, subscriberId, clock);
|
||||||
|
return subscriptionManager.get(requestData.subscriberUser, requestData.hmac)
|
||||||
|
.thenApply(this::requireRecordFromGetResult)
|
||||||
|
.thenCompose(record -> stripeManager.setDefaultPaymentMethodForCustomer(record.customerId, paymentMethodId))
|
||||||
|
.thenApply(customer -> Response.ok().build());
|
||||||
|
}
|
||||||
|
|
||||||
public static class SetSubscriptionLevelSuccessResponse {
|
public static class SetSubscriptionLevelSuccessResponse {
|
||||||
|
|
||||||
private final long level;
|
private final long level;
|
||||||
|
@ -587,8 +603,7 @@ public class SubscriptionController {
|
||||||
}
|
}
|
||||||
|
|
||||||
InvoiceLineItem subscriptionLineItem = subscriptionLineItems.stream().findAny().get();
|
InvoiceLineItem subscriptionLineItem = subscriptionLineItems.stream().findAny().get();
|
||||||
Product product = subscriptionLineItem.getPrice().getProductObject();
|
return stripeManager.getProductForPrice(subscriptionLineItem.getPrice().getId()).thenApply(product -> new Receipt(
|
||||||
return CompletableFuture.completedFuture(new Receipt(
|
|
||||||
Instant.ofEpochSecond(subscriptionLineItem.getPeriod().getEnd()).plus(config.getBadgeGracePeriod()),
|
Instant.ofEpochSecond(subscriptionLineItem.getPeriod().getEnd()).plus(config.getBadgeGracePeriod()),
|
||||||
stripeManager.getLevelForProduct(product),
|
stripeManager.getLevelForProduct(product),
|
||||||
subscriptionLineItem.getId()));
|
subscriptionLineItem.getId()));
|
||||||
|
|
|
@ -19,6 +19,8 @@ import com.stripe.model.SubscriptionItem;
|
||||||
import com.stripe.net.RequestOptions;
|
import com.stripe.net.RequestOptions;
|
||||||
import com.stripe.param.CustomerCreateParams;
|
import com.stripe.param.CustomerCreateParams;
|
||||||
import com.stripe.param.CustomerRetrieveParams;
|
import com.stripe.param.CustomerRetrieveParams;
|
||||||
|
import com.stripe.param.CustomerUpdateParams;
|
||||||
|
import com.stripe.param.CustomerUpdateParams.InvoiceSettings;
|
||||||
import com.stripe.param.InvoiceListParams;
|
import com.stripe.param.InvoiceListParams;
|
||||||
import com.stripe.param.PriceRetrieveParams;
|
import com.stripe.param.PriceRetrieveParams;
|
||||||
import com.stripe.param.SetupIntentCreateParams;
|
import com.stripe.param.SetupIntentCreateParams;
|
||||||
|
@ -107,6 +109,23 @@ public class StripeManager {
|
||||||
}, executor);
|
}, executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<Customer> setDefaultPaymentMethodForCustomer(String customerId, String paymentMethodId) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
Customer customer = new Customer();
|
||||||
|
customer.setId(customerId);
|
||||||
|
CustomerUpdateParams params = CustomerUpdateParams.builder()
|
||||||
|
.setInvoiceSettings(InvoiceSettings.builder()
|
||||||
|
.setDefaultPaymentMethod(paymentMethodId)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
return customer.update(params, commonOptions());
|
||||||
|
} catch (StripeException e) {
|
||||||
|
throw new CompletionException(e);
|
||||||
|
}
|
||||||
|
}, executor);
|
||||||
|
}
|
||||||
|
|
||||||
public CompletableFuture<SetupIntent> createSetupIntent(String customerId) {
|
public CompletableFuture<SetupIntent> createSetupIntent(String customerId) {
|
||||||
return CompletableFuture.supplyAsync(() -> {
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
SetupIntentCreateParams params = SetupIntentCreateParams.builder()
|
SetupIntentCreateParams params = SetupIntentCreateParams.builder()
|
||||||
|
@ -278,7 +297,6 @@ public class StripeManager {
|
||||||
.setCreated(InvoiceListParams.Created.builder()
|
.setCreated(InvoiceListParams.Created.builder()
|
||||||
.setGte(now.minus(Duration.ofDays(90)).getEpochSecond())
|
.setGte(now.minus(Duration.ofDays(90)).getEpochSecond())
|
||||||
.build())
|
.build())
|
||||||
.addExpand("lines.data.price.product")
|
|
||||||
.build();
|
.build();
|
||||||
try {
|
try {
|
||||||
ArrayList<Invoice> invoices = Lists.newArrayList(Invoice.list(params, commonOptions())
|
ArrayList<Invoice> invoices = Lists.newArrayList(Invoice.list(params, commonOptions())
|
||||||
|
|
Loading…
Reference in New Issue