File "WebhookRegistrar.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-webhooks/src/WebhookRegistrar.php
File size: 3.26 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* The WebhookRegistrar registers and unregisters webhooks with PayPal.
*
* @package WooCommerce\PayPalCommerce\Webhooks
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\Webhooks;
use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\WebhookEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
use WooCommerce\PayPalCommerce\ApiClient\Factory\WebhookFactory;
/**
* Class WebhookRegistrar
*/
class WebhookRegistrar {
const EVENT_HOOK = 'ppcp-register-event';
const KEY = 'ppcp-webhook';
/**
* The Webhook factory.
*
* @var WebhookFactory
*/
private $webhook_factory;
/**
* The Webhook endpoint.
*
* @var WebhookEndpoint
*/
private $endpoint;
/**
* The WordPress Rest API endpoint.
*
* @var IncomingWebhookEndpoint
*/
private $rest_endpoint;
/**
* The last webhook event storage.
*
* @var WebhookEventStorage
*/
private $last_webhook_event_storage;
/**
* The logger.
*
* @var LoggerInterface
*/
private $logger;
/**
* WebhookRegistrar constructor.
*
* @param WebhookFactory $webhook_factory The Webhook factory.
* @param WebhookEndpoint $endpoint The Webhook endpoint.
* @param IncomingWebhookEndpoint $rest_endpoint The WordPress Rest API endpoint.
* @param WebhookEventStorage $last_webhook_event_storage The last webhook event storage.
* @param LoggerInterface $logger The logger.
*/
public function __construct(
WebhookFactory $webhook_factory,
WebhookEndpoint $endpoint,
IncomingWebhookEndpoint $rest_endpoint,
WebhookEventStorage $last_webhook_event_storage,
LoggerInterface $logger
) {
$this->webhook_factory = $webhook_factory;
$this->endpoint = $endpoint;
$this->rest_endpoint = $rest_endpoint;
$this->last_webhook_event_storage = $last_webhook_event_storage;
$this->logger = $logger;
}
/**
* Register Webhooks with PayPal.
*
* @return bool
*/
public function register(): bool {
$this->unregister();
$webhook = $this->webhook_factory->for_url_and_events(
$this->rest_endpoint->url(),
$this->rest_endpoint->handled_event_types()
);
try {
$created = $this->endpoint->create( $webhook );
if ( empty( $created->id() ) ) {
return false;
}
update_option(
self::KEY,
$created->to_array()
);
$this->last_webhook_event_storage->clear();
$this->logger->info( 'Webhooks subscribed.' );
return true;
} catch ( RuntimeException $error ) {
$this->logger->error( 'Failed to subscribe webhooks: ' . $error->getMessage() );
return false;
}
}
/**
* Unregister webhooks with PayPal.
*/
public function unregister(): void {
try {
$webhooks = $this->endpoint->list();
foreach ( $webhooks as $webhook ) {
try {
$this->endpoint->delete( $webhook );
} catch ( RuntimeException $deletion_error ) {
$this->logger->error( "Failed to delete webhook {$webhook->id()}: {$deletion_error->getMessage()}" );
}
}
} catch ( RuntimeException $error ) {
$this->logger->error( 'Failed to delete webhooks: ' . $error->getMessage() );
}
delete_option( self::KEY );
$this->last_webhook_event_storage->clear();
$this->logger->info( 'Webhooks deleted.' );
}
}