How to fix Stripe payment attempt failed because additional action is required
laravel-tips Jack Ellis · Feb 5, 2025It'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.
BIO
Jack Ellis, CTO
Recent blog posts
Tired of how time consuming and complex Google Analytics can be? Try Fathom Analytics: