Skip to content

Commit bda4978

Browse files
committed
MAG-952: Adjustments to the Fix Patch
1 parent af21896 commit bda4978

3 files changed

Lines changed: 142 additions & 0 deletions

File tree

Observer/Purchase.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,14 @@ public function execute(Observer $observer, $checkOwnEventsMethods = true)
482482
$case->setUpdated();
483483
}
484484

485+
// Flag added to keep the order on hold after Signifyd processing.
486+
// This is necessary due to a race condition: during Signifyd's processing,
487+
// the Stripe charge observer may be triggered at the same time,
488+
// which could cause the order status to change prematurely.
489+
if ($order->getPayment()->getMethod() == 'stripe_payments') {
490+
$case->setEntries('is_holded', 1);
491+
}
492+
485493
$this->casedataResourceModel->save($case);
486494

487495
// Initial hold order
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<?php
2+
3+
namespace Signifyd\Connect\Plugin\StripeIntegration\Payments\Model\Stripe\Event;
4+
5+
use Magento\Sales\Model\ResourceModel\Order as OrderResourceModel;
6+
use Signifyd\Connect\Helper\OrderHelper;
7+
use Signifyd\Connect\Logger\Logger;
8+
use Signifyd\Connect\Model\CasedataFactory;
9+
use Signifyd\Connect\Model\ResourceModel\Casedata as CasedataResourceModel;
10+
use StripeIntegration\Payments\Model\Stripe\Event\ChargeSucceeded as StripeChargeSucceeded;
11+
use StripeIntegration\Payments\Helper\Webhooks;
12+
13+
class ChargeSucceeded
14+
{
15+
/**
16+
* @var Logger
17+
*/
18+
public $logger;
19+
20+
/**
21+
* @var CasedataFactory
22+
*/
23+
public $casedataFactory;
24+
25+
/**
26+
* @var CasedataResourceModel
27+
*/
28+
public $casedataResourceModel;
29+
30+
/**
31+
* @var OrderResourceModel
32+
*/
33+
public $orderResourceModel;
34+
35+
/**
36+
* @var OrderHelper
37+
*/
38+
public $orderHelper;
39+
40+
/**
41+
* @var Webhooks
42+
*/
43+
public $webhooksHelper;
44+
45+
/**
46+
* ChargeSucceeded constructor.
47+
*
48+
* @param Logger $logger
49+
* @param CasedataFactory $casedataFactory
50+
* @param CasedataResourceModel $casedataResourceModel
51+
* @param OrderResourceModel $orderResourceModel
52+
* @param OrderHelper $orderHelper
53+
* @param Webhooks $webhooksHelper
54+
*/
55+
public function __construct(
56+
Logger $logger,
57+
CasedataFactory $casedataFactory,
58+
CasedataResourceModel $casedataResourceModel,
59+
OrderResourceModel $orderResourceModel,
60+
OrderHelper $orderHelper,
61+
Webhooks $webhooksHelper
62+
) {
63+
$this->logger = $logger;
64+
$this->casedataFactory = $casedataFactory;
65+
$this->casedataResourceModel = $casedataResourceModel;
66+
$this->orderResourceModel = $orderResourceModel;
67+
$this->orderHelper = $orderHelper;
68+
$this->webhooksHelper = $webhooksHelper;
69+
}
70+
71+
/**
72+
* Plugin after on process method.
73+
*
74+
* @param StripeChargeSucceeded $subject
75+
* @param $arrEvent
76+
* @param $object
77+
* @return void
78+
*/
79+
public function afterProcess(
80+
StripeChargeSucceeded $subject,
81+
$result,
82+
$arrEvent,
83+
$object
84+
) {
85+
try {
86+
$order = $this->webhooksHelper->loadOrderFromEvent($arrEvent);
87+
$orderId = $order->getId();
88+
$case = $this->casedataFactory->create();
89+
$this->casedataResourceModel->load($case, $orderId, 'order_id');
90+
91+
if ($case->isEmpty()) {
92+
return $result;
93+
}
94+
95+
//Setting order to hold after stripe Charge
96+
if ($case->getEntries('is_holded') == 1 && $order->canHold()) {
97+
$order->hold();
98+
$this->orderResourceModel->save($order);
99+
$this->logger->info(
100+
"Hold order {$order->getIncrementId()} after stripe Charge",
101+
['entity' => $case]
102+
);
103+
104+
$this->orderHelper->addCommentToStatusHistory(
105+
$order,
106+
"Signifyd: hold order after stripe Charge"
107+
);
108+
109+
$case->unsetEntries('is_holded');
110+
$this->casedataResourceModel->save($case);
111+
}
112+
} catch (\Exception $ex) {
113+
$context = [];
114+
115+
if (isset($order) && $order instanceof Order) {
116+
$context['entity'] = $order;
117+
}
118+
119+
$this->logger->error($ex->getMessage(), $context);
120+
} catch (\Error $ex) {
121+
$context = [];
122+
123+
if (isset($order) && $order instanceof Order) {
124+
$context['entity'] = $order;
125+
}
126+
127+
$this->logger->error($ex->getMessage(), $context);
128+
}
129+
}
130+
}

etc/di.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@
141141
<plugin name="Signifyd_Connect_Plugin_StripeIntegration_Payments_Helper_Order" type="\Signifyd\Connect\Plugin\StripeIntegration\Payments\Helper\Order" />
142142
</type>
143143

144+
<type name="StripeIntegration\Payments\Model\Stripe\Event\ChargeSucceeded">
145+
<plugin name="Signifyd_Connect_Plugin_StripeIntegration_Payments_ChargeSucceeded" type="\Signifyd\Connect\Plugin\StripeIntegration\Payments\Model\Stripe\Event\ChargeSucceeded" />
146+
</type>
147+
144148
<type name="Adyen\Payment\Helper\Webhook">
145149
<plugin name="Signifyd_Connect_Plugin_Adyen_Payment_Helper_Webhook" type="\Signifyd\Connect\Plugin\Adyen\Payment\Helper\Webhook" />
146150
</type>

0 commit comments

Comments
 (0)