Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Directpost.php
Go to the documentation of this file.
1 <?php
7 
11 
19 {
20  const METHOD_CODE = 'authorizenet_directpost';
21 
25  protected $_formBlockType = \Magento\Payment\Block\Transparent\Info::class;
26 
30  protected $_infoBlockType = \Magento\Payment\Block\Info::class;
31 
37  protected $_isGateway = true;
38 
44  protected $_canAuthorize = true;
45 
51  protected $_canCapture = true;
52 
58  protected $_canRefund = true;
59 
65  protected $_canRefundInvoicePartial = true;
66 
72  protected $_canVoid = true;
73 
79  protected $_canFetchTransactionInfo = true;
80 
86  protected $_isInitializeNeeded = true;
87 
91  protected $storeManager;
92 
96  protected $quoteRepository;
97 
101  protected $response;
102 
106  protected $orderSender;
107 
113  protected $orderFactory;
114 
119 
123  private $psrLogger;
124 
128  private $paymentFailures;
129 
133  private $order;
134 
161  public function __construct(
162  \Magento\Framework\Model\Context $context,
163  \Magento\Framework\Registry $registry,
164  \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
165  \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
166  \Magento\Payment\Helper\Data $paymentData,
167  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
168  \Magento\Payment\Model\Method\Logger $logger,
169  \Magento\Framework\Module\ModuleListInterface $moduleList,
170  \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
175  \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory,
176  \Magento\Sales\Model\OrderFactory $orderFactory,
178  \Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
179  \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,
181  \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
182  \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
183  array $data = [],
184  \Magento\Sales\Api\PaymentFailuresInterface $paymentFailures = null
185  ) {
186  $this->orderFactory = $orderFactory;
187  $this->storeManager = $storeManager;
188  $this->quoteRepository = $quoteRepository;
189  $this->response = $responseFactory->create();
190  $this->orderSender = $orderSender;
191  $this->transactionRepository = $transactionRepository;
192  $this->_code = static::METHOD_CODE;
193  $this->paymentFailures = $paymentFailures ? : ObjectManager::getInstance()
194  ->get(\Magento\Sales\Api\PaymentFailuresInterface::class);
195 
196  parent::__construct(
197  $context,
198  $registry,
199  $extensionFactory,
200  $customAttributeFactory,
201  $paymentData,
202  $scopeConfig,
203  $logger,
204  $moduleList,
205  $localeDate,
206  $dataHelper,
211  $resource,
212  $resourceCollection,
213  $data
214  );
215  }
216 
224  {
225  $this->dataHelper = $dataHelper;
226  }
227 
233  public function validate()
234  {
235  return true;
236  }
237 
246  public function authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
247  {
248  $payment->setAdditionalInformation('payment_type', $this->getConfigData('payment_action'));
249  }
250 
259  public function capture(\Magento\Payment\Model\InfoInterface $payment, $amount)
260  {
261  if ($amount <= 0) {
262  throw new \Magento\Framework\Exception\LocalizedException(__('Invalid amount for capture.'));
263  }
264 
265  $payment->setAmount($amount);
266 
267  if ($payment->getParentTransactionId()) {
268  $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
269  $payment->setXTransId($this->getRealParentTransactionId($payment));
270  } else {
271  $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
272  }
273 
274  $result = $this->getResponse();
275  if (empty($result->getData())) {
276  $request = $this->buildRequest($payment);
277  $result = $this->postRequest($request);
278  }
279 
280  return $this->processCapture($result, $payment);
281  }
282 
291  protected function processCapture($result, $payment)
292  {
293  switch ($result->getXResponseCode()) {
296  if (in_array(
297  $result->getXResponseReasonCode(),
298  [
302  ]
303  )
304  ) {
305  if (!$payment->getParentTransactionId()
306  || $result->getXTransId() != $payment->getParentTransactionId()
307  ) {
308  $payment->setTransactionId($result->getXTransId());
309  }
310  $payment->setIsTransactionClosed(0)
311  ->setTransactionAdditionalInfo(
312  self::REAL_TRANSACTION_ID_KEY,
313  $result->getXTransId()
314  );
315  return $this;
316  }
317  throw new \Magento\Framework\Exception\LocalizedException(
318  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
319  );
322  throw new \Magento\Framework\Exception\LocalizedException(
323  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
324  );
325  default:
326  throw new \Magento\Framework\Exception\LocalizedException(__('Payment capturing error.'));
327  }
328  }
329 
337  public function void(\Magento\Payment\Model\InfoInterface $payment)
338  {
339  if (!$payment->getParentTransactionId()) {
340  throw new \Magento\Framework\Exception\LocalizedException(__('Invalid transaction ID.'));
341  }
342 
343  $payment->setAnetTransType(self::REQUEST_TYPE_VOID);
344  $payment->setXTransId($this->getRealParentTransactionId($payment));
345 
346  $request = $this->buildRequest($payment);
347  $result = $this->postRequest($request);
348 
349  switch ($result->getXResponseCode()) {
351  if ($result->getXResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) {
352  if ($result->getXTransId() != $payment->getParentTransactionId()) {
353  $payment->setTransactionId($result->getXTransId());
354  }
355  $payment->setIsTransactionClosed(1)
356  ->setShouldCloseParentTransaction(1)
357  ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, $result->getXTransId());
358  return $this;
359  }
360  throw new \Magento\Framework\Exception\LocalizedException(
361  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
362  );
365  throw new \Magento\Framework\Exception\LocalizedException(
366  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
367  );
368  default:
369  throw new \Magento\Framework\Exception\LocalizedException(__('Payment voiding error.'));
370  }
371  }
372 
382  public function refund(\Magento\Payment\Model\InfoInterface $payment, $amount)
383  {
384  $last4 = $payment->getCcLast4();
385  $payment->setCcLast4($payment->decrypt($last4));
386  try {
387  $this->processRefund($payment, $amount);
388  } catch (\Exception $e) {
389  $payment->setCcLast4($last4);
390  throw $e;
391  }
392  $payment->setCcLast4($last4);
393  return $this;
394  }
395 
404  protected function processRefund(\Magento\Framework\DataObject $payment, $amount)
405  {
406  if ($amount <= 0) {
407  throw new \Magento\Framework\Exception\LocalizedException(__('Invalid amount for refund.'));
408  }
409 
410  if (!$payment->getParentTransactionId()) {
411  throw new \Magento\Framework\Exception\LocalizedException(__('Invalid transaction ID.'));
412  }
413 
414  $payment->setAnetTransType(self::REQUEST_TYPE_CREDIT);
415  $payment->setAmount($amount);
416  $payment->setXTransId($this->getRealParentTransactionId($payment));
417 
418  $request = $this->buildRequest($payment);
419  $result = $this->postRequest($request);
420 
421  switch ($result->getXResponseCode()) {
423  if ($result->getXResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) {
424  if ($result->getXTransId() != $payment->getParentTransactionId()) {
425  $payment->setTransactionId($result->getXTransId());
426  }
427  $payment->setIsTransactionClosed(true)
428  ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, $result->getXTransId());
429  return $this;
430  }
431  throw new \Magento\Framework\Exception\LocalizedException(
432  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
433  );
436  throw new \Magento\Framework\Exception\LocalizedException(
437  $this->dataHelper->wrapGatewayError($result->getXResponseReasonText())
438  );
439  default:
440  throw new \Magento\Framework\Exception\LocalizedException(__('Payment refunding error.'));
441  }
442  }
443 
449  public function getCgiUrl()
450  {
451  $uri = $this->getConfigData('cgi_url');
452  return $uri ? $uri : self::CGI_URL;
453  }
454 
461  public function getRelayUrl($storeId = null)
462  {
463  if ($storeId == null && $this->getStore()) {
464  $storeId = $this->getStore();
465  }
466  return $this->dataHelper->getRelayUrl($storeId);
467  }
468 
474  public function getResponse()
475  {
476  return $this->response;
477  }
478 
487  public function initialize($paymentAction, $stateObject)
488  {
489  $requestType = null;
490  switch ($paymentAction) {
492  $requestType = self::REQUEST_TYPE_AUTH_ONLY;
493  //intentional
495  $requestType = $requestType ?: self::REQUEST_TYPE_AUTH_CAPTURE;
496  $payment = $this->getInfoInstance();
497  $order = $payment->getOrder();
498  $order->setCanSendNewEmailFlag(false);
499  $payment->setBaseAmountAuthorized($order->getBaseTotalDue());
500  $payment->setAmountAuthorized($order->getTotalDue());
501  $payment->setAnetTransType($requestType);
502  break;
503  default:
504  break;
505  }
506  }
507 
514  public function generateRequestFromOrder(\Magento\Sales\Model\Order $order)
515  {
516  $request = $this->requestFactory->create()
517  ->setConstantData($this)
518  ->setDataFromOrder($order, $this)
519  ->signRequestData();
520 
521  $this->_debug(['request' => $request->getData()]);
522 
523  return $request;
524  }
525 
532  public function setResponseData(array $postData)
533  {
534  $this->getResponse()->setData($postData);
535  return $this;
536  }
537 
544  public function validateResponse()
545  {
546  $response = $this->getResponse();
547  //md5 check
548  if (!$this->getConfigData('trans_md5')
549  || !$this->getConfigData('login')
550  || !$response->isValidHash($this->getConfigData('trans_md5'), $this->getConfigData('login'))
551  ) {
552  throw new \Magento\Framework\Exception\LocalizedException(
553  __('The transaction was declined because the response hash validation failed.')
554  );
555  }
556  return true;
557  }
558 
566  public function process(array $responseData)
567  {
568  $this->_debug(['response' => $responseData]);
569 
570  $this->setResponseData($responseData);
571 
572  //check MD5 error or others response errors
573  //throws exception on false.
574  $this->validateResponse();
575 
576  $response = $this->getResponse();
577  $responseText = $this->dataHelper->wrapGatewayError($response->getXResponseReasonText());
578  $isError = false;
579  if ($this->getOrderIncrementId()) {
580  $order = $this->getOrderFromResponse();
581  //check payment method
582  $payment = $order->getPayment();
583  if (!$payment || $payment->getMethod() != $this->getCode()) {
584  throw new \Magento\Framework\Exception\LocalizedException(
585  __('This payment didn\'t work out because we can\'t find this order.')
586  );
587  }
588  if ($order->getId()) {
589  //operate with order
590  $this->processOrder($order);
591  } else {
592  $isError = true;
593  }
594  } else {
595  $isError = true;
596  }
597 
598  if ($isError) {
599  $responseText = $responseText && !$response->isApproved()
600  ? $responseText
601  : __('This payment didn\'t work out because we can\'t find this order.');
602  throw new \Magento\Framework\Exception\LocalizedException($responseText);
603  }
604  }
605 
612  protected function fillPaymentByResponse(\Magento\Framework\DataObject $payment)
613  {
614  $response = $this->getResponse();
615  $payment->setTransactionId($response->getXTransId())
616  ->setParentTransactionId(null)
617  ->setIsTransactionClosed(0)
618  ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, $response->getXTransId());
619 
620  if ($response->getXMethod() == self::REQUEST_METHOD_CC) {
621  $payment->setCcAvsStatus($response->getXAvsCode())
622  ->setCcLast4($payment->encrypt(substr($response->getXAccountNumber(), -4)));
623  }
624 
625  if ($response->getXResponseCode() == self::RESPONSE_CODE_HELD) {
626  $payment->setIsTransactionPending(true)
627  ->setIsFraudDetected(true);
628  }
629  }
630 
637  public function checkResponseCode()
638  {
639  switch ($this->getResponse()->getXResponseCode()) {
642  return true;
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);
649  default:
650  throw new \Magento\Framework\Exception\LocalizedException(
651  __('There was a payment authorization error.')
652  );
653  }
654  }
655 
662  public function checkTransId()
663  {
664  if (!$this->getResponse()->getXTransId()) {
665  throw new \Magento\Framework\Exception\LocalizedException(
666  __('Please enter a transaction ID to authorize this payment.')
667  );
668  }
669  return true;
670  }
671 
678  protected function matchAmount($amount)
679  {
680  return sprintf('%.2F', $amount) == sprintf('%.2F', $this->getResponse()->getXAmount());
681  }
682 
693  protected function processOrder(\Magento\Sales\Model\Order $order)
694  {
695  try {
696  $this->checkResponseCode();
697  $this->checkTransId();
698  } catch (\Exception $e) {
699  //decline the order (in case of wrong response code) but don't return money to customer.
700  $message = $e->getMessage();
701  $this->declineOrder($order, $message, false);
702  throw $e;
703  }
704 
705  $response = $this->getResponse();
706 
707  //create transaction. need for void if amount will not match.
708  $payment = $order->getPayment();
710  $payment->getMethodInstance()->setIsInitializeNeeded(false);
711  $payment->getMethodInstance()->setResponseData($response->getData());
713  $payment->place();
714  $this->addStatusComment($payment);
715  $order->save();
716 
717  //match amounts. should be equals for authorization.
718  //decline the order if amount does not match.
719  if (!$this->matchAmount($payment->getBaseAmountAuthorized())) {
720  $message = __(
721  'Something went wrong: the paid amount doesn\'t match the order amount.'
722  . ' Please correct this and try again.'
723  );
724  $this->declineOrder($order, $message, true);
725  throw new \Magento\Framework\Exception\LocalizedException($message);
726  }
727 
728  try {
729  if (!$response->hasOrderSendConfirmation() || $response->getOrderSendConfirmation()) {
730  $this->orderSender->send($order);
731  }
732 
733  $quote = $this->quoteRepository->get($order->getQuoteId())->setIsActive(false);
734  $this->quoteRepository->save($quote);
735  } catch (\Exception $e) {
736  // do not cancel order if we couldn't send email
737  }
738  }
739 
746  protected function processPaymentFraudStatus(\Magento\Sales\Model\Order\Payment $payment)
747  {
748  try {
749  $fraudDetailsResponse = $payment->getMethodInstance()
750  ->fetchTransactionFraudDetails($this->getResponse()->getXTransId());
751  $fraudData = $fraudDetailsResponse->getData();
752 
753  if (empty($fraudData)) {
754  $payment->setIsFraudDetected(false);
755  return $this;
756  }
757 
758  $fdsFilterAction = (string)$fraudDetailsResponse->getFdsFilterAction();
759  if ($this->fdsFilterActionIsReportOnly($fdsFilterAction) === false) {
760  $payment->setIsFraudDetected(true);
761  }
762 
763  $payment->setAdditionalInformation('fraud_details', $fraudData);
764  } catch (\Exception $e) {
765  //this request is optional
766  }
767 
768  return $this;
769  }
770 
777  protected function addStatusComment(\Magento\Sales\Model\Order\Payment $payment)
778  {
779  try {
780  $transactionId = $this->getResponse()->getXTransId();
781  $data = $this->transactionService->getTransactionDetails($this, $transactionId);
782  $transactionStatus = (string)$data->transaction->transactionStatus;
783  $fdsFilterAction = (string)$data->transaction->FDSFilterAction;
784 
785  if ($payment->getIsTransactionPending()) {
786  $message = 'Amount of %1 is pending approval on the gateway.<br/>'
787  . 'Transaction "%2" status is "%3".<br/>'
788  . 'Transaction FDS Filter Action is "%4"';
789  $message = __(
790  $message,
791  $payment->getOrder()->getBaseCurrency()->formatTxt($this->getResponse()->getXAmount()),
792  $transactionId,
793  $this->dataHelper->getTransactionStatusLabel($transactionStatus),
794  $this->dataHelper->getFdsFilterActionLabel($fdsFilterAction)
795  );
796  $payment->getOrder()->addStatusHistoryComment($message);
797  }
798  } catch (\Exception $e) {
799  $this->getPsrLogger()->critical($e);
800  //this request is optional
801  }
802  return $this;
803  }
804 
813  protected function declineOrder(\Magento\Sales\Model\Order $order, $message = '', $voidPayment = true)
814  {
815  try {
816  $response = $this->getResponse();
817  if ($voidPayment
818  && $response->getXTransId()
819  && strtoupper($response->getXType()) == self::REQUEST_TYPE_AUTH_ONLY
820  ) {
821  $order->getPayment()
822  ->setTransactionId(null)
823  ->setParentTransactionId($response->getXTransId())
824  ->void($response);
825  }
826  $order->registerCancellation($message)->save();
827  } catch (\Exception $e) {
828  //quiet decline
829  $this->getPsrLogger()->critical($e);
830  }
831  }
832 
840  {
841  $transaction = $this->transactionRepository->getByTransactionId(
842  $payment->getParentTransactionId(),
843  $payment->getId(),
844  $payment->getOrder()->getId()
845  );
846  return $transaction->getAdditionalInformation(self::REAL_TRANSACTION_ID_KEY);
847  }
848 
852  public function getConfigInterface()
853  {
854  return $this;
855  }
856 
864  public function getValue($key, $storeId = null)
865  {
866  return $this->getConfigData($key, $storeId);
867  }
868 
875  public function setIsInitializeNeeded($isInitializeNeeded = true)
876  {
877  $this->_isInitializeNeeded = (bool)$isInitializeNeeded;
878  }
879 
885  public function canCapture()
886  {
887  return !$this->isGatewayActionsLocked($this->getInfoInstance());
888  }
889 
899  public function fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId)
900  {
901  $transaction = $this->transactionRepository->getByTransactionId(
902  $transactionId,
903  $payment->getId(),
904  $payment->getOrder()->getId()
905  );
906 
907  $response = $this->getTransactionResponse($transactionId);
908  if ($response->getXResponseCode() == self::RESPONSE_CODE_APPROVED) {
909  if ($response->getTransactionStatus() == 'voided') {
910  $payment->setIsTransactionDenied(true);
911  $payment->setIsTransactionClosed(true);
912  $transaction->close();
913  } else {
914  $transaction->setAdditionalInformation(self::TRANSACTION_FRAUD_STATE_KEY, false);
915  $payment->setIsTransactionApproved(true);
916  }
917  } elseif ($response->getXResponseReasonCode() == self::RESPONSE_REASON_CODE_PENDING_REVIEW_DECLINED) {
918  $payment->setIsTransactionDenied(true);
919  }
920  $this->addStatusCommentOnUpdate($payment, $response, $transactionId);
921  return [];
922  }
923 
930  protected function addStatusCommentOnUpdate(
931  \Magento\Sales\Model\Order\Payment $payment,
932  \Magento\Framework\DataObject $response,
933  $transactionId
934  ) {
935  if ($payment->getIsTransactionApproved()) {
936  $message = __(
937  'Transaction %1 has been approved. Amount %2. Transaction status is "%3"',
938  $transactionId,
939  $payment->getOrder()->getBaseCurrency()->formatTxt($payment->getAmountAuthorized()),
940  $this->dataHelper->getTransactionStatusLabel($response->getTransactionStatus())
941  );
942  $payment->getOrder()->addStatusHistoryComment($message);
943  } elseif ($payment->getIsTransactionDenied()) {
944  $message = __(
945  'Transaction %1 has been voided/declined. Transaction status is "%2". Amount %3.',
946  $transactionId,
947  $this->dataHelper->getTransactionStatusLabel($response->getTransactionStatus()),
948  $payment->getOrder()->getBaseCurrency()->formatTxt($payment->getAmountAuthorized())
949  );
950  $payment->getOrder()->addStatusHistoryComment($message);
951  }
952  return $this;
953  }
954 
962  public function setMethodCode($methodCode)
963  {
964  }
965 
973  public function setPathPattern($pathPattern)
974  {
975  }
976 
986  protected function getTransactionResponse($transactionId)
987  {
988  $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId);
989 
990  $response = new \Magento\Framework\DataObject();
991  $response->setXResponseCode((string)$responseXmlDocument->transaction->responseCode)
992  ->setXResponseReasonCode((string)$responseXmlDocument->transaction->responseReasonCode)
993  ->setTransactionStatus((string)$responseXmlDocument->transaction->transactionStatus);
994 
995  return $response;
996  }
997 
1003  private function getPsrLogger()
1004  {
1005  if (null === $this->psrLogger) {
1006  $this->psrLogger = ObjectManager::getInstance()
1007  ->get(\Psr\Log\LoggerInterface::class);
1008  }
1009  return $this->psrLogger;
1010  }
1011 
1017  private function getOrderFromResponse(): \Magento\Sales\Model\Order
1018  {
1019  if (!$this->order) {
1020  $this->order = $this->orderFactory->create();
1021 
1022  if ($incrementId = $this->getOrderIncrementId()) {
1023  $this->order = $this->order->loadByIncrementId($incrementId);
1024  }
1025  }
1026 
1027  return $this->order;
1028  }
1029 
1035  private function getOrderIncrementId(): string
1036  {
1037  return $this->getResponse()->getXInvoiceNum();
1038  }
1039 
1047  private function fdsFilterActionIsReportOnly($fdsFilterAction)
1048  {
1049  return $fdsFilterAction === (string)$this->dataHelper->getFdsFilterActionLabel('report');
1050  }
1051 }
$transaction
declineOrder(\Magento\Sales\Model\Order $order, $message='', $voidPayment=true)
Definition: Directpost.php:813
initialize($paymentAction, $stateObject)
Definition: Directpost.php:487
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$pathPattern
void(\Magento\Payment\Model\InfoInterface $payment)
Definition: Directpost.php:337
processRefund(\Magento\Framework\DataObject $payment, $amount)
Definition: Directpost.php:404
$quote
$order
Definition: order.php:55
__()
Definition: __.php:13
$resource
Definition: bulk.php:12
$message
fillPaymentByResponse(\Magento\Framework\DataObject $payment)
Definition: Directpost.php:612
addStatusComment(\Magento\Sales\Model\Order\Payment $payment)
Definition: Directpost.php:777
$logger
processOrder(\Magento\Sales\Model\Order $order)
Definition: Directpost.php:693
$amount
Definition: order.php:14
$payment
Definition: order.php:17
authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Directpost.php:246
processPaymentFraudStatus(\Magento\Sales\Model\Order\Payment $payment)
Definition: Directpost.php:746
setDataHelper(\Magento\Authorizenet\Helper\Data $dataHelper)
Definition: Directpost.php:223
fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId)
Definition: Directpost.php:899
generateRequestFromOrder(\Magento\Sales\Model\Order $order)
Definition: Directpost.php:514
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Payment\Model\Method\Logger $logger, \Magento\Framework\Module\ModuleListInterface $moduleList, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Authorizenet\Helper\Data $dataHelper, \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory, \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory, \Magento\Authorizenet\Model\TransactionService $transactionService, \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Quote\Api\CartRepositoryInterface $quoteRepository, \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender, \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[], \Magento\Sales\Api\PaymentFailuresInterface $paymentFailures=null)
Definition: Directpost.php:161
addStatusCommentOnUpdate(\Magento\Sales\Model\Order\Payment $payment, \Magento\Framework\DataObject $response, $transactionId)
Definition: Directpost.php:930
getConfigData($field, $storeId=null)
order(\Magento\Payment\Model\InfoInterface $payment, $amount)
refund(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Directpost.php:382
capture(\Magento\Payment\Model\InfoInterface $payment, $amount)
Definition: Directpost.php:259
setIsInitializeNeeded($isInitializeNeeded=true)
Definition: Directpost.php:875