braintree/braintree-android-drop-in

Nonce is already consumed

Closed this issue · 2 comments

Braintree SDK Version

6.14.0

Environment

Sandbox

Android Version & Device

Android 14

Braintree dependencies

implementation("com.braintreepayments.api:drop-in:6.14.0")

Describe the bug

When using 3DSecure V2 and Cancelling the Verification flow for a saved card, and choosing the card again, instead of the Verification flow, the SDK responds with the error.

Stacktrace:

ErrorWithResponse (422): Nonce is already consumed
[]
at com.braintreepayments.api.ErrorWithResponse$Companion$CREATOR$1.createFromParcel(ErrorWithResponse.kt:157)
at com.braintreepayments.api.ErrorWithResponse$Companion$CREATOR$1.createFromParcel(ErrorWithResponse.kt:156)
at android.os.Parcel.readParcelableInternal(Parcel.java:4813)
at android.os.Parcel.readValue(Parcel.java:4564)
at android.os.Parcel.readValue(Parcel.java:4347)
at android.os.Parcel.-$$Nest$mreadValue(Unknown Source:0)
at android.os.Parcel$LazyValue.apply(Parcel.java:4442)
at android.os.Parcel$LazyValue.apply(Parcel.java:4401)
at android.os.BaseBundle.getValueAt(BaseBundle.java:394)
at android.os.BaseBundle.getValue(BaseBundle.java:374)
at android.os.BaseBundle.getValue(BaseBundle.java:357)
at android.os.BaseBundle.getValue(BaseBundle.java:350)
at android.os.BaseBundle.getSerializable(BaseBundle.java:1451)
at android.os.Bundle.getSerializable(Bundle.java:1171)
at android.content.Intent.getSerializableExtra(Intent.java:9027)
at com.braintreepayments.api.DropInActivityResultContract.parseResult(DropInActivityResultContract.java:44)
at com.braintreepayments.api.DropInActivityResultContract.parseResult(DropInActivityResultContract.java:18)
at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:414)
at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:371)
at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.java:845)
at androidx.fragment.app.FragmentActivity.onActivityResult(FragmentActivity.java:151)
at android.app.Activity.dispatchActivityResult(Activity.java:8628)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5316)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5362)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:67)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

To reproduce

  1. Pay with some card so it is added to the Vault
  2. Launch DropIn flow again
  3. Choose the Saved card
  4. Cancel the 3ds verification
  5. Select the card again
  6. Failure returned

Expected behavior

After cancelling 3ds verification, user still should be able to finish the flow successfully

Screenshots

No response

Hi @levinzonr - Thanks for reporting this issue. We were able to reproduce it on our end with the steps provided. We will investigate this further and post here when we have an update!

Hey @levinzonr this was fixed in version 6.15.0. Thank you for your patience.