Payment Gateway Errors
Symptoms
Section titled “Symptoms”Your team or your customers are running into one or more of these issues during checkout:
- A customer’s card is declined at checkout with a generic “Payment failed” message.
- The eCommerce widget or Payment Link shows a 3D Secure authentication popup that fails or times out.
- Stripe webhook deliveries are failing, and bookings stay in Pending status after the customer has paid.
- Payments fail with a currency mismatch error — the customer is charged in a currency your Stripe account doesn’t support.
- The Payments section in Bloowatch shows no record of transactions that appear as successful in the Stripe Dashboard.
- Customers report seeing “Your card was declined” without any further explanation.
Most likely causes
Section titled “Most likely causes”- Card declined by the issuing bank — The customer’s bank refused the charge. This is the single most common payment failure and is outside your control.
- 3D Secure (3DS) authentication failure — The customer didn’t complete the extra verification step required by their bank (SCA regulation in Europe), or the popup was blocked by their browser.
- Webhook delivery failure — Stripe processed the payment but couldn’t notify Bloowatch. The booking doesn’t update. See Troubleshoot Stripe Webhook Errors for a deep dive.
- Currency mismatch — Your Stripe account is configured for one currency (e.g., EUR) but the product or booking is set to a different one (e.g., USD).
- Expired or invalid gateway credentials — The API keys or webhook signing secret in Bloowatch no longer match what’s in Stripe.
- Gateway outage — Stripe (or another gateway) is experiencing a service disruption.
Quick checks
Section titled “Quick checks”Before diving into the detailed fixes, run through these:
- Ask the customer to try a different card — if a second card works, the issue is with their original card or bank.
- Check the Stripe Dashboard > Payments for the failed transaction. Stripe gives a specific decline reason (e.g.,
insufficient_funds,card_declined,expired_card). - Open Settings > Payment Gateways in Bloowatch and confirm the Stripe connection status is active.
- Check Stripe’s status page for any ongoing incidents.
- Verify the currency set on your Stripe account matches the currency configured for your products in Bloowatch.
- Look at Stripe Dashboard > Developers > Webhooks — are there recent delivery failures?
Fixes in order
Section titled “Fixes in order”Fix 1: Card declined — guide the customer
Section titled “Fix 1: Card declined — guide the customer”This is the most frequent error by far. The customer’s bank is refusing the charge, and there’s nothing you can configure in Bloowatch or Stripe to override it.
What the customer sees: “Your card was declined” or “Payment failed.”
What Stripe tells you: Open Stripe Dashboard > Payments, find the failed payment, and check the Decline reason. Common codes:
| Stripe decline code | Meaning | What to tell the customer |
|---|---|---|
insufficient_funds | Not enough balance on the card | Ask them to use a different card or contact their bank |
card_declined | Generic decline by the issuing bank | Suggest trying a different card; their bank may have fraud rules blocking the charge |
expired_card | The card’s expiration date has passed | Ask them to update their card details |
incorrect_cvc | The CVC/CVV code doesn’t match | Ask them to re-enter their card details carefully |
lost_card / stolen_card | The card has been reported lost or stolen | The customer needs to contact their bank |
do_not_honor | The bank refuses without a specific reason | This is a catch-all — the customer must call their bank |
Your action:
- Share the decline reason with the customer (without exposing the raw code).
- Suggest they try a different payment method or contact their bank to authorize the transaction.
- If the customer can’t pay online, offer to collect payment in person through the POS as a workaround.
Watch out: Never ask the customer to retry the same card more than 2-3 times. Repeated declines can trigger fraud alerts on their account, making it harder to pay later.
Fix 2: 3D Secure authentication failure
Section titled “Fix 2: 3D Secure authentication failure”3D Secure (also called SCA — Strong Customer Authentication) is mandatory for most European card payments. When it fails, the payment is not completed.
What the customer sees: A bank popup or redirect asking for a code (SMS, bank app, biometric). It either times out, shows an error, or never appears.
Common causes:
- The customer’s browser blocks popups — the 3DS challenge window can’t open.
- The customer didn’t complete the verification in time (most banks give 5 minutes).
- The customer’s bank doesn’t support 3DS2 and falls back to an older protocol that fails.
- The customer is on a mobile device where the bank’s redirect doesn’t work well.
Your action:
- Ask the customer to disable popup blockers for your booking site and retry.
- Suggest they try a different browser — Chrome tends to handle 3DS redirects best.
- If they’re on mobile, suggest switching to desktop for the payment.
- If 3DS keeps failing for a specific customer, offer to collect payment via POS (in-person card payments use chip+PIN, not 3DS) or send a Payment Link they can open on a different device.
- If 3DS failures are widespread (affecting multiple customers), check Stripe’s Dashboard for any SCA-related incident notes, and verify your Stripe integration version is current.
Watch out: You cannot disable 3DS for European cards — it’s required by regulation (PSD2/SCA). Don’t promise customers you can turn it off.
Fix 3: Webhook timeout or delivery failure
Section titled “Fix 3: Webhook timeout or delivery failure”When Stripe processes a payment but can’t deliver the webhook event to Bloowatch, the booking stays in Pending status even though the money has been collected.
What you see: The Stripe Dashboard shows the payment as Succeeded, but Bloowatch doesn’t reflect it. In Stripe’s Developers > Webhooks logs, you see 400, 500, or Timed out responses.
Your action:
This is a detailed fix — we have a full article dedicated to it:
Troubleshoot Stripe Webhook Errors (KB-PAY-005)
Quick fix for stuck bookings while you troubleshoot:
- Open the Bookings List in Bloowatch and filter by Pending status.
- Cross-reference with the Stripe Dashboard — for bookings where payment succeeded in Stripe, manually add the payment in Bloowatch via Add Payment.
- The booking will move to Confirmed once the full amount is recorded.
Fix 4: Currency mismatch
Section titled “Fix 4: Currency mismatch”Payments fail when the currency configured in your Bloowatch products doesn’t match what your Stripe account can process.
What you see: The Stripe Dashboard shows a failed charge with a currency-related error, or the customer sees “This currency is not supported.”
Your action:
- In Bloowatch, go to Settings and check your organization’s default currency.
- Verify that your Stripe account supports that currency. In the Stripe Dashboard, go to Settings > Business settings > Currency to see which currencies are enabled.
- If there’s a mismatch, either:
- Update your product prices in Bloowatch to use the currency your Stripe account supports.
- Enable the additional currency in Stripe (Stripe supports multi-currency, but your bank account settlement currency must be compatible).
| Scenario | Fix |
|---|---|
| Products in EUR, Stripe account in EUR | No issue — this is the expected setup |
| Products in EUR, Stripe account in USD only | Change your Bloowatch currency to USD, or enable EUR in Stripe |
| Mixed currencies across products | Make sure Stripe supports all currencies used, or standardize |
Watch out: Changing your organization’s currency in Bloowatch affects all products. Coordinate with your team before making this change, and review existing product prices.
Fix 5: Expired or invalid gateway credentials
Section titled “Fix 5: Expired or invalid gateway credentials”If your Stripe API keys were rotated (either by you or by Stripe during a security event), Bloowatch can no longer communicate with Stripe.
What you see: All payments fail. The Payment gateway status in Bloowatch may show as disconnected or errored.
Your action:
- In the Stripe Dashboard, go to Developers > API keys.
- Copy the Publishable key and Secret key (for live mode).
- In Bloowatch, go to Settings > Payment Gateways > Stripe.
- Update both keys and save.
- While you’re there, also update the Webhook Signing Secret (see Set Up Stripe Gateway (KB-PAY-004) for the full setup process).
- Test with a small payment to confirm the connection works.
Fix 6: Gateway outage
Section titled “Fix 6: Gateway outage”Occasionally, Stripe or another payment provider has a service disruption.
What you see: Multiple customers can’t pay. The Stripe Dashboard may be slow or unreachable. Stripe’s status page shows an incident.
Your action:
- Check status.stripe.com and subscribe to updates for the incident.
- There’s nothing to fix on your side — wait for Stripe to resolve it.
- In the meantime, offer alternative payment methods to customers:
- Collect payment in person via the POS (cash or card terminal).
- If you have a secondary gateway configured (e.g., PayPal, SystemPay, Redsys), direct customers there.
- Once Stripe recovers, check for any bookings stuck in Pending and reconcile manually if needed.
When it’s a bug — when to escalate
Section titled “When it’s a bug — when to escalate”Payment issues can be on Stripe’s side, on Bloowatch’s side, or on the customer’s bank’s side. Here’s how to sort it:
Contact Stripe Support when:
- The Stripe Dashboard shows errors you can’t explain (unexpected charges, duplicate charges, missing refunds).
- Stripe’s webhook system is not sending events at all (nothing shows in the webhook logs).
- You see
fraud_detecteddeclines that you believe are false positives — Stripe Radar may need adjusting. - Stripe’s status page shows an ongoing incident affecting payments.
Contact Bloowatch Support when:
- Stripe shows successful payments (
200webhook responses), but Bloowatch bookings don’t update. - The Payment Gateways settings page in Bloowatch shows errors or won’t save your credentials.
- Multiple customers across different cards and banks are failing — and Stripe shows no issues on their side.
- Bloowatch’s Payments section shows incorrect amounts or duplicated entries.
Before you contact support, gather: your Bloowatch organization name, the Stripe payment ID(s) (start with
pi_), the exact error message the customer saw, the time and date of the failure, and which gateway you’re using.