Skip to content

Commit 11fbebb

Browse files
authored
Merge pull request #4 from stape-io/feature/order-place-webhook-modified
Modified Place order webhook logic
2 parents d02ea46 + 85d47cb commit 11fbebb

File tree

8 files changed

+156
-15
lines changed

8 files changed

+156
-15
lines changed

Model/Data/Order.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public function isNewCustomer($email)
3333
$collection = $this->orderCollectionFactory->create()
3434
->addFieldToFilter('customer_email', $email);
3535

36+
$collection->getSelect()->where(
37+
$collection->getConnection()->quoteInto('total_paid > 0 OR status = ?', ['complete'])
38+
);
39+
3640
return $collection->getSize() <= 1;
3741
}
3842

@@ -47,9 +51,11 @@ public function getLifetimeSpent($email)
4751
/** @var \Magento\Sales\Model\ResourceModel\Order\Collection $collection */
4852
$collection = $this->orderCollectionFactory->create()
4953
->addFieldToFilter('customer_email', $email);
54+
5055
$select = $collection->getSelect()
5156
->reset(\Magento\Framework\Db\Select::COLUMNS)
5257
->columns(new \Zend_Db_Expr('SUM(total_paid) - SUM(total_refunded) as lifetime_spent'));
58+
5359
$result = $select->getConnection()->fetchOne($select);
5460
return $result ?? 0;
5561
}

Model/Webhook/Adapter.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ public function __construct(
5353
ConfigProvider $configProvider,
5454
LoggerInterface $logger,
5555
Converter $converter
56-
)
57-
{
56+
) {
5857
$this->json = $json;
5958
$this->clientFactory = $clientFactory;
6059
$this->configProvider = $configProvider;
@@ -183,5 +182,4 @@ public function test()
183182

184183
return $this->call('test_stape_webhook', $data);
185184
}
186-
187185
}

Observer/OrderCancelAfterObserver.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Magento\Framework\Event\Observer;
66
use Magento\Framework\Event\ObserverInterface;
7+
use Psr\Log\LoggerInterface;
78
use Stape\Gtm\Model\ConfigProvider;
89
use Stape\Gtm\Model\Webhook\Adapter;
910

@@ -19,18 +20,26 @@ class OrderCancelAfterObserver implements ObserverInterface
1920
*/
2021
private $adapter;
2122

23+
/**
24+
* @var LoggerInterface $logger
25+
*/
26+
private $logger;
27+
2228
/**
2329
* Define class dependencies
2430
*
2531
* @param ConfigProvider $configProvider
2632
* @param Adapter $adapter
33+
* @param LoggerInterface $logger
2734
*/
2835
public function __construct(
2936
ConfigProvider $configProvider,
30-
Adapter $adapter
37+
Adapter $adapter,
38+
LoggerInterface $logger
3139
) {
3240
$this->configProvider = $configProvider;
3341
$this->adapter = $adapter;
42+
$this->logger = $logger;
3443
}
3544

3645
/**
@@ -45,10 +54,16 @@ public function execute(Observer $observer)
4554
/** @var \Magento\Sales\Model\Order $creditmemo */
4655
$order = $observer->getOrder();
4756
$scope = $order->getStoreId();
48-
if ($this->configProvider->webhooksEnabled($scope)
49-
&& $this->configProvider->isRefundWebhookEnabled($scope)
57+
if (!$this->configProvider->webhooksEnabled($scope)
58+
|| !$this->configProvider->isRefundWebhookEnabled($scope)
5059
) {
60+
return;
61+
}
62+
63+
try {
5164
$this->adapter->void($order);
65+
} catch (\Exception $e) {
66+
$this->logger->notice($e->getMessage());
5267
}
5368
}
5469
}

Observer/OrderCreditmemoRefundObserver.php

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Magento\Framework\Event\Observer;
66
use Magento\Framework\Event\ObserverInterface;
7+
use Psr\Log\LoggerInterface;
78
use Stape\Gtm\Model\ConfigProvider;
89
use Stape\Gtm\Model\Webhook\Adapter;
910

@@ -19,18 +20,26 @@ class OrderCreditmemoRefundObserver implements ObserverInterface
1920
*/
2021
private $adapter;
2122

23+
/**
24+
* @var LoggerInterface $logger
25+
*/
26+
private $logger;
27+
2228
/**
2329
* Define class dependencies
2430
*
2531
* @param ConfigProvider $configProvider
2632
* @param Adapter $adapter
33+
* @param LoggerInterface $logger
2734
*/
2835
public function __construct(
2936
ConfigProvider $configProvider,
30-
Adapter $adapter
37+
Adapter $adapter,
38+
LoggerInterface $logger
3139
) {
3240
$this->configProvider = $configProvider;
3341
$this->adapter = $adapter;
42+
$this->logger = $logger;
3443
}
3544

