Skip to content

Commit b4ca737

Browse files
authored
Merge pull request #35 from signifyd/3.6.2
3.6.2 Bug fixes
2 parents 4635eb0 + 220f980 commit b4ca737

File tree

9 files changed

+227
-53
lines changed

9 files changed

+227
-53
lines changed

Controller/Webhooks/Index.php

+12-4
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,18 @@ public function processRequest($request, $hash, $topic)
124124
$requestJson = json_decode($request);
125125

126126
if (json_last_error() == JSON_ERROR_NONE) {
127-
// Test is only verifying that the endpoint is reachable. So we just complete here
128-
if ($topic === 'cases/test') {
129-
$this->getResponse()->setStatusCode(Http::STATUS_CODE_200);
130-
return;
127+
switch (($topic)) {
128+
case 'cases/test':
129+
// Test is only verifying that the endpoint is reachable. So we just complete here
130+
$this->getResponse()->setStatusCode(Http::STATUS_CODE_200);
131+
return;
132+
133+
case 'cases/creation':
134+
$message = 'Case creation will not be processed by Magento';
135+
$this->getResponse()->appendBody($message);
136+
$this->logger->debug("API: {$message}");
137+
$this->getResponse()->setStatusCode(Http::STATUS_CODE_200);
138+
return;
131139
}
132140

133141
/** @var $order \Magento\Sales\Model\Order */

Cron/RetryCaseJob.php

+90-7
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@
88
namespace Signifyd\Connect\Cron;
99

1010
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Sales\Model\ResourceModel\Order as OrderResourceModel;
12+
use Magento\Sales\Model\OrderFactory;
1113
use Signifyd\Connect\Logger\Logger;
1214
use Signifyd\Connect\Helper\PurchaseHelper;
1315
use Signifyd\Connect\Helper\Retry;
1416
use Signifyd\Connect\Model\Casedata;
17+
use Signifyd\Connect\Model\ResourceModel\Casedata as CasedataResourceModel;
18+
use Signifyd\Connect\Model\CasedataFactory;
1519

1620
class RetryCaseJob
1721
{
@@ -35,16 +39,60 @@ class RetryCaseJob
3539
*/
3640
protected $caseRetryObj;
3741

42+
/**
43+
* @var OrderResourceModel
44+
*/
45+
protected $orderResourceModel;
46+
47+
/**
48+
* @var OrderFactory
49+
*/
50+
protected $orderFactory;
51+
52+
/**
53+
* @var CasedataResourceModel
54+
*/
55+
protected $casedataResourceModel;
56+
57+
/**
58+
* @var CasedataFactory\
59+
*/
60+
protected $casedataFactory;
61+
62+
/**
63+
* @var \StripeIntegration\Payments\Model\Config
64+
*/
65+
protected $stripeConfig;
66+
67+
/**
68+
* RetryCaseJob constructor.
69+
* @param ObjectManagerInterface $objectManager
70+
* @param PurchaseHelper $helper
71+
* @param Logger $logger
72+
* @param Retry $caseRetryObj
73+
* @param OrderResourceModel $orderResourceModel
74+
* @param OrderFactory $orderFactory
75+
* @param CasedataResourceModel $casedataResourceModel
76+
* @param CasedataFactory $casedataFactory
77+
*/
3878
public function __construct(
3979
ObjectManagerInterface $objectManager,
4080
PurchaseHelper $helper,
4181
Logger $logger,
42-
Retry $caseRetryObj
82+
Retry $caseRetryObj,
83+
OrderResourceModel $orderResourceModel,
84+
OrderFactory $orderFactory,
85+
CasedataResourceModel $casedataResourceModel,
86+
CasedataFactory $casedataFactory
4387
) {
4488
$this->_objectManager = $objectManager;
4589
$this->_helper = $helper;
4690
$this->logger = $logger;
4791
$this->caseRetryObj = $caseRetryObj;
92+
$this->orderResourceModel = $orderResourceModel;
93+
$this->orderFactory = $orderFactory;
94+
$this->casedataResourceModel = $casedataResourceModel;
95+
$this->casedataFactory = $casedataFactory;
4896
}
4997

5098
/**
@@ -70,13 +118,15 @@ public function execute()
70118
$result = $this->_helper->postCaseToSignifyd($caseData, $order);
71119

72120
if ($result) {
73-
/** @var \Signifyd\Connect\Model\Casedata $caseObj */
74-
$caseObj = $this->_objectManager->create(\Signifyd\Connect\Model\Casedata::class)
75-
->load($case->getOrderIncrement())
76-
->setCode($result)
121+
/** @var Casedata $caseObj */
122+
$caseObj = $this->casedataFactory->create();
123+
$this->casedataResourceModel->load($caseObj, $case->getOrderIncrement());
124+
125+
$caseObj->setCode($result)
77126
->setMagentoStatus(Casedata::IN_REVIEW_STATUS)
78127
->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
79-
$caseObj->save();
128+
129+
$this->casedataResourceModel->save($caseObj);
80130
}
81131
}
82132

@@ -109,8 +159,41 @@ public function execute()
109159
return $this;
110160
}
111161

