From e4f4682357c1d787e8673d581b66b293a80e7e3f Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 11 Feb 2022 14:41:58 -0400 Subject: [PATCH] Better logging; add payment setup failure params. --- .../errors/DonationErrorParams.kt | 6 ++++ .../java/org/signal/donations/StripeApi.kt | 28 ++++++++++--------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/errors/DonationErrorParams.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/errors/DonationErrorParams.kt index 987403dc79..df8f9b26ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/errors/DonationErrorParams.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/errors/DonationErrorParams.kt @@ -24,6 +24,12 @@ class DonationErrorParams private constructor( ): DonationErrorParams { return when (throwable) { is DonationError.PaymentSetupError.DeclinedError -> getDeclinedErrorParams(context, throwable, callback) + is DonationError.PaymentSetupError -> DonationErrorParams( + title = R.string.DonationsErrors__error_processing_payment, + message = R.string.DonationsErrors__your_payment, + positiveAction = callback.onOk(context), + negativeAction = null + ) is DonationError.BadgeRedemptionError.TimeoutWaitingForTokenError -> DonationErrorParams( title = R.string.DonationsErrors__still_processing, message = R.string.DonationsErrors__your_payment_is_still, diff --git a/donations/lib/src/main/java/org/signal/donations/StripeApi.kt b/donations/lib/src/main/java/org/signal/donations/StripeApi.kt index ff26152c07..f801a0cbad 100644 --- a/donations/lib/src/main/java/org/signal/donations/StripeApi.kt +++ b/donations/lib/src/main/java/org/signal/donations/StripeApi.kt @@ -9,6 +9,7 @@ import okhttp3.Request import okhttp3.Response import okio.ByteString import org.json.JSONObject +import org.signal.core.util.logging.Log import org.signal.core.util.money.FiatMoney import java.math.BigDecimal import java.util.Locale @@ -20,6 +21,10 @@ class StripeApi( private val okHttpClient: OkHttpClient ) { + companion object { + private val TAG = Log.tag(StripeApi::class.java) + } + sealed class CreatePaymentIntentResult { data class AmountIsTooSmall(val amount: FiatMoney) : CreatePaymentIntentResult() data class AmountIsTooLarge(val amount: FiatMoney) : CreatePaymentIntentResult() @@ -73,12 +78,6 @@ class StripeApi( "payment_method" to paymentMethodId ) - // TODO Donation receipts -// val email = paymentSource.email() -// if (email != null) { -// parameters["receipt_email"] = email -// } - postForm("payment_intents/${paymentIntent.id}/confirm", parameters) }.subscribeOn(Schedulers.io()) @@ -101,12 +100,6 @@ class StripeApi( "type" to "card", ) - // TODO Donation receipts -// val email = paymentSource.email() -// if (email != null) { -// parameters["billing_details[email]"] = email -// } - return postForm("payment_methods", parameters) } @@ -138,24 +131,33 @@ class StripeApi( private fun parseErrorCode(body: String?): String? { if (body == null) { + Log.d(TAG, "parseErrorCode: No body.", true) return null } return try { JSONObject(body).getJSONObject("error").getString("code") } catch (e: Exception) { + Log.d(TAG, "parseErrorCode: Failed to parse error.", e, true) null } } private fun parseDeclineCode(body: String?): StripeDeclineCode? { if (body == null) { + Log.d(TAG, "parseDeclineCode: No body.", true) return null } return try { - StripeDeclineCode.getFromCode(JSONObject(body).getJSONObject("error").getString("decline_code")) + val jsonBody = JSONObject(body) + Log.d(TAG, "parseDeclineCode: Parsed body with keys: ${jsonBody.keys().asSequence().joinToString(", ")}") + val jsonError = jsonBody.getJSONObject("error") + Log.d(TAG, "parseDeclineCode: Parsed error with keys: ${jsonError.keys().asSequence().joinToString(", ")}") + + StripeDeclineCode.getFromCode(jsonError.getString("decline_code")) } catch (e: Exception) { + Log.d(TAG, "parseDeclineCode: Failed to parse decline code.", e, true) null } }