NoumenonTell me what's broken

This procedure is for Stripe.

Read the base symptom guide

Stripe payment succeeds but access stays locked

Stripe records a successful payment, but your app never unlocks the corresponding purchase.

Investigate the existing payment first. Stripe’s API keys, webhook signing secrets and test-versus-live environments are different pieces of configuration. This check finds which piece disagrees with the deployed endpoint. Use a test payment for a new reproduction and keep the payment id separate from the event id in your notes.

Reviewed . Start with a two-minute check; repairs can take longer.

The two-minute check.

  1. Confirm account and mode.

    In Stripe Dashboard, locate the existing payment in the correct account and environment. Compare the deployed key types locally: pk_test_ and sk_test_ belong to test mode; pk_live_ and sk_live_ belong to live mode. Never copy the secret value into the browser to test it.

  2. Open the matching delivery attempt.

    Go to Workbench, Webhooks, select the destination for your app and open the relevant event. Read the delivery status, attempt time, destination URL and HTTP response. A payment in one mode does not prove an endpoint configured for another mode received it.

  3. Check the signature inputs.

    For a failed verification, compare the endpoint’s signing secret with the server environment setting. Dashboard endpoints and Stripe CLI forwarding use different secrets. Inspect the handler to confirm it verifies the raw request body with the Stripe-Signature header and that endpoint’s secret.

  4. Trace fulfillment after verification.

    If delivery reached the app, inspect its server log at the recorded attempt time. Match the event to the intended order and customer, then read the resulting entitlement in your own database. A successful HTTP reply is not evidence that the purchase was granted.

Read the result.

WORKSA verified Stripe event gives the correct customer the intended access exactly once.

BROKENThe event fails verification, reaches the wrong destination or produces no correct entitlement.

Causes and fixes.

Ranked in the order to investigate, not by claimed frequency.

  1. Test and live configuration are mixed.

    Keep each environment’s keys, products and event destination aligned. Correct the mismatched configuration on the server, deploy it, and repeat a test transaction using only the matching test setup.

  2. Webhook signature verification uses the wrong input.

    Use the signing secret for that exact destination and preserve the unmodified request body for verification. Do not parse and reserialize JSON before verifying it. Keep signature verification enabled.

  3. The handler acknowledges without durable fulfillment.

    Record the processed event and apply the entitlement reliably to the correct customer. Handle repeated deliveries without granting twice. Reconcile the existing payment after the handler is repaired instead of creating another charge.

Edge cases.

  • Stripe can deliver events more than once and does not guarantee their ordering. Fulfillment must tolerate repeats and should use the provider’s current object state when ordering matters.
  • Some payment methods finish asynchronously. Choose the documented events for your payment flow; do not treat every completed browser redirect as settled payment.

When to stop and hand it over

Escalate real charges with missing or duplicated access, any exposed sk_ credential, or a handler that cannot verify signatures. Give the repairer payment and event ids plus a redacted delivery response. Keep the signing secret and customer payment details private.

Before the next attempt.

Can I turn off signature checks until payments work?

No. Repair the secret or raw-body handling. Accepting unverified events removes the evidence that the event came from Stripe.

Does a webhook response with status 200 prove delivery of the purchase?

It proves the endpoint returned success to Stripe. Verify the stored order and the customer’s access separately.

Related case evidence.

Duskline / subscription availability

Subscription review stalled on territory availability. Availability was set through the API for 175 territories on 2026-08-24. This was the studio’s own iOS app, not a Stripe repair. The connection is checking provider-side state instead of trusting the screen.

Official sources.

These sources document the product behavior used in this check. The diagnostic order and verdicts are Noumenon’s procedure; they are not quoted product error messages.

What's
not working?

You don't need to explain it perfectly. Tell me what you expected and what happened instead.

I'll reply personally by email.
The diagnosis is free. No commitment.

Please leave out passwords and secret keys. We can arrange a test login separately.