5
5
*/
6
6
namespace Magento \Authorizenet \Model ;
7
7
8
- use Magento \Framework \HTTP \ ZendClientFactory ;
8
+ use Magento \Framework \App \ ObjectManager ;
9
9
use Magento \Payment \Model \Method \ConfigInterface ;
10
10
use Magento \Payment \Model \Method \TransparentInterface ;
11
- use Magento \Sales \Model \Order \Email \Sender \OrderSender ;
12
11
13
12
/**
14
13
* Authorize.net DirectPost payment method model.
@@ -102,7 +101,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
102
101
protected $ response ;
103
102
104
103
/**
105
- * @var OrderSender
104
+ * @var \Magento\Sales\Model\Order\Email\Sender\ OrderSender
106
105
*/
107
106
protected $ orderSender ;
108
107
@@ -123,6 +122,16 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
123
122
*/
124
123
private $ psrLogger ;
125
124
125
+ /**
126
+ * @var \Magento\Sales\Api\PaymentFailuresInterface
127
+ */
128
+ private $ paymentFailures ;
129
+
130
+ /**
131
+ * @var \Magento\Sales\Model\Order
132
+ */
133
+ private $ order ;
134
+
126
135
/**
127
136
* @param \Magento\Framework\Model\Context $context
128
137
* @param \Magento\Framework\Registry $registry
@@ -141,11 +150,12 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
141
150
* @param \Magento\Sales\Model\OrderFactory $orderFactory
142
151
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
143
152
* @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
144
- * @param OrderSender $orderSender
153
+ * @param \Magento\Sales\Model\Order\Email\Sender\ OrderSender $orderSender
145
154
* @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
146
155
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
147
156
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
148
157
* @param array $data
158
+ * @param \Magento\Sales\Api\PaymentFailuresInterface|null $paymentFailures
149
159
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
150
160
*/
151
161
public function __construct (
@@ -162,15 +172,16 @@ public function __construct(
162
172
\Magento \Authorizenet \Model \Directpost \Request \Factory $ requestFactory ,
163
173
\Magento \Authorizenet \Model \Directpost \Response \Factory $ responseFactory ,
164
174
TransactionService $ transactionService ,
165
- ZendClientFactory $ httpClientFactory ,
175
+ \ Magento \ Framework \ HTTP \ ZendClientFactory $ httpClientFactory ,
166
176
\Magento \Sales \Model \OrderFactory $ orderFactory ,
167
177
\Magento \Store \Model \StoreManagerInterface $ storeManager ,
168
178
\Magento \Quote \Api \CartRepositoryInterface $ quoteRepository ,
169
179
\Magento \Sales \Model \Order \Email \Sender \OrderSender $ orderSender ,
170
180
\Magento \Sales \Api \TransactionRepositoryInterface $ transactionRepository ,
171
181
\Magento \Framework \Model \ResourceModel \AbstractResource $ resource = null ,
172
182
\Magento \Framework \Data \Collection \AbstractDb $ resourceCollection = null ,
173
- array $ data = []
183
+ array $ data = [],
184
+ \Magento \Sales \Api \PaymentFailuresInterface $ paymentFailures = null
174
185
) {
175
186
$ this ->orderFactory = $ orderFactory ;
176
187
$ this ->storeManager = $ storeManager ;
@@ -179,6 +190,8 @@ public function __construct(
179
190
$ this ->orderSender = $ orderSender ;
180
191
$ this ->transactionRepository = $ transactionRepository ;
181
192
$ this ->_code = static ::METHOD_CODE ;
193
+ $ this ->paymentFailures = $ paymentFailures ? : ObjectManager::getInstance ()
194
+ ->get (\Magento \Sales \Api \PaymentFailuresInterface::class);
182
195
183
196
parent ::__construct (
184
197
$ context ,
@@ -561,13 +574,10 @@ public function process(array $responseData)
561
574
$ this ->validateResponse ();
562
575
563
576
$ response = $ this ->getResponse ();
564
- //operate with order
565
- $ orderIncrementId = $ response ->getXInvoiceNum ();
566
577
$ responseText = $ this ->dataHelper ->wrapGatewayError ($ response ->getXResponseReasonText ());
567
578
$ isError = false ;
568
- if ($ orderIncrementId ) {
569
- /* @var $order \Magento\Sales\Model\Order */
570
- $ order = $ this ->orderFactory ->create ()->loadByIncrementId ($ orderIncrementId );
579
+ if ($ this ->getOrderIncrementId ()) {
580
+ $ order = $ this ->getOrderFromResponse ();
571
581
//check payment method
572
582
$ payment = $ order ->getPayment ();
573
583
if (!$ payment || $ payment ->getMethod () != $ this ->getCode ()) {
@@ -632,9 +642,10 @@ public function checkResponseCode()
632
642
return true ;
633
643
case self ::RESPONSE_CODE_DECLINED :
634
644
case self ::RESPONSE_CODE_ERROR :
635
- throw new \Magento \Framework \Exception \LocalizedException (
636
- $ this ->dataHelper ->wrapGatewayError ($ this ->getResponse ()->getXResponseReasonText ())
637
- );
645
+ $ errorMessage = $ this ->dataHelper ->wrapGatewayError ($ this ->getResponse ()->getXResponseReasonText ());
646
+ $ order = $ this ->getOrderFromResponse ();
647
+ $ this ->paymentFailures ->handle ((int )$ order ->getQuoteId (), $ errorMessage );
648
+ throw new \Magento \Framework \Exception \LocalizedException ($ errorMessage );
638
649
default :
639
650
throw new \Magento \Framework \Exception \LocalizedException (
640
651
__ ('There was a payment authorization error. ' )
@@ -988,12 +999,40 @@ protected function getTransactionResponse($transactionId)
988
999
private function getPsrLogger ()
989
1000
{
990
1001
if (null === $ this ->psrLogger ) {
991
- $ this ->psrLogger = \ Magento \ Framework \ App \ ObjectManager::getInstance ()
1002
+ $ this ->psrLogger = ObjectManager::getInstance ()
992
1003
->get (\Psr \Log \LoggerInterface::class);
993
1004
}
994
1005
return $ this ->psrLogger ;
995
1006
}
996
1007
1008
+ /**
1009
+ * Fetch order by increment id from response.
1010
+ *
1011
+ * @return \Magento\Sales\Model\Order
1012
+ */
1013
+ private function getOrderFromResponse (): \Magento \Sales \Model \Order
1014
+ {
1015
+ if (!$ this ->order ) {
1016
+ $ this ->order = $ this ->orderFactory ->create ();
1017
+
1018
+ if ($ incrementId = $ this ->getOrderIncrementId ()) {
1019
+ $ this ->order = $ this ->order ->loadByIncrementId ($ incrementId );
1020
+ }
1021
+ }
1022
+
1023
+ return $ this ->order ;
1024
+ }
1025
+
1026
+ /**
1027
+ * Fetch order increment id from response.
1028
+ *
1029
+ * @return string
1030
+ */
1031
+ private function getOrderIncrementId (): string
1032
+ {
1033
+ return $ this ->getResponse ()->getXInvoiceNum ();
1034
+ }
1035
+
997
1036
/**
998
1037
* Checks if filter action is Report Only. Transactions that trigger this filter are processed as normal,
999
1038
* but are also reported in the Merchant Interface as triggering this filter.
0 commit comments