Skip to main content

PayPal Integration ''PayPal Webhooks''

A Webhook is an HTTP callback that occurs when something happens; a simple event-notification system via HTTP POST that allows developers to easily access notifications of payment activities, such as payment status update, or recurring charges. You can perform actions on your back-end after processing each notification, such as:

  • Email a purchase confirmation to your customer.
  • Enable download of digital media.
  • Issue a refund.
  • Keep track of which subscriptions are active.
To create a Webhook, navigate to the PayPal Dashboard, and click on My Apps & Credentials. Then select the app in which you want to set up the Webhooks.
PayPal Developer
You can see the details about your application. Notice in the top right that there are two buttons (Sandbox, Live), I'll be using Sandbox during this tutorial, but you need to set up your Live settings before going Live. To configure Webhooks for this app, click on Add Webhook as displayed in the screenshot:
Adding a WebHook
Select the Event Types that you are interested in getting notified, and enter the URL where the Webhooks will be sent to (it has to be HTTPS). To handle the Webhook calls, I'm going to add a new action method to the HomeController called 'Webhook':
So the Webhook Url in this case will be:https://pedroalonso.localtunnel.me/home/webhook. I'll explain the 'localtunnel' part in the next section.
PayPal Developer Dashboard
When you save the Webhook, you will see this confirmation screen:
Webhook Created Successfully
Now that the Webhook is set up, you can see in the left menu under 'Webhooks Simulator', here you can send 'test' webhook events to your URL to test that your code is working. Also, under 'Webhooks Events' you can see all the events that PayPal sent for this application. You can verify that you're handling the events correctly and re-send them if you want to do further testing.
To see how the Webhooks are working, I ran the project that we built in the previous tutorial, and I created an 'authorize payment and capture later', so that PayPal would send the event. After running the sample, I clicked on 'Webhooks Event' and I can see that the event has been sent:
Webhook Events
As you can see, at the right there is aResend button if you want to debug your code and see how to properly implement the handler. Also, if you click on the event, you can see all the details:
Webhook Event Details
This is the full JSON for the Webhook Event:
As you can see in the picture, the event details are encoded in JSON and they're sent as the body of the request to your Webhook URL handler. Also, there are several important properties that we need to use in our handler:
  • id: This is the id of the webhook event, and we need to send this parameter to PayPal if we want to retrieve a specific webhook event.
  • event_type: This is used to know the type of event that we are receiving as we probably need to process different event types in different ways.
  • resource.parent_payment: This is the id of the payment that this event is related to. We possibly have this id stored in a database, and can send an email to our customer or ship the goods purchased by the customer.
Based on the previous explanation, this is the code of the action controller to process the Webhook:
A few things to explain from the previous function. From lines 10-16, I'm only reading the body of the request and parsing the JSON object to a dynamic C# object. On line 18, which is optional, I'm calling the PayPal API with the event Id to get the full event details. This is done for security to verify that I'm using a valid PayPal object. On line 24 I have created a switch to evaluate the types of Webhooks that I want to process and write the custom code as needed. 
As you can also see, line 22 is commented out. Apparently that method validates that the SSL certificate from the Request is valid and belongs to PayPal, but it doesn't work in Sandbox mode. It might work in Live, but I don't like to have code in Live that is not tested, especially if it's dealing with a Payment Gateway, so I opted for removing that and using a different approach. If you use the PHP version of the PayPal SDK library, bear in mind that the function 'ValidateReceivedEvent' does not even exist.
As you have seen previously, in order to test Webhooks, we need to configure a public URL that PayPal can use to send the events. If we are working locally, normally we develop using 'localhost', so that would be a small problem. To solve that, we need to configure a secure tunnel to our local computer. 
Localtunnel is a small piece of software that creates a secure tunnel between your local machine and a publicly accessible domain. It’s useful for testing Webhooks, but you can also use it to share live URLs to web applications running on your development machine for the purposes of testing, feedback, or other tasks.
You need to have Node.js to be able to install localtunnel. Then simply open a console or terminal, and run:
$ npm install -g localtunnel
To create a tunnel, run:
$ lt --port 5000 --subdomain pedroalonso
That will map the URL 'https://pedroalonso.localtunnel.me' to 'localhost:5000'. If you run your project on IIS Express, you probably will use a different port, so you'll need to reflect that in your command.
After localtunnel is set up and our project is running, I have added a breakpoint in Visual Studio to evaluate the data that I'm getting. As you can see in this screenshot, I have mapped the JSON event object to a C# dynamic object.
Event Mapped to Dynamic Oject
Retrieving the event from PayPal API using the event Id, we also get the event details, as you can see here:
WebHook Event
Webhooks are becoming a standard way for REST API to notify applications about events. As you can see, they are pretty easy to handle, and they are used by many companies such as Stripe, SendGrid, MailChimp, etc. PayPal used to have Instant Payment Notification, and it's still in use, but they recommend implementing Webhooks whenever possible.  
I think it would be really interesting if more consumer applications offered Webhooks too. The ability to start a process based upon an event in a separate application is extremely useful and offers a glimpse at the future of the real-time web.

Comments

You may also want to read these ⤵️

Referee kills player in a football match

A referee is facing murder charges after football players allegedly forced him to

Do not watch this while driving

Kids are lovely and fun to watch most times. I know most of you did this and so many other funny stuffs as a kid. Feel free to share yours... Do not watch this while driving

Over 40 Million Accounts Found Guilty

Microsoft has uncovered 44 million user accounts using usernames and passwords that have been leaked through security breaches.

RAW TALENT ep1 (freestyle by Gdlpeid)

Just watch! Freestyle by ''Gdlpeeid''. A rapper with a difference.  Pure raw talent.

By February 2020 - WhatsApp Will Stop Working on These Phones

Every now and then, WhatsApp does fish out a list of old phones for which support is discontinued and if you have an old phone lying around as a backup, you might want to read on.

These 10 Powerful Words And Phrases Defined The Decade

Honestly, it has been a wonderful decade to remember.  A lot has happened and a lot has been spoken also. But our focus is on the words and phrases spoken.  Below are words and phrases spoken between 2010 - 2019 that defined the decade.....

Apple Has Released iOS 13.2.2 And Fixes Major Issue

All thanks to Apple,  the tech  giant just released iOS 13.2.2, which addresses the issue of background apps being killed prematurely, along with a handful of other annoyances.

This Magnetic thread Can Be Used To Clear Blood Clot in The Brain

Link from mashable.com  Researchers at MIT developed a thread that can be steered magnetically to glide through the brain's blood vessels and

This gigantic monster device turns wave energy into electricity

This 826-ton buoy was developed by OceanEnergy to turn wave energy into electricity. IEEE Spectrum reported that "OE Buoy" was towed from Oregon to Hawaii, where it will undergo a series of tests that will prove whether it can withstand the battering waves while generating electricity. Click the link below to watch the video..

Lionel Messi Barcelona exit date revealed

The Barcelona Legend has decided on when he wants to quit the club and even has a successor in his mind already.