This can be a problem in 2 known circumstances:
Endpoint URL configuration issues related to using API keys, instead of using Stripe Connect (read below).
Once a user has started a transaction, Stripe needs to reach your Stripe Endpoint URL in order to finish the process. Otherwise, Stripe will not complete the process and will refund the transaction.
The Endpoint URL looks something like this:
If your payment is refunded, something may be blocking the Stripe Endpoint URL. These may be the following reasons:
A. Your WordPress Stripe Endpoint URL is protected behind Nginx or apache security protection which requires a user/password as shown below:
B. Your Dashboard is not working for some reason.
C. Any other reason why your Stripe Endpoint URL is currently unavailable.
How do I test if the Stripe Endpoint URL is available?
1. Open a new incognito window in your browser.
2. Go to your WordPress Dashboard.
3. If you don't see the default WordPress Login screen and see something different, it's likely not available to Stripe and won't complete the transaction.
Clear any obstacles between Stripe and your Stripe Endpoint URL or use Stripe Connect to resolve the issue.