Skip to content

Webhook Notifications using NotificationDispatcherService ​

The NotificationDispatcherService is responsible for receiving eBay API webhook notifications, validating them, and dispatching them as Laravel events. It acts as the bridge between eBay’s webhook system and Laravel’s event-driven architecture.

The service supports both synchronous and asynchronous processing and is designed to respond to eBay webhooks as fast as possible to prevent duplicate retries.

Overview ​

  • \Rat\eBaySDK\Services\NotificationDispatcherService Validates incoming webhook requests, parses the XML payload, and dispatches Laravel events.
  • \Rat\eBaySDK\Jobs\DispatchNotificationJob Optional queue-based job that processes webhook notifications asynchronously.
  • \Rat\eBaySDK\Http\Controllers\EventController A ready-to-use controller that receives webhook requests from eBay and forwards them to the dispatcher.
  • \Rat\eBaySDK\Notifications\* Event classes representing individual eBay notification types.

Requirements ​

  1. You must expose an HTTP endpoint that eBay can call. Read Receive eBay Notifications for more details.
  2. eBay expects a very fast HTTP 200 response, and if processing takes too long, eBay will retry the webhook. Thus, asynchronous handling is strongly recommended, using a working and running Laravel queue worker.

Usage ​

Set-Up a Controller (or use the SDK-one). Read more on the Receive eBay Notifications documentation page.

php
namespace Rat\eBaySDK\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Rat\eBaySDK\Exceptions\InvalidNotificationPayloadException;
use Rat\eBaySDK\Exceptions\InvalidWebhookTokenException;
use Rat\eBaySDK\Services\NotificationDispatcherService;

class EventController extends Controller
{
    /**
     *
     * @param NotificationDispatcherService $dispatcher
     * @return void
     */
    public function __construct(
        private readonly NotificationDispatcher $dispatcher
    ) {}

    /**
     *
     * @param Request $request
     * @param ?string $token
     * @return Response
     */
    public function dispatch(Request $request, ?string $token = null): Response
    {
        try {
            $async = (bool) config('ebay-sdk.webhook.async', false);

            if ($async) {
                $this->dispatcher->handleAsync(
                    $request->getContent(),
                    $request->headers->all(),
                    $token
                );
            } else {
                $this->dispatcher->handle(
                    $request->getContent(),
                    $request->headers->all(),
                    $token
                );
            }
        } catch (InvalidWebhookTokenException) {
            return response('Forbidden', 403);
        } catch (InvalidNotificationPayloadException) {
            return response('Invalid Payload', 400);
        }

        return response('', 200);
    }
}

This software is not an official eBay product and is not associated with, sponsored by, or endorsed by eBay Inc.