162+
/**
163+
* @param $incrementId
164+
* @return \Magento\Sales\Model\Order
165+
*/
112166
public function getOrder($incrementId)
113167
{
114-
return $this->_objectManager->get(\Magento\Sales\Model\Order::class)->loadByIncrementId($incrementId);
168+
$order = $this->orderFactory->create();
169+
$this->orderResourceModel->load($order, $incrementId, 'increment_id');
170+
171+
if ($order->getPayment()->getMethod() == 'stripe_payments') {
172+
$this->reInitStripe($order);
173+
}
174+
175+
return $order;
176+
}
177+
178+
/**
179+
* @param \Magento\Sales\Model\Order $order
180+
* @return bool
181+
*/
182+
public function reInitStripe(\Magento\Sales\Model\Order $order)
183+
{
184+
if (class_exists(\StripeIntegration\Payments\Model\Config::class) === false) {
185+
return false;
186+
}
187+
188+
if ($this->stripeConfig === null) {
189+
$this->stripeConfig = $this->_objectManager->get(\StripeIntegration\Payments\Model\Config::class);
190+
}
191+
192+
if (version_compare(\StripeIntegration\Payments\Model\Config::$moduleVersion, '1.8.8') >= 0 &&
193+
method_exists($this->stripeConfig, 'reInitStripe')) {
194+
$this->stripeConfig->reInitStripe($order->getStoreId(), $order->getBaseCurrencyCode(), null);
195+
}
196+
197+
return true;
115198
}
116199
}

Helper/FulfillmentHelper.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,9 @@ public function getTrackingNumbers(\Magento\Sales\Model\Order\Shipment $shipment
253253
foreach ($trackingCollection->getItems() as $tracking) {
254254
$number = trim($tracking->getNumber());
255255

256-
if (empty($number) == false) {
257-
$trackingNumbers[] = $tracking->getNumber();
256+
if (empty($number) === false && is_object($number) === false && is_array($number) === false &&
257+
in_array($number, $trackingNumbers) == false) {
258+
$trackingNumbers[] = $number;
258259
}
259260
}
260261

Helper/PurchaseHelper.php

-9
Original file line numberDiff line numberDiff line change
@@ -249,15 +249,6 @@ protected function makeShipments(Order $order)
249249
return $shipments;
250250
}
251251

252-
public function isAdmin()
253-
{
254-
/** @var \Magento\Framework\ObjectManagerInterface $om */
255-
$om = \Magento\Framework\App\ObjectManager::getInstance();
256-
/** @var \Magento\Framework\App\State $state */
257-
$state = $om->get(\Magento\Framework\App\State::class);
258-
return 'adminhtml' === $state->getAreaCode();
259-
}
260-
261252
/**
262253
* @param $mageAddress Address
263254
* @return SignifydAddress

Observer/Order/Save/Before.php

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<?php
2+
3+
namespace Signifyd\Connect\Observer\Order\Save;
4+
5+
use Magento\Framework\App\State as AppState;
6+
use Magento\Framework\App\RequestInterface;
7+
use Magento\Framework\Event\Observer;
8+
use Magento\Framework\Event\ObserverInterface;
9+
use Magento\Sales\Model\Order;
10+
use Magento\Store\Model\StoreManagerInterface;
11+
use Signifyd\Connect\Logger\Logger;
12+
use Signifyd\Connect\Helper\ConfigHelper;
13+
use Signifyd\Connect\Helper\PurchaseHelper;
14+
15+
class Before implements ObserverInterface
16+
{
17+
/**
18+
* @var Logger;
19+
*/
20+
protected $logger;
21+
22+
/**
23+
* @var AppState
24+
*/
25+
protected $appState;
26+
27+
/**
28+
* @var ConfigHelper
29+
*/
30+
protected $configHelper;
31+
32+
/**
33+
* @var StoreManagerInterface
34+
*/
35+
protected $storeManager;
36+
37+
/**
38+
* @var RequestInterface
39+
*/
40+
protected $request;
41+
42+
/**
43+
* Before constructor.
44+
* @param Logger $loger
45+
* @param AppState $appState
46+
* @param ConfigHelper $configHelper
47+
* @param StoreManagerInterface $storeManager
48+
* @param RequestInterface $request
49+
*/
50+
public function __construct(
51+
Logger $loger,
52+
AppState $appState,
53+
ConfigHelper $configHelper,
54+
StoreManagerInterface $storeManager,
55+
RequestInterface $request
56+
) {
57+
$this->logger = $loger;
58+
$this->appState = $appState;
59+
$this->configHelper = $configHelper;
60+
$this->storeManager = $storeManager;
61+
$this->request = $request;
62+
}
63+
64+
/**
65+
* @param Observer $observer
66+
* @param bool $checkOwnEventsMethods
67+
*/
68+
public function execute(Observer $observer, $checkOwnEventsMethods = true)
69+
{
70+
try {
71+
/** @var $order Order */
72+
$order = $observer->getEvent()->getOrder();
73+
74+
if (!is_object($order)) {
75+
return;
76+
}
77+
78+
if ($this->configHelper->isEnabled($order) == false) {
79+
return;
80+
}
81+
82+
// Saving store code to order, to know where the order is been created
83+
if (empty($order->getData('origin_store_code')) && is_object($this->storeManager)) {
84+
$isAdmin = ('adminhtml' === $this->appState->getAreaCode());
85+
$storeCode = $this->storeManager->getStore($isAdmin ? 'admin' : true)->getCode();
86+
87+
if (!empty($storeCode)) {
88+
$order->setData('origin_store_code', $storeCode);
89+
}
90+
}
91+
92+
// Fix for Magento bug https://github.com/magento/magento2/issues/7227
93+
// x_forwarded_for should be copied from quote, but quote does not have the field on database
94+
if (empty($order->getData('x_forwarded_for')) && is_object($this->request)) {
95+
$xForwardIp = $this->request->getServer('HTTP_X_FORWARDED_FOR');
96+
97+
if (empty($xForwardIp) == false) {
98+
$order->setData('x_forwarded_for', $xForwardIp);
99+
}
100+
}
101+
} catch (\Exception $ex) {
102+
$context = [];
103+
104+
if (isset($order) && $order instanceof Order) {
105+
$context['entity'] = $order;
106+
}
107+
108+
$this->logger->error($ex->getMessage(), $context);
109+
}
110+
}
111+
}

