This val processes new Stripe subscribers to Val Town Pro. It sends our team a Discord notifcation and sends a welcome email to the new subscriber. It takes a couple of steps if you'd like to set up something similar for your own Stripe account.
- Fork this HTTP val
- Create a new webhook in Stripe
- Add your val's HTTP endpoint URL into the Stripe webhook
- Select
customer.subscription.updated
as the only event to listen to (more on this below) - Add your
stripe_sk_customer_readonly
to your Val Town Env Variables - Add your webhook's signing secret as
STRIPE_WEBHOOK_SECRET
to you Val Town Env Variables
- Verifies the signature to make sure it's really from Stripe
- Filters out only newly created subscriptions
- Sends off the Discord message & email
Stripe sends webhooks for many different kinds of events. Relevant for us here are:
customer.subscription.created
(what we used to listen for)customer.subscription.updated
(what we're currently listening for)
The issue with customer.subscription.created
is that it triggers too early,
before the user's payment actually goes through. This is a problem
because in early Nov 2024 we started getting credit card fraudsters
testing cards using our service. We started getting lots of notifications
for new subscriptions that never actually became active.
Note: if anyone knows good ways to prevent that sort of behavior at the root, please let me know by commenting on this val!
In order to only get notified on a valid subscription, we now subscribe
to customer.subscription.updated
. This event happens on any subscription change,
including renewals and cancellations, so now we have to filter those events
to only get new subscriptions, ie where:
event.data.previous_attributes.status === 'incomplete' && event.data.object.status === 'active'
Hey, I was going to add a PR for this but you can't create PRs if there aren't any code changes - there's a typo in the readme, String -> Stripe on the second last line :D
Fixed, thanks!