????JFIF??x?x????'
| Server IP : 104.21.30.238  /  Your IP : 216.73.216.83 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /././home/tempvsty/././pontiacques.org/wp-content/plugins/give/src/Controller/ | 
| Upload File : | 
<?php
namespace Give\Controller;
use Give\Framework\Exceptions\Primitives\Exception;
use Give\Log\Log;
use Give\PaymentGateways\PayPalCommerce\DataTransferObjects\PayPalWebhookHeaders;
use Give\PaymentGateways\PayPalCommerce\Repositories\MerchantDetails;
use Give\PaymentGateways\PayPalCommerce\Repositories\Webhooks;
use Give\PaymentGateways\PayPalCommerce\Webhooks\WebhookRegister;
class PayPalWebhooks
{
    /**
     * @since 2.8.0
     *
     * @var MerchantDetails
     */
    private $merchantRepository;
    /**
     * @var Webhooks
     */
    private $webhookRepository;
    /**
     * @since 2.9.0
     *
     * @var WebhookRegister
     */
    private $webhookRegister;
    /**
     * PayPalWebhooks constructor.
     *
     * @since 2.8.0
     *
     * @param MerchantDetails $merchantRepository
     * @param WebhookRegister $register
     * @param Webhooks        $webhookRepository
     */
    public function __construct(
        MerchantDetails $merchantRepository,
        WebhookRegister $register,
        Webhooks $webhookRepository
    ) {
        $this->merchantRepository = $merchantRepository;
        $this->webhookRegister = $register;
        $this->webhookRepository = $webhookRepository;
    }
    /**
     * Handles all webhook event requests. First it verifies that authenticity of the event with
     * PayPal, and then it passes the event along to the appropriate listener to finish.
     *
     * @since 2.8.0
     *
     * @throws Exception
     */
    public function handle()
    {
        if ( ! $this->merchantRepository->accountIsConnected()) {
            return;
        }
        $event = json_decode(file_get_contents('php://input'), false);
        // If we receive an event that we're not expecting, just ignore it
        if ( ! $this->webhookRegister->hasEventRegistered($event->event_type)) {
            return;
        }
        $payPalHeaders = PayPalWebhookHeaders::fromHeaders(getallheaders());
        if (! $this->webhookRepository->verifyEventSignature($event, $payPalHeaders)) {
            Log::http(
                'Failed webhook event verification',
                [
                    'category' => 'PayPal Commerce Webhook',
                    'merchant' => $this->merchantRepository->getDetails(),
                    'event' => $event,
                    'headers' => getallheaders(),
                ]
            );
            throw new Exception('Failed event verification');
        }
        try {
            $this->webhookRegister
                ->getEventHandler($event->event_type)
                ->processEvent($event);
        } catch (Exception $exception) {
            $eventType = empty($event->event_type) ? 'Unknown' : $event->event_type;
            Log::http(
                "Error processing webhook: {$eventType}",
                [
                    'category' => 'PayPal Commerce Webhook',
                    'Webhook Event' => $event
                ]
            );
            throw $exception;
        }
    }
}