Observer/Purchase.php

+5-29
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323
class Purchase implements ObserverInterface
2424
{
2525
/**
26-
* @var \Signifyd\Connect\Logger\Logger;
26+
* @var Logger;
2727
*/
2828
protected $logger;
2929

3030
/**
31-
* @var \Signifyd\Connect\Helper\PurchaseHelper
31+
* @var PurchaseHelper
3232
*/
3333
protected $helper;
3434

@@ -126,33 +126,6 @@ public function execute(Observer $observer, $checkOwnEventsMethods = true)
126126
return;
127127
}
128128

129-
$saveOrder = false;
130-
131-
// Saving store code to order, to know where the order is been created
132-
if (empty($order->getData('origin_store_code')) && is_object($this->storeManager)) {
133-
$storeCode = $this->storeManager->getStore($this->helper->isAdmin() ? 'admin' : true)->getCode();
134-
135-
if (!empty($storeCode)) {
136-
$order->setData('origin_store_code', $storeCode);
137-
$saveOrder = true;
138-
}
139-
}
140-
141-
// Fix for Magento bug https://github.com/magento/magento2/issues/7227
142-
// x_forwarded_for should be copied from quote, but quote does not have the field on database
143-
if (empty($order->getData('x_forwarded_for')) && is_object($this->request)) {
144-
$xForwardIp = $this->request->getServer('HTTP_X_FORWARDED_FOR');
145-
146-
if (empty($xForwardIp) == false) {
147-
$order->setData('x_forwarded_for', $xForwardIp);
148-
$saveOrder = true;
149-
}
150-
}
151-
152-
if ($saveOrder) {
153-
$order->save();
154-
}
155-
156129
// Check if a payment is available for this order yet
157130
if ($order->getState() == \Magento\Sales\Model\Order::STATE_PENDING_PAYMENT) {
158131
return;
@@ -198,6 +171,9 @@ public function execute(Observer $observer, $checkOwnEventsMethods = true)
198171
$case->save();
199172
$message = 'Case for order:#' . $incrementId . ' was not sent because of an async payment method';
200173
$this->logger->debug($message);
174+
175+
// Initial hold order
176+
$this->holdOrder($order);
201177
} catch (\Exception $ex) {
202178
$this->logger->error($ex->__toString());
203179
}

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"php": ">=5.5.22"
88
},
99
"type": "magento2-module",
10-
"version": "3.6.1",
10+
"version": "3.6.2",
1111
"autoload": {
1212
"files": [
1313
"registration.php"

etc/events.xml

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
<observer name="signifydDebugLogs" instance="Signifyd\Connect\Observer\Debug\Order" />
99
</event>
1010

11+
<event name="sales_order_save_before">
12+
<observer name="orderSaveBefore" instance="Signifyd\Connect\Observer\Order\Save\Before" />
13+
</event>
14+
1115
<event name="checkout_submit_all_after">
1216
<observer name="onCheckout" instance="Signifyd\Connect\Observer\Purchase" />
1317
</event>

etc/module.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
-->
77
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
8-
<module name="Signifyd_Connect" setup_version="3.6.1">
8+
<module name="Signifyd_Connect" setup_version="3.6.2">
99
<sequence>
1010
<module name="Magento_Sales" />
1111
<module name="Magento_Payment" />

0 commit comments

Comments
 (0)