From 3075f7fb224a3f48cdb0cca97c96db224a7c2588 Mon Sep 17 00:00:00 2001 From: amirinterlutions Date: Wed, 24 Jan 2024 22:13:10 +0100 Subject: [PATCH 1/4] PAYOSWXP-120: notification targets: log notification target responses to logfile --- src/DependencyInjection/logger.xml | 18 ++++++++ src/DependencyInjection/services.xml | 7 +--- src/DependencyInjection/webhooks.xml | 3 +- .../NotificationForwardHandler.php | 41 ++++++++++++++++--- 4 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 src/DependencyInjection/logger.xml diff --git a/src/DependencyInjection/logger.xml b/src/DependencyInjection/logger.xml new file mode 100644 index 000000000..33e299b0a --- /dev/null +++ b/src/DependencyInjection/logger.xml @@ -0,0 +1,18 @@ + + + + + + + payone_payment + + + + + + payone_transaction_forward + + + diff --git a/src/DependencyInjection/services.xml b/src/DependencyInjection/services.xml index 95e1ff5c3..38dcd5642 100644 --- a/src/DependencyInjection/services.xml +++ b/src/DependencyInjection/services.xml @@ -17,6 +17,7 @@ + @@ -66,12 +67,6 @@ - - - - payone_payment - - diff --git a/src/DependencyInjection/webhooks.xml b/src/DependencyInjection/webhooks.xml index 72fd3ba10..451d84370 100644 --- a/src/DependencyInjection/webhooks.xml +++ b/src/DependencyInjection/webhooks.xml @@ -24,13 +24,14 @@ + - + diff --git a/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php b/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php index 6813952e9..4e6369813 100644 --- a/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php +++ b/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php @@ -4,21 +4,23 @@ namespace PayonePayment\Payone\Webhook\MessageBus\MessageHandler; +use Monolog\Level; +use Monolog\Logger; use PayonePayment\DataAbstractionLayer\Entity\NotificationForward\PayonePaymentNotificationForwardEntity; use PayonePayment\DataAbstractionLayer\Entity\NotificationTarget\PayonePaymentNotificationTargetEntity; use PayonePayment\Payone\Webhook\MessageBus\Command\NotificationForwardCommand; -use Psr\Log\LoggerInterface; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\Handler\MessageSubscriberInterface; class NotificationForwardHandler implements MessageSubscriberInterface { public function __construct( private readonly EntityRepository $notificationForwardRepository, - private readonly LoggerInterface $logger + private readonly Logger $logger ) { } @@ -52,6 +54,14 @@ public function handle(NotificationForwardCommand $message): void $this->updateResponses($multiHandle, $notificationForwards, $forwardRequests, $message->getContext()); + foreach ($forwardRequests as $id => $handle) { + $responseInfo = curl_getinfo($handle); + $responseContent = curl_multi_getcontent($handle); + $this->statusLogger($responseInfo, $responseContent, $id); + curl_multi_remove_handle($multiHandle, $handle); + curl_close($handle); + } + curl_multi_close($multiHandle); } @@ -71,10 +81,10 @@ private function getNotificationForwards(array $ids, Context $context): EntitySe } private function updateResponses( - \CurlMultiHandle $multiHandle, + \CurlMultiHandle $multiHandle, EntitySearchResult $notificationForwards, - array $forwardRequests, - Context $context + array $forwardRequests, + Context $context ): void { $data = []; @@ -136,7 +146,7 @@ private function getForwardRequests(\CurlMultiHandle $multiHandle, EntitySearchR private function buildHeaders( PayonePaymentNotificationForwardEntity $forward, - PayonePaymentNotificationTargetEntity $target + PayonePaymentNotificationTargetEntity $target ): array { $headers = [ 'X-Forwarded-For: ' . $forward->getIp(), @@ -149,4 +159,23 @@ private function buildHeaders( return $headers; } + + private function statusLogger(array $responseInfo, ?string $responseContent, string $id): void + { + $statusCode = $responseInfo['http_code']; + + $response = new Response($responseContent, $statusCode, $responseInfo); + $logLevel = $response->isSuccessful() ? 'info' : 'error'; + $statusText = Response::$statusTexts[$statusCode] ?? 'Unknown Status Code'; + + $this->logger->addRecord( + Level::fromName($logLevel), + 'Forwarding notification - ' . $statusText, + [ + 'id' => $id, + 'information' => $responseInfo, + 'content' => $response->getContent(), + ] + ); + } } From 310ef19474a8b3d697d53af703e5f67efc6ba835 Mon Sep 17 00:00:00 2001 From: amirinterlutions Date: Wed, 24 Jan 2024 22:31:14 +0100 Subject: [PATCH 2/4] PAYOSWXP-120: Delete the commented service from xml --- src/DependencyInjection/webhooks.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/DependencyInjection/webhooks.xml b/src/DependencyInjection/webhooks.xml index 451d84370..9bbf1d33a 100644 --- a/src/DependencyInjection/webhooks.xml +++ b/src/DependencyInjection/webhooks.xml @@ -24,7 +24,6 @@ - From d8108e16be5602f7171ca42fb8bc3f495aca3221 Mon Sep 17 00:00:00 2001 From: amirinterlutions Date: Sun, 28 Jan 2024 22:49:20 +0100 Subject: [PATCH 3/4] PAYOSWXP-120: Addresses ECS issues and reverts the changes made in PAYOSWXP-121 (I created a separate branch for this). --- .../MessageHandler/NotificationForwardHandler.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php b/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php index 4e6369813..3523f8cc1 100644 --- a/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php +++ b/src/Payone/Webhook/MessageBus/MessageHandler/NotificationForwardHandler.php @@ -20,7 +20,7 @@ class NotificationForwardHandler implements MessageSubscriberInterface { public function __construct( private readonly EntityRepository $notificationForwardRepository, - private readonly Logger $logger + private readonly Logger $logger ) { } @@ -81,10 +81,10 @@ private function getNotificationForwards(array $ids, Context $context): EntitySe } private function updateResponses( - \CurlMultiHandle $multiHandle, + \CurlMultiHandle $multiHandle, EntitySearchResult $notificationForwards, - array $forwardRequests, - Context $context + array $forwardRequests, + Context $context ): void { $data = []; @@ -146,7 +146,7 @@ private function getForwardRequests(\CurlMultiHandle $multiHandle, EntitySearchR private function buildHeaders( PayonePaymentNotificationForwardEntity $forward, - PayonePaymentNotificationTargetEntity $target + PayonePaymentNotificationTargetEntity $target ): array { $headers = [ 'X-Forwarded-For: ' . $forward->getIp(), From fecf68e97da296a7e90307602695faa91d8183a1 Mon Sep 17 00:00:00 2001 From: Frederik Rommel Date: Mon, 5 Feb 2024 22:22:00 +0100 Subject: [PATCH 4/4] PAYOSWXP-120: notification forwarding: use correct logger registration --- src/DependencyInjection/logger.xml | 18 ------------------ src/DependencyInjection/services.xml | 7 ++++++- src/DependencyInjection/webhooks.xml | 3 ++- src/PayonePayment.php | 18 ++++++++++++++++++ src/Resources/config/packages/monolog.yaml | 9 +++++++++ 5 files changed, 35 insertions(+), 20 deletions(-) delete mode 100644 src/DependencyInjection/logger.xml create mode 100644 src/Resources/config/packages/monolog.yaml diff --git a/src/DependencyInjection/logger.xml b/src/DependencyInjection/logger.xml deleted file mode 100644 index 33e299b0a..000000000 --- a/src/DependencyInjection/logger.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - payone_payment - - - - - - payone_transaction_forward - - - diff --git a/src/DependencyInjection/services.xml b/src/DependencyInjection/services.xml index 38dcd5642..95e1ff5c3 100644 --- a/src/DependencyInjection/services.xml +++ b/src/DependencyInjection/services.xml @@ -17,7 +17,6 @@ - @@ -67,6 +66,12 @@ + + + + payone_payment + + diff --git a/src/DependencyInjection/webhooks.xml b/src/DependencyInjection/webhooks.xml index 9bbf1d33a..8fc2bcb32 100644 --- a/src/DependencyInjection/webhooks.xml +++ b/src/DependencyInjection/webhooks.xml @@ -30,7 +30,8 @@ - + + diff --git a/src/PayonePayment.php b/src/PayonePayment.php index 758e6e9ba..82357a91c 100644 --- a/src/PayonePayment.php +++ b/src/PayonePayment.php @@ -19,9 +19,14 @@ use Shopware\Core\Framework\Plugin\Util\PluginIdProvider; use Shopware\Core\System\SystemConfig\SystemConfigService; use Symfony\Component\Config\FileLocator; +use Symfony\Component\Config\Loader\DelegatingLoader; +use Symfony\Component\Config\Loader\LoaderResolver; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Loader\DirectoryLoader; +use Symfony\Component\DependencyInjection\Loader\GlobFileLoader; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; class PayonePayment extends Plugin { @@ -33,6 +38,19 @@ public function build(ContainerBuilder $container): void $loader->load('services.xml'); parent::build($container); + + $locator = new FileLocator('Resources/config'); + + $resolver = new LoaderResolver([ + new YamlFileLoader($container, $locator), + new GlobFileLoader($container, $locator), + new DirectoryLoader($container, $locator), + ]); + + $configLoader = new DelegatingLoader($resolver); + + $confDir = \rtrim($this->getPath(), '/') . '/Resources/config'; + $configLoader->load($confDir . '/{packages}/*.yaml', 'glob'); } public function install(InstallContext $installContext): void diff --git a/src/Resources/config/packages/monolog.yaml b/src/Resources/config/packages/monolog.yaml new file mode 100644 index 000000000..ccb17e145 --- /dev/null +++ b/src/Resources/config/packages/monolog.yaml @@ -0,0 +1,9 @@ +monolog: + channels: [ "payone_transaction_forward" ] + + handlers: + payoneTransactionForwardLogger: + type: rotating_file + path: "%kernel.logs_dir%/payone_transaction_forward.log" + level: info + channels: [ "payone_transaction_forward" ]