Skip to content

invalid_request_error mapped to CardException not InvalidRequestException #1358

@jstafford406

Description

@jstafford406

Describe the bug

handleApiError maps all 402 status code responses to CardException. We have received responses that in the Stripe dashboard are "type": "invalid_request_error", but result in a CardException. (The CardException has a null code which causes us problems.) An example of the Response body is shown further below.

I have been in touch with Stripe support who say "our error documentation doesn't map status codes to specific error types, so the invalid_request_error may not always go hand in hand with the 404 status code.". So I think handleApiError needs to allow for invalid_request_error type in the case 402: branch.

Example of Response body for invalid_request_error type which results in CardException:

Response body
{
  "error": {
    "message": "The payment is blocked because the used IBAN has been suspended. You can learn more about this at https://support.stripe.com/questions/sepa-debit-chargebacks-faq and if you need assistance processing a payment please contact us via https://support.stripe.com/contact/ for further information.",
    "type": "invalid_request_error"
  }
}

To Reproduce

Using the Charges API create a Charge with an underlying payment source where the associated IBAN has been disputed 3 times in row. Such that Stripe block the Charge and return an invalid_request_error response. See https://support.stripe.com/questions/sepa-debit-chargebacks-faq

Expected behavior

Expected the Stripe Java SDK to translate the invalid_request_error with HTTP status code 402 into an InvalidRequestException.
Actual behavior: CardException where only the message property is populated, notably not the code.

Code snippets

No response

OS

macOS

Java version

Java 11

stripe-java version

20.121.0

API version

2020-08-27

Additional context

At https://support.stripe.com/questions/sepa-debit-chargebacks-faq Stripe note this is new behavior since 2022-03-07. This is exactly consistent with when we started seeing this issue.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions