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:

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 Email 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

  1. functions/gravity-forms-stripe-customizations.php (NEW) - Added gform_stripe_submission_timeout_seconds filter - Increased timeout from 20 to 45 seconds - Extensive inline documentation

  2. 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

  3. docs/custom-orders-system.md - Added v1.3 changelog entry - Added troubleshooting section for Processing orders

  4. functions.php - Added require for new stripe customizations file


Action Items

Immediate

Deployment

Monitoring


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:

  1. Customer filled form and entered card
  2. Payment intent created with requires_confirmation status
  3. Form waited for webhook that never came
  4. Customer eventually gave up/closed browser
  5. 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


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:"

Resources