/**
  * Load transaction details
  *
  * @param \Magento\Authorizenet\Model\Authorizenet $context
  * @param string $transactionId
  * @return \Magento\Framework\Simplexml\Element
  * @throws \Magento\Framework\Exception\LocalizedException
  */
 protected function loadTransactionDetails(Authorizenet $context, $transactionId)
 {
     $requestBody = $this->getRequestBody($context->getConfigData('login'), $context->getConfigData('trans_key'), $transactionId);
     /** @var \Magento\Framework\HTTP\ZendClient $client */
     $client = $this->httpClientFactory->create();
     $url = $context->getConfigData('cgi_url_td') ?: self::CGI_URL_TD;
     $client->setUri($url);
     $client->setConfig(['timeout' => self::CONNECTION_TIMEOUT]);
     $client->setHeaders(['Content-Type: text/xml']);
     $client->setMethod(\Zend_Http_Client::POST);
     $client->setRawData($requestBody);
     $debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)];
     try {
         $responseBody = $client->request()->getBody();
         if (!$this->xmlSecurityHelper->scan($responseBody)) {
             $this->logger->critical('Attempt loading of external XML entities in response from Authorizenet.');
             throw new \Exception();
         }
         $debugData['response'] = $responseBody;
         libxml_use_internal_errors(true);
         $responseXmlDocument = new Element($responseBody);
         libxml_use_internal_errors(false);
     } catch (\Exception $e) {
         throw new LocalizedException(__('Unable to get transaction details. Try again later.'));
     } finally {
         $context->debugData($debugData);
     }
     if (!isset($responseXmlDocument->messages->resultCode) || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS) {
         throw new LocalizedException(__('Unable to get transaction details. Try again later.'));
     }
     $this->transactionDetails[$transactionId] = $responseXmlDocument;
     return $responseXmlDocument;
 }
 protected function setUp()
 {
     $httpClientFactoryMock = $this->getHttpClientFactoryMock();
     $this->authorizenetMock = $this->getMockBuilder('Magento\\Authorizenet\\Model\\Directpost')->disableOriginalConstructor()->getMock();
     $this->authorizenetMock->method('getConfigData')->willReturnMap([['login', 'test login'], ['trans_key', 'test key'], ['cgi_url_td', 'https://apitest.authorize.net/xml/v1/request.api']]);
     $objectManagerHelper = new ObjectManager($this);
     $xmlSecurity = $objectManagerHelper->getObject('Magento\\Framework\\Xml\\Security');
     $this->transactionService = $objectManagerHelper->getObject('\\Magento\\Authorizenet\\Model\\TransactionService', ['xmlSecurityHelper' => $xmlSecurity, 'httpClientFactory' => $httpClientFactoryMock]);
 }
 /**
  * @param \Magento\Framework\Model\Context $context
  * @param \Magento\Framework\Registry $registry
  * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
  * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
  * @param \Magento\Payment\Helper\Data $paymentData
  * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  * @param \Magento\Payment\Model\Method\Logger $logger
  * @param \Magento\Framework\Module\ModuleListInterface $moduleList
  * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  * @param \Magento\Authorizenet\Helper\Data $dataHelper
  * @param Directpost\Request\Factory $requestFactory
  * @param Directpost\Response\Factory $responseFactory
  * @param \Magento\Authorizenet\Model\TransactionService $transactionService
  * @param \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory
  * @param \Magento\Sales\Model\OrderFactory $orderFactory
  * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  * @param \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
  * @param OrderSender $orderSender
  * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
  * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
  * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
  * @param array $data
  * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  */
 public function __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, TransactionService $transactionService, 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 = [])
 {
     $this->orderFactory = $orderFactory;
     $this->storeManager = $storeManager;
     $this->quoteRepository = $quoteRepository;
     $this->response = $responseFactory->create();
     $this->orderSender = $orderSender;
     $this->transactionRepository = $transactionRepository;
     $this->_code = static::METHOD_CODE;
     parent::__construct($context, $registry, $extensionFactory, $customAttributeFactory, $paymentData, $scopeConfig, $logger, $moduleList, $localeDate, $dataHelper, $requestFactory, $responseFactory, $transactionService, $httpClientFactory, $resource, $resourceCollection, $data);
 }
