Spent about four hours on this. The webhook kept silently failing — no error, just nothing happening on our end after payment.
Turns out I had the wrong endpoint URL in Stripe’s dashboard. Not the local tunnel. The actual deployed URL. Classic.
Second attempt: correct URL, still failing. Signature verification rejecting it. Wrong webhook secret — the test one, not live.
Third time: both correct. Worked first try.