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');