diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java
index 9dc8a1c68eae2123215802711e9700651d086e8b..3671fffade59c1d08f1f02b6acad39bb499d5c41 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java
@@ -157,7 +157,7 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob {
       Log.w(TAG, "Subscription is not yet active. Status: " + subscription.getStatus(), true);
       throw new RetryableException();
     } else {
-      Log.i(TAG, "Recording end of period from active subscription.", true);
+      Log.i(TAG, "Recording end of period from active subscription: " + subscription.getStatus(), true);
       SignalStore.donationsValues().setLastEndOfPeriod(subscription.getEndOfCurrentPeriod());
       MultiDeviceSubscriptionSyncRequestJob.enqueue();
     }
@@ -240,9 +240,8 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob {
         DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(getErrorSource()));
         throw new Exception(response.getApplicationError().get());
       case 402:
-        Log.w(TAG, "Subscription payment failure in credential response.", response.getApplicationError().get(), true);
-        onPaymentFailure(null, null, 0L);
-        throw new Exception(response.getApplicationError().get());
+        Log.w(TAG, "Payment looks like a failure but may be retried.", response.getApplicationError().get(), true);
+        throw new RetryableException();
       case 403:
         Log.w(TAG, "SubscriberId password mismatch or account auth was present.", response.getApplicationError().get(), true);
         DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(getErrorSource()));