diff --git a/Config/Config.php b/Config/Config.php
index d690c4e9..64f84e5a 100644
--- a/Config/Config.php
+++ b/Config/Config.php
@@ -235,6 +235,14 @@ public function isWebhookTriggerOnOrderState(): bool
return $this->getWebhookTriggerMode() === 'on_order_state';
}
+ /**
+ * Whether to skip storing purchase event in checkout session
+ */
+ public function isPurchaseSessionStorageDisabled(): bool
+ {
+ return (bool)$this->getModuleConfigValueAdvanced('disable_purchase_session_storage', false);
+ }
+
/**
* @return bool
*/
diff --git a/Observer/TriggerPurchaseDataLayerEvent.php b/Observer/TriggerPurchaseDataLayerEvent.php
index 0d579da1..04411ed4 100644
--- a/Observer/TriggerPurchaseDataLayerEvent.php
+++ b/Observer/TriggerPurchaseDataLayerEvent.php
@@ -6,6 +6,7 @@
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Api\Data\OrderInterface;
use Tagging\GTM\Api\CheckoutSessionDataProviderInterface;
+use Tagging\GTM\Config\Config;
use Tagging\GTM\DataLayer\Event\Purchase as PurchaseEvent;
use Tagging\GTM\Logger\Debugger;
use Exception;
@@ -15,15 +16,18 @@ class TriggerPurchaseDataLayerEvent implements ObserverInterface
private CheckoutSessionDataProviderInterface $checkoutSessionDataProvider;
private PurchaseEvent $purchaseEvent;
private Debugger $debugger;
+ private Config $config;
public function __construct(
CheckoutSessionDataProviderInterface $checkoutSessionDataProvider,
PurchaseEvent $purchaseEvent,
- Debugger $debugger
+ Debugger $debugger,
+ Config $config
) {
$this->checkoutSessionDataProvider = $checkoutSessionDataProvider;
$this->purchaseEvent = $purchaseEvent;
$this->debugger = $debugger;
+ $this->config = $config;
}
public function execute(Observer $observer)
@@ -31,6 +35,11 @@ public function execute(Observer $observer)
/** @var OrderInterface $order */
$order = $observer->getData('order');
+ if ($this->config->isPurchaseSessionStorageDisabled()) {
+ $this->debugger->debug("[TriggerPurchaseDataLayerEvent] Purchase session storage disabled; skipping add");
+ return;
+ }
+
$this->debugger->debug("TriggerPurchaseDataLayerEvent::execute(): has changed ");
$this->checkoutSessionDataProvider->add(
'purchase_event',
diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml
index b58f433d..c9a436d2 100644
--- a/etc/adminhtml/system.xml
+++ b/etc/adminhtml/system.xml
@@ -84,6 +84,14 @@
on_order_state
+
+
+ When enabled, purchase events are not stored in checkout session (prevents pushes on non-success pages after failed/aborted payments).
+ Magento\Config\Model\Config\Source\Yesno
+
+ 1
+
+