Skip to main content
Pixel cat

How to fix Stripe payment attempt failed because additional action is required

laravel-tips  Jack Ellis · Feb 5, 2025

It's been a while since I wrote a Laravel tip. Well, recently our test suite was failing and I was seeing the error:

Laravel\Cashier\Exceptions\IncompletePayment: The payment attempt failed because additional action is required before it can be completed.

I searched around, visited the Stripe documentation and could not find an issue. So I decided to write this post.

Long story short, our test suite would fallover ocassionally on any payment/Stripe related interactions, despite the fact that everything was working fine before.

I did some digging, discovered that subscriptions were "Incomplete" in Stripe, which made me think it was a payment method issue.

Turns out, it was.

The problem

The issue is caused by us (and you!) using pm_card_visa or tok_visa casually within our code. Long story short, Stripe is sometimes forcing 3DS on these payment methods. And, sure, you should test handling for these things but, if you're like us, you were only trying to set-up a subscription in Stripe so you could test other, non-payment mechanics.

The solution

We made the following changes: 1. Switched all payment methods to pm_card_amex_threeDSecureNotSupported 2. Switched all tokens to tok_amex_threeDSecureNotSupported

Both of these are documented in Stripe as a payment method that requires no 3DS (secure payments).

Now our test suite passes with flying colours. I hope this helps somebody out there.

Return to the Fathom Analytics blog

Jack Ellis

BIO
Jack Ellis, CTO

Pixel cat

Tired of how time consuming and complex Google Analytics can be? Try Fathom Analytics:

Start a free trial

Sign up for our monthly newsletter via email, or grab the RSS feed.