mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 03:28:04 +01:00
For Braintree, return active subscription status if latest transaction also succeeded
This commit is contained in:
@@ -220,9 +220,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||
}
|
||||
}
|
||||
|
||||
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status) {
|
||||
private static SubscriptionStatus getSubscriptionStatus(final Subscription.Status status, final boolean latestTransactionFailed) {
|
||||
return switch (status) {
|
||||
case ACTIVE -> SubscriptionStatus.ACTIVE;
|
||||
// Stripe returns a PAST_DUE status if the subscription's most recent payment failed.
|
||||
// This check ensures that Braintree is consistent with Stripe.
|
||||
case ACTIVE -> latestTransactionFailed ? SubscriptionStatus.PAST_DUE : SubscriptionStatus.ACTIVE;
|
||||
case CANCELED, EXPIRED -> SubscriptionStatus.CANCELED;
|
||||
case PAST_DUE -> SubscriptionStatus.PAST_DUE;
|
||||
case PENDING -> SubscriptionStatus.INCOMPLETE;
|
||||
@@ -435,9 +437,11 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||
|
||||
final Optional<Transaction> latestTransaction = getLatestTransactionForSubscription(subscription);
|
||||
|
||||
boolean latestTransactionFailed = false;
|
||||
if (latestTransaction.isPresent()){
|
||||
paymentProcessing = isPaymentProcessing(latestTransaction.get().getStatus());
|
||||
if (getPaymentStatus(latestTransaction.get().getStatus()) != PaymentStatus.SUCCEEDED) {
|
||||
latestTransactionFailed = true;
|
||||
chargeFailure = createChargeFailure(latestTransaction.get());
|
||||
}
|
||||
}
|
||||
@@ -450,7 +454,7 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||
endOfCurrentPeriod,
|
||||
Subscription.Status.ACTIVE == subscription.getStatus(),
|
||||
!subscription.neverExpires(),
|
||||
getSubscriptionStatus(subscription.getStatus()),
|
||||
getSubscriptionStatus(subscription.getStatus(), latestTransactionFailed),
|
||||
latestTransaction.map(this::getPaymentMethodFromTransaction).orElse(PaymentMethod.PAYPAL),
|
||||
paymentProcessing,
|
||||
chargeFailure
|
||||
|
||||
@@ -84,7 +84,7 @@ public interface SubscriptionProcessorManager {
|
||||
INCOMPLETE("incomplete"),
|
||||
|
||||
/**
|
||||
* Payment on the latest renewal either failed or wasn't attempted.
|
||||
* Payment on the latest renewal failed but there are processor retries left, or payment wasn't attempted.
|
||||
*/
|
||||
PAST_DUE("past_due"),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user