Nonce is already consumed
Closed this issue · 2 comments
levinzonr commented
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
- Pay with some card so it is added to the Vault
- Launch DropIn flow again
- Choose the Saved card
- Cancel the 3ds verification
- Select the card again
- Failure returned
Expected behavior
After cancelling 3ds verification, user still should be able to finish the flow successfully
Screenshots
No response
sarahkoop commented
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!
sshropshire commented
Hey @levinzonr this was fixed in version 6.15.0. Thank you for your patience.