7
7
namespace Magento \Paypal \Model ;
8
8
9
9
use Exception ;
10
+ use Magento \Framework \App \ObjectManager ;
10
11
use Magento \Framework \Exception \LocalizedException ;
11
12
use Magento \Sales \Model \Order ;
12
13
use Magento \Sales \Model \Order \Email \Sender \CreditmemoSender ;
13
14
use Magento \Sales \Model \Order \Email \Sender \OrderSender ;
15
+ use Magento \Sales \Model \OrderMutexInterface ;
14
16
15
17
/**
16
18
* PayPal Instant Payment Notification processor model
@@ -46,13 +48,19 @@ class Ipn extends \Magento\Paypal\Model\AbstractIpn implements IpnInterface
46
48
protected $ creditmemoSender ;
47
49
48
50
/**
49
- * @param \Magento\Paypal\Model\ConfigFactory $configFactory
51
+ * @var OrderMutexInterface|null
52
+ */
53
+ private ?OrderMutexInterface $ orderMutex ;
54
+
55
+ /**
56
+ * @param ConfigFactory $configFactory
50
57
* @param \Psr\Log\LoggerInterface $logger
51
58
* @param \Magento\Framework\HTTP\Adapter\CurlFactory $curlFactory
52
59
* @param \Magento\Sales\Model\OrderFactory $orderFactory
53
60
* @param Info $paypalInfo
54
61
* @param OrderSender $orderSender
55
62
* @param CreditmemoSender $creditmemoSender
63
+ * @param OrderMutexInterface|null $orderMutex
56
64
* @param array $data
57
65
*/
58
66
public function __construct (
@@ -63,13 +71,15 @@ public function __construct(
63
71
Info $ paypalInfo ,
64
72
OrderSender $ orderSender ,
65
73
CreditmemoSender $ creditmemoSender ,
74
+ ?OrderMutexInterface $ orderMutex = null ,
66
75
array $ data = []
67
76
) {
68
77
parent ::__construct ($ configFactory , $ logger , $ curlFactory , $ data );
69
78
$ this ->_orderFactory = $ orderFactory ;
70
79
$ this ->_paypalInfo = $ paypalInfo ;
71
80
$ this ->orderSender = $ orderSender ;
72
81
$ this ->creditmemoSender = $ creditmemoSender ;
82
+ $ this ->orderMutex = $ orderMutex ?: ObjectManager::getInstance ()->get (OrderMutexInterface::class);
73
83
}
74
84
75
85
/**
@@ -466,6 +476,21 @@ protected function _registerPaymentReversal()
466
476
* @return void
467
477
*/
468
478
protected function _registerPaymentRefund ()
479
+ {
480
+ return $ this ->orderMutex ->execute (
481
+ (int ) $ this ->_order ->getEntityId (),
482
+ \Closure::fromCallable ([$ this , 'processRefund ' ])
483
+ );
484
+ }
485
+
486
+ /**
487
+ * Process a refund
488
+ *
489
+ * @return void
490
+ * @throws Exception
491
+ * @SuppressWarnings(PHPMD.UnusedPrivateMethod) This method is used in closure callback
492
+ */
493
+ private function processRefund ()
469
494
{
470
495
$ this ->_importPaymentInformation ();
471
496
$ reason = $ this ->getRequestData ('reason_code ' );
0 commit comments