Stripe Webhook Issues
3 min read
TrustLens depends on Stripe webhooks to auto-ingest dispute and refund events. If webhooks aren’t delivering, TrustLens won’t know about chargebacks until you manually enter them — which means your chargeback ratio is artificially low and your customer scores aren’t reflecting dispute history. This page walks through diagnosing and fixing webhook delivery issues.
Common Symptoms #
- A dispute was filed in Stripe but doesn’t appear in TrustLens
- Dispute status updates (won/lost) aren’t reflecting
- The Chargebacks settings page shows ingestion as yellow or red
- Refund events from Stripe aren’t recorded in customer timelines
Step 1: Verify Stripe Webhook Configuration #
The first check is on Stripe’s side:
- Log in to Stripe Dashboard
- Go to Developers → Webhooks
- Find the webhook endpoint pointing to your store
- Verify the URL — should look like
https://yoursite.com/?wc-api=wc_stripeor the equivalent for your Stripe plugin version - Check that the webhook is enabled (not paused)
If no webhook endpoint exists for your store, you need to create one. The WooCommerce Stripe plugin usually creates it automatically, but on some installations the auto-creation fails.
Step 2: Check Recent Webhook Events #
On the Stripe webhook detail page:
- Look at the “Recent events” log
- For each event, check the HTTP response code from your store
| Response | Meaning |
|---|---|
| 200 / 201 | Success — WooCommerce Stripe received and acknowledged |
| 400 | Bad request — usually signing key mismatch |
| 401 / 403 | Authentication failure |
| 404 | Endpoint not found — URL wrong or WooCommerce Stripe deactivated |
| 500 | WordPress error processing the webhook |
| Timeout | WordPress took too long to respond |
Step 3: Fix Signing Key Mismatch #
If you see 400 responses, the signing key configured in WooCommerce Stripe doesn’t match Stripe’s webhook secret:
- In Stripe Dashboard, copy the webhook’s signing secret
- In WordPress, go to WooCommerce → Settings → Payments → Stripe → Webhook Endpoints
- Paste the signing secret
- Save
Test by clicking “Send test event” in Stripe — you should see a 200 response immediately after.
Step 4: Fix 404 Errors #
404 means the webhook URL doesn’t resolve:
- Stripe plugin deactivated: Verify WooCommerce Stripe plugin is active
- Wrong URL: Compare the URL in Stripe Dashboard to what WooCommerce Stripe expects (usually shown in the plugin’s settings)
- Plugin upgraded with URL change: Major version upgrades sometimes change the webhook URL — update Stripe accordingly
Step 5: Fix 500 Errors #
500 means WordPress encountered an error processing the webhook. Common causes:
- Memory exhaustion: Raise PHP memory limit
- PHP fatal error: Check WordPress debug log for the specific error
- Plugin conflict: Another plugin hooking into the webhook path
Enable WordPress debug logging:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Trigger the webhook again, then check wp-content/debug.log for the error.
Step 6: Fix Timeouts #
Stripe waits 30 seconds for a response. If your WordPress site takes longer (heavy plugins, slow database, server issues), Stripe gives up.
Diagnose:
- Use a tool like New Relic or Query Monitor to find slow queries
- Check if the slowness is webhook-specific or site-wide
- Identify plugins triggered on webhook receipt
Common fixes:
- Upgrade hosting
- Add indexes to slow queries
- Move heavy webhook processing to async (Action Scheduler)
Step 7: Verify TrustLens Is Listening #
Even if WooCommerce Stripe receives the webhook, TrustLens needs to hook into it. Verify:
- TrustLens → Settings → Chargebacks → Auto-Ingestion Status
- Indicator should be green
If yellow (“no recent events”), it means TrustLens hasn’t seen webhook events in the expected window. Could mean no disputes have happened recently — not a problem.
If red (“error”), TrustLens detected an issue with its hook integration. Check the WordPress error log for TrustLens-specific errors.
Step 8: Resend Missed Events From Stripe #
If webhook delivery was broken for a period, Stripe can resend missed events:
- Stripe Dashboard → Developers → Webhooks → your endpoint
- Find the failed events in the “Recent events” log
- Click each and use “Resend”
For mass resending, Stripe’s API can replay events programmatically. Or:
- Identify the affected date range
- Manually enter the disputes in TrustLens (Settings → Chargebacks → Record Dispute)
- Use the original Stripe dispute IDs for traceability
Step 9: Verify Manually #
To confirm everything is now working:
- In Stripe Dashboard, send a test webhook event
- Check WooCommerce Stripe receives it (200 response)
- Check TrustLens reflects it (recent events indicator)
WooPayments-Specific Notes #
WooPayments uses Stripe under the hood but with different webhook configuration:
- WooPayments webhooks are managed automatically — you don’t typically need to configure them
- If issues arise, contact WooPayments support; the diagnostic surface is different
- WooPayments dispute events fire on the
woocommerce_woopayments_dispute_*action hooks
Preventive Practices #
- Test webhook delivery after any major site change (theme, host, plugin updates)
- Monitor the Stripe webhook events log monthly for failed deliveries
- Set up Stripe’s notification email for webhook failures (Developer → Webhooks → Edit endpoint)
- Keep WooCommerce Stripe plugin up to date — webhook URL or format changes occasionally
When to Fall Back to Manual Entry #
If webhook delivery is persistently unreliable on your infrastructure:
- Log disputes manually as they arrive
- Establish a weekly routine of reconciling with Stripe’s dispute list
- Accept the operational overhead
This isn’t ideal but is workable for stores with low dispute volume.