3645
/**
@@ -45,10 +54,16 @@ public function execute(Observer $observer)
4554
/** @var \Magento\Sales\Model\Order\Creditmemo $creditmemo */
4655
$creditmemo = $observer->getCreditmemo();
4756
$scope = $creditmemo->getOrder()->getStoreId();
48-
if ($this->configProvider->webhooksEnabled($scope)
49-
&& $this->configProvider->isRefundWebhookEnabled($scope)
50-
) {
57+
58+
if (!$this->configProvider->webhooksEnabled($scope)
59+
|| !$this->configProvider->isRefundWebhookEnabled($scope)) {
60+
return;
61+
}
62+
63+
try {
5164
$this->adapter->refund($creditmemo);
65+
} catch (\Exception $e) {
66+
$this->logger->notice($e->getMessage());
5267
}
5368
}
5469
}

Observer/OrderSaveCommitAfter.php

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<?php
2+
3+
namespace Stape\Gtm\Observer;
4+
5+
use Magento\Framework\Event\Observer;
6+
use Magento\Framework\Event\ObserverInterface;
7+
use Magento\Framework\Stdlib\CookieManagerInterface;
8+
use Psr\Log\LoggerInterface;
9+
use Stape\Gtm\Model\ConfigProvider;
10+
use Stape\Gtm\Model\Webhook\Adapter;
11+
12+
class OrderSaveCommitAfter implements ObserverInterface
13+
{
14+
/**
15+
* @var ConfigProvider $configProvider
16+
*/
17+
private $configProvider;
18+
19+
/**
20+
* @var Adapter $adapter
21+
*/
22+
private $adapter;
23+
24+
/**
25+
* @var CookieManagerInterface $cookieManager
26+
*/
27+
private $cookieManager;
28+
29+
/**
30+
* @var LoggerInterface $logger
31+
*/
32+
private $logger;
33+
34+
/** @var string[] */
35+
private $cookies = [
36+
'_fbc',
37+
'_fbp',
38+
'FPGCLAW',
39+
'_gcl_aw',
40+
'ttclid'
41+
];
42+
43+
/**
44+
* Define class dependencies
45+
*
46+
* @param ConfigProvider $configProvider
47+
* @param Adapter $adapter
48+
* @param CookieManagerInterface $cookieManager
49+
* @param LoggerInterface $logger
50+
*/
51+
public function __construct(
52+
ConfigProvider $configProvider,
53+
Adapter $adapter,
54+
CookieManagerInterface $cookieManager,
55+
LoggerInterface $logger
56+
) {
57+
$this->configProvider = $configProvider;
58+
$this->adapter = $adapter;
59+
$this->cookieManager = $cookieManager;
60+
$this->logger = $logger;
61+
}
62+
63+
/**
64+
* Preparing additional information
65+
*
66+
* @return array
67+
*/
68+
private function prepareAdditionalInfo()
69+
{
70+
$additionalInformation = [];
71+
72+
foreach ($this->cookies as $cookieName) {
73+
$additionalInformation['cookies'][$cookieName] = $this->cookieManager->getCookie($cookieName);
74+
}
75+
76+
return $additionalInformation;
77+
}
78+
79+
/**
80+
* Send webhook for purchase event
81+
*
82+
* @param Observer $observer
83+
* @return void
84+
*/
85+
public function execute(Observer $observer)
86+
{
87+
/** @var \Magento\Sales\Model\Order $order */
88+
$order = $observer->getOrder();
89+
90+
if (!$order->dataHasChangedFor('total_paid') || $order->getGrandTotal() > $order->getTotalPaid()) {
91+
return;
92+
}
93+
94+
$enabled = $this->configProvider->webhooksEnabled($order->getStoreId());
95+
$hookEnabled = $this->configProvider->isPurchaseWebhookEnabled($order->getStoreId());
96+
97+
if (!$enabled && !$hookEnabled) {
98+
return;
99+
}
100+
101+
try {
102+
$this->adapter->purchase($order, $this->prepareAdditionalInfo());
103+
} catch (\Exception $e) {
104+
$this->logger->notice($e->getMessage());
105+
}
106+
}
107+
}

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"license": [
66
"GPL-3.0-only"
77
],
8-
"version": "1.0.7",
8+
"version": "1.0.8",
99
"require": {
1010
"php": ">=7.4.0"
1111
},

etc/events.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<?xml version="1.0"?>
22

33
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
4-
<event name="sales_model_service_quote_submit_success">
5-
<observer name="stape_gtm_sales_model_service_quote_submit_success" instance="Stape\Gtm\Observer\QuoteSubmitSuccessObserver" />
6-
</event>
74
<event name="sales_order_creditmemo_refund">
85
<observer name="stape_gtm_sales_order_creditmemo_refund" instance="Stape\Gtm\Observer\OrderCreditmemoRefundObserver" />
96
</event>
107
<event name="order_cancel_after">
118
<observer name="stape_gtm_sales_order_cancel_after" instance="Stape\Gtm\Observer\OrderCancelAfterObserver" />
129
</event>
10+
<event name="sales_order_save_commit_after">
11+
<observer name="stape_gtm_sales_order_save_after" instance="Stape\Gtm\Observer\OrderSaveCommitAfter" />
12+
</event>
1313
</config>

etc/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0"?>
22

33
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
4-
<module name="Stape_Gtm" schema_version="1.0.7" setup_version="1.0.7">
4+
<module name="Stape_Gtm" schema_version="1.0.8" setup_version="1.0.8">
55
<sequence>
66
<module name="Magento_Backend" />
77
<module name="Magento_Catalog" />

0 commit comments

Comments
 (0)