braintree / braintree-web

A suite of tools for integrating Braintree in the browser
https://developer.paypal.com/braintree/docs/start/hello-client/javascript/v3
MIT License
444 stars 134 forks source link

Request: Include 3DS error codes in verifyPayload #713

Closed daelmaak closed 6 months ago

daelmaak commented 7 months ago

General information

Issue description

When user is required to complete a challenge, and fails the challenge, we don't get the 3DS error code back in the payload produced by verifyCard.

Detailed description

After user submits the challenge, https://api.sandbox.braintreegateway.com/merchants/{merchantId}/client_api/v1/payment_methods/{methodId}/three_d_secure/authenticate_from_jwt is called. That endpoint can return response like this:

{
    "errors": [
        {
            "attribute": "three_d_secure_token",
            "message": "Failed to authenticate, please try a different form of payment.",
            "model": "transaction",
            "type": "user",
            "code": "81571"
        }
    ],
    "threeDSecureInfo": {
        "liabilityShifted": false,
        "liabilityShiftPossible": true
    }
}

This response contains the 3DS code "code": "81571" and nicely shows what went wrong. However this code is not present in the verifyPayload so we can't use it. I also didn't find any other property that'd communicate it precisely.

jplukarski commented 6 months ago

@daelmaak Thanks for writing in.

The payload should have the lookup.transStatus and lookup.transStatusReason properties on the threeDSecureInfo returned in the verifyCard payload.

If you are having trouble getting those values returned feel free to write into our Tech Support team for more integration issues.

daelmaak commented 5 months ago

Hi @jplukarski , yes those properties are indeed in the payload object but don't convey the same information I am requesting, eg.:

    "lookup": {
        "transStatus": "N",
        "transStatusReason": "01"
      },

It just informs about the generic status but doesn't convey the precise "text" nor "explanation" as defined in the docs.