Coneflower Creamery - Stripe/Gravity Forms Investigation
Client: Coneflower Creamery Date Started: December 5, 2025 Site: https://coneflowercreamery.com Local Dev: https://conefower-creamery.local
Summary of Issue
Client reported orders showing as "Processing" instead of "Paid" in Gravity Forms after upgrading Gravity Forms Stripe Add-On and removing legacy code.
Key Findings
1. Gravity Forms Stripe 6.0 Changes
The upgrade to GF Stripe 6.0 (November 2025) fundamentally changed the payment flow:
- Old Flow: Form submits → Payment processes → Form completes immediately → Webhook updates status in background
- New Flow: Form submits → Payment processes → Form WAITS for webhook (20 sec timeout) → Then completes
This change only affects the Stripe Card Element (not Payment Element).
Filter to adjust timeout:
add_filter('gform_stripe_submission_timeout_seconds', function($timeout, $form) {
return 45; // Increased from 20 seconds
}, 10, 2);
2. Webhook Configuration Issues
Stripe API Key Used: rk_live_51GSoYLDXyxZMtNxq... (restricted, read-only)
Webhook Endpoints Found:
| ID | URL | Form | Status |
|---|---|---|---|
| we_1PBI3sDXyxZMtNxqSnlQcjdl | ?callback=gravityformsstripe |
None (main) | DISABLED |
| we_1JpFg4DXyxZMtNxqQUoqFTd3 | ?callback=gravityformsstripe&fid=5 |
Form 5 (Cake) | Enabled |
| we_1HhKoBDXyxZMtNxq7rseQuWJ | ?callback=gravityformsstripe&fid=4 |
Form 4 | Enabled |
| we_1GTts9DXyxZMtNxqFkitKrZT | ?callback=gravityformsstripe&fid=3 |
Form 3 | Enabled |
CRITICAL: No webhook endpoint exists for Form 6 (Pie Pre-Orders), and the main fallback webhook is DISABLED.
3. Entry 12044 Investigation
Transaction ID: pi_3Sb6vkDXyxZMtNxq0EDZAaDp
Stripe API Response:
{
"status": "requires_payment_method",
"amount": 10825,
"amount_received": 0,
"charges": { "data": [] },
"latest_charge": null
}
Conclusion: Payment was NEVER completed. Customer abandoned checkout or card failed validation. This is NOT a webhook issue - the money was never charged.
4. Recent Payment Intents Analysis
| Entry ID | Amount | Status | Outcome | |
|---|---|---|---|---|
| 12081 | arbretting@yahoo.com | $93.79 | succeeded | Paid |
| 12080 | samuelbertino.music@gmail.com | $51.89 | requires_payment_method | Abandoned |
| 12079 | arbretting@yahoo.com | $93.79 | requires_payment_method | Abandoned |
| 12078 | karakelley@cox.net | $219.20 | requires_payment_method | Abandoned |
| 12077 | haleighbradshaw@gmail.com | $46.89 | succeeded | Paid |
| 12076 | parmenterb03@gmail.com | $59.73 | succeeded | Paid |
| 12044 | amy.kloberdanz@gmail.com | $108.25 | requires_payment_method | Abandoned |
Changes Made
Theme Changes (Local - needs deployment)
Branch: feature/stripe-webhook-timeout-fix
-
functions/gravity-forms-stripe-customizations.php (NEW) - Added
gform_stripe_submission_timeout_secondsfilter - Increased timeout from 20 to 45 seconds - Extensive inline documentation -
functions/admin-custom-orders.php - Added "Processing Orders" alert section - Shows yellow warning banner for orders stuck in Processing - Direct link to view entry in Gravity Forms
-
docs/custom-orders-system.md - Added v1.3 changelog entry - Added troubleshooting section for Processing orders
-
functions.php - Added require for new stripe customizations file
Action Items
Immediate
- [x] Create/enable webhook for Form 6 (Pie Pre-Orders) — DONE Dec 5, 2025 - Enabled main webhook
- [x] Verify webhook signing secret in GF settings matches Stripe — DONE Dec 5, 2025
- [x] Confirmed webhook working - entries 12085, 12086 showing as succeeded after fix
- [ ] Contact customers with abandoned orders (did not complete payment):
- 12044 - amy.kloberdanz@gmail.com - $108.25
- 12074 - adam@julch.net - $93.79
- 12078 - karakelley@cox.net - $219.20
- 12079 - arbretting@yahoo.com - $93.79
- 12080 - samuelbertino.music@gmail.com - $51.89
- 12084 - ashleysnorris@gmail.com - $64.73
Deployment
- [ ] Push theme changes to production
- [ ] Test payment flow after webhook fix
Monitoring
- [ ] Check Stripe webhook delivery logs after fix
- [ ] Monitor for new Processing orders
Understanding "Incomplete" Payments in Stripe
After enabling the webhook, we identified two distinct types of incomplete payments showing in Stripe:
Type A: Abandoned Checkouts (Has Entry ID, No Card)
Example entries: 12084, 12080, 12079, 12078, 12074
Characteristics: - Shows Entry ID in description (e.g., "Entry ID: 12084, Products: Pies...") - No card info (shows "—" for payment method) - Customer name may be missing - Status: Incomplete
What happened: Customer filled out the form, GF created an entry, but they never entered their card details. They abandoned before payment.
This is normal customer behavior and will continue to happen. Not a bug.
Type B: Ghost Payments (Has Card, No Entry ID)
Example payments: pi_3Sb84b..., pi_3Sb82j..., pi_3Sb7tX..., pi_3Sb80c...
Characteristics: - Shows payment intent ID instead of Entry ID in description - HAS card info (last 4 digits visible) - HAS customer name - Status: Incomplete - Empty metadata (no GF entry ID, no email, no form name)
What happened: Customer entered their card, but the form never completed submission. No GF entry was created. The webhook issue likely caused the form to hang, and the customer gave up.
These should STOP after the webhook fix. If they continue appearing after Dec 5, 2025 ~5:00 PM, there's another issue.
Timeline Correlation
| Time | Status |
|---|---|
| Before ~5:00 PM | Mix of succeeded + both types of incomplete (webhook disabled) |
| After ~5:00 PM | Cleaner succeeded payments (webhook enabled) |
Monitoring
Watch for Type B ghost payments after the fix. If they continue: - Check webhook delivery logs in Stripe - Verify signing secret is correct - Look for JavaScript errors on the form - Check for security plugins interfering
Ghost Payment Impact Analysis (Dec 5, 2025)
Summary
| Metric | Value |
|---|---|
| Total Ghost Payments | 33 |
| Total Lost Revenue | $3,249.86 |
| Average Order Value | $98.48 |
| Time Period | ~1:38 PM - 4:30 PM |
| Root Cause | Disabled webhook for Form 6 |
What Happened
The main Stripe webhook was disabled, meaning Form 6 (Pie Pre-Orders) had no webhook endpoint. When customers submitted the form:
- Customer filled form and entered card
- Payment intent created with
requires_confirmationstatus - Form waited for webhook that never came
- Customer eventually gave up/closed browser
- No GF entry created, but Stripe captured card info
Recovery Assessment
Recoverable info from Stripe Dashboard: - Customer names (from payment method) - Card last 4 digits - Order amounts
NOT recoverable: - Email addresses (never captured in metadata) - What products they ordered (no GF entry)
Recommendation: Some customers likely tried again successfully. Cross-reference ghost payment names with successful orders to identify who may still need to re-order.
Status After Fix
- Ghost payments stopped after ~5:00 PM when webhook was enabled
- Subsequent payments showing correct behavior:
- Succeeded → Paid in GF
- Card declined → Failed in GF
- Abandoned (no card entered) → Processing in GF
Useful Commands
Check webhook endpoints:
curl -s https://api.stripe.com/v1/webhook_endpoints -u "API_KEY:"
Look up specific payment intent:
curl -s https://api.stripe.com/v1/payment_intents/pi_XXXXX -u "API_KEY:"
Check recent payments:
curl -s "https://api.stripe.com/v1/payment_intents?limit=10" -u "API_KEY:"