From 5ac9920fa5119f1399aeabadd18cf01ffe383d2b Mon Sep 17 00:00:00 2001 From: Vitalij Mik Date: Wed, 11 Sep 2024 11:38:47 +0200 Subject: [PATCH] NTR: PISHPS-336: fix webhook error because of timing issues (#833) Co-authored-by: Vitalij Mik --- .../Storefront/Webhook/NotificationFacade.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Controller/Storefront/Webhook/NotificationFacade.php b/src/Controller/Storefront/Webhook/NotificationFacade.php index ec8d118b6..b891e8942 100644 --- a/src/Controller/Storefront/Webhook/NotificationFacade.php +++ b/src/Controller/Storefront/Webhook/NotificationFacade.php @@ -143,6 +143,15 @@ public function onNotify(string $swTransactionId, Context $context): void throw new \Exception('Transaction ' . $swTransactionId . ' not found in Shopware'); } + # Apple pay direct creates a payment and then updates order/transaction custom fields, sometimes the webhook is quicker than the process. so we wait once and then read the custom fields again + if ($swTransaction->getCustomFields() === null) { + sleep(2); + $swTransaction = $this->getTransaction($swTransactionId, $context); + if (!$swTransaction instanceof OrderTransactionEntity) { + throw new \Exception('Transaction ' . $swTransactionId . ' not found in Shopware'); + } + } + # ----------------------------------------------------------------------------------------------------- $swOrder = $swTransaction->getOrder(); @@ -285,8 +294,7 @@ public function onNotify(string $swTransactionId, Context $context): void */ private function getTransaction(string $transactionId, Context $context): ?OrderTransactionEntity { - $criteria = new Criteria(); - $criteria->addFilter(new EqualsFilter('id', $transactionId)); + $criteria = new Criteria([$transactionId]); $criteria->addAssociation('order'); $criteria->addAssociation('order.salesChannel'); $criteria->addAssociation('order.lineItems');