Getting Started with Stripe Webhooks

Webhooks Intro

Thanks to webhooks you can listen for events on your Stripe account so you can automatically trigger reactions. Webhooks run on the server-side, so you can run any of the available server action steps when an event occurs.
Some examples of what you can do:

  • Updating a customer’s data in your database when a subscription payment succeeds
  • Making adjustments to an invoice when it’s created (but before it’s been paid)
  • Logging an accounting entry when a transfer is paid
  • Sending an email to the user, when the checkout has been cancelled or succeeded
  • Updating the product quantity in your database

… and many more.

Creating a Stripe Webhook

As the intro explains, webhooks run on the server-side, so they can be found in the Server Connect panel. In order to add a new Stripe webhook, right click Webhooks:

Open the Add Webhook menu and select Stripe:

This will create a folder called stripe. Here’s where we add our webhooks. Right click the folder:

And add event action:

You will see a list of all the available events. In our example we will show you how to trigger some action when the checkout process has completed successfully. So we select Checkout > checkout.session.completed event:

Our event action has been created, right click steps in order to define what needs to happen when this event occurs:

In this simple example we will show you how to set a value, but you can add any of the available steps - database update/insert/delete, send mail or any other step:

We add a name for this set value step and also enter a value for it. We also enable the output:

Note that each of the events has its own data available, so if you choose the dynamic data picker:

You will see all the available data for this event under $_POST > data:

You can use this dynamic data, where needed.
Save your event action, when you are done.

Testing Your Webhooks

We are working on our development/test target with also test mode in Stripe on so we can test the webhooks. We will show you how to test the webhooks and preview the results in Stripe Dashboard.

Stripe Terminal

Open the bottom panel in Wappler:

Then open the Terminals dropdown and select Stripe Webhooks:

As this is the first time you are doing this, Wappler automatically installs Stripe CLI locally, so you can test the webhooks:

When the installation is done, you will see a success message showing your test signing secret key, required for webhook testing:

Testing a Webhook

There are two ways to test a webhook. You can run your checkout page with your test products or you can use the built in Test Webhook option.

In this example we will show you how to use the Test Webhook option - it’s really easy.
All you need to do is to right click your webhook:

And click Test Stripe Webhook:

You can see the test running in the Stripe Terminal and all the events that occur:

Now as the test is done, we can preview the result / response of our event action in the Stripe Dashboard. Either navigate to: https://dashboard.stripe.com/test/events or right click the webhook:

And select Stripe Dashboard:

You can see the Checkout Session Completed event there, in the events list. Click it:

Scroll down and you will see your computer name and when you expand it, you can see the event info. In the response body we can see our Set Value step called checkout_status with the value we entered:

You can close/quit the Stripe Terminal, when you finish testing your webhooks. It’s no longer needed and you can open it later when you need to test again:

Going Live

After you test your webhooks and confirm they are working fine, you can publish your site to your production/live target and setup Stripe Webhooks endpoint and signing secret.

Set up Endpoints

So after you publish your site, go to Stripe Dashboard > Developers and open Webhooks.
Click the Add Endpoint button:

Here we add our stripe endpoint URL:

Depending on your server model the Stripe Endpoint URLs are:

  • For NodeJS: https://yoursite.com/webhooks/stripe/
  • For PHP: https://yoursite.com/dmxConnect/webhooks/stripe/

where your yoursite.com is your live site domain.

Then select the events you want to send from the dropdown or select receive all events:

Click the Add endpoint button:

Set up Signing Secret

After we created the Endpoint, a Signing Secret key was created for it. We need to copy it and add it in Server Connect settings.
Click the button to reveal the Signing Secret and copy it:

Back to Wappler, open the Server Connect Settings:

Click Stripe. You can see the test Signing Secret was added automatically, we need to replace it with the one for our live endpoint:

Paste your Signing Secret and click Save:

And you are done.
You can setup as many webhooks as you need for your online store.

2 Likes

Hi @Teodor what an amazing update. Thank you Wappler team.

For anyone reading, I had some initial issues with this due to I believe, creating the Stripe folder previous to this update.

I was unable to add a Stripe Event to the stripe webhook folder. To solve this, I deleted the folder and it’s contents and then recreated it - this solved it.

Note - there is a current small bug where the event names are getting a titlecase as reported elsewhere on the forum - so just go to the file and make it lowercase if that happens.

I then received 400 errors in the terminal, I just had to redeploy/restart services to initiate the changes and then get the same 200 errors as Teo shows here.

Hope that’s helpful to anyone experiencing some small issues.

4 Likes

Thank you @Teodor, great update and accompanying tutorial.

Thank you @mgaussie, saved me another headache.

1 Like

A post was split to a new topic: Stripe Webhooks getting 404

After a succesful payment, using a checkout made with Stripe Subscriptions I want to redirect them to a success URL (like /success) and do two things:

  1. Show text: “you just bought {{product}}, congratulations”
  2. Create a new user in the database and start more back-end actions

Do I need to do this with webhooks? In that case, how can I do (1)?

EDIT: Answered my own question here Stripe: give session/checkout info to success page