Exemple #4
0
 /**
  * @param \Magento\Framework\Event\ManagerInterface $eventManager
  * @param \Magento\Payment\Helper\Data $paymentData
  * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  * @param \Magento\Framework\Logger\AdapterFactory $logAdapterFactory
  * @param \Magento\Framework\Logger $logger
  * @param \Magento\Framework\Module\ModuleListInterface $moduleList
  * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  * @param \Magento\Centinel\Model\Service $centinelService
  * @param \Magento\Authorizenet\Model\Authorizenet\CardsFactory $cardsFactory
  * @param \Magento\Authorizenet\Model\Authorizenet\RequestFactory $requestFactory
  * @param \Magento\Authorizenet\Model\Authorizenet\ResultFactory $resultFactory
  * @param \Magento\Sales\Model\OrderFactory $orderFactory
  * @param \Magento\Framework\Session\SessionManagerInterface $session
  * @param \Magento\Authorizenet\Helper\Data $authorizenetData
  * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  * @param \Magento\Sales\Model\QuoteFactory $quoteFactory
  * @param \Magento\Authorizenet\Model\Directpost\RequestFactory $directRequestFactory
  * @param \Magento\Authorizenet\Model\Directpost\Response $response
  * @param \Magento\Authorizenet\Helper\HelperInterface $helper
  * @param OrderSender $orderSender
  * @param array $data
  *
  * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  */
 public function __construct(\Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Logger\AdapterFactory $logAdapterFactory, \Magento\Framework\Logger $logger, \Magento\Framework\Module\ModuleListInterface $moduleList, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Centinel\Model\Service $centinelService, \Magento\Authorizenet\Model\Authorizenet\CardsFactory $cardsFactory, \Magento\Authorizenet\Model\Authorizenet\RequestFactory $requestFactory, \Magento\Authorizenet\Model\Authorizenet\ResultFactory $resultFactory, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Framework\Session\SessionManagerInterface $session, \Magento\Authorizenet\Helper\Data $authorizenetData, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Authorizenet\Model\Directpost\RequestFactory $directRequestFactory, \Magento\Authorizenet\Model\Directpost\Response $response, \Magento\Authorizenet\Helper\HelperInterface $helper, OrderSender $orderSender, array $data = array())
 {
     parent::__construct($eventManager, $paymentData, $scopeConfig, $logAdapterFactory, $logger, $moduleList, $localeDate, $centinelService, $cardsFactory, $requestFactory, $resultFactory, $orderFactory, $session, $authorizenetData, $data);
     $this->_storeManager = $storeManager;
     $this->_quoteFactory = $quoteFactory;
     $this->_requestFactory = $directRequestFactory;
     $this->_response = $response;
     $this->_helper = $helper;
     $this->orderSender = $orderSender;
 }
Exemple #5
0
 /**
  * Fetch transaction details info
  *
  * Update transaction info if there is one placing transaction only
  *
  * @param \Magento\Payment\Model\InfoInterface $payment
  * @param string $transactionId
  * @return array
  */
 public function fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId)
 {
     $transaction = $payment->getTransaction($transactionId);
     $response = $this->getTransactionResponse($transactionId);
     if ($response->getXResponseCode() == self::RESPONSE_CODE_APPROVED) {
         if ($response->getTransactionStatus() == 'voided') {
             $payment->setIsTransactionDenied(true);
         } else {
             $transaction->setAdditionalInformation(self::TRANSACTION_FRAUD_STATE_KEY, false);
             $payment->setIsTransactionApproved(true);
         }
     } elseif ($response->getXResponseReasonCode() == self::RESPONSE_REASON_CODE_PENDING_REVIEW_DECLINED) {
         $payment->setIsTransactionDenied(true);
     }
     $this->addStatusCommentOnUpdate($payment, $response, $transactionId);
     return parent::fetchTransactionInfo($payment, $transactionId);
 }