Skip to content

Commit 9d94593

Browse files
author
Yuri Kovsher
committed
MAGETWO-42495: No errors after "Get Payment Update" for order placed within Authorize.net Direct Post with incorrect url in "Transaction Details Url"
1 parent efb7864 commit 9d94593

File tree

2 files changed

+59
-33
lines changed

2 files changed

+59
-33
lines changed

app/code/Magento/Authorizenet/Model/Authorizenet.php

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Authorizenet\Model;
77

8+
use Magento\Payment\Model\Method\Logger;
9+
810
/**
911
* @SuppressWarnings(PHPMD.TooManyFields)
1012
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
@@ -100,7 +102,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
100102
/**
101103
* {@inheritdoc}
102104
*/
103-
protected $_debugReplacePrivateDataKeys = ['password'];
105+
protected $_debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login'];
104106

105107
/**
106108
* @param \Magento\Framework\Model\Context $context
@@ -373,9 +375,9 @@ protected function postRequest(\Magento\Authorizenet\Model\Request $request)
373375
{
374376
$result = $this->responseFactory->create();
375377
$client = new \Magento\Framework\HTTP\ZendClient();
376-
$uri = $this->getConfigData('cgi_url');
377-
$debugData = ['url' => $uri, 'request' => $request->getData()];
378-
$client->setUri($uri ? $uri : self::CGI_URL);
378+
$url = $this->getConfigData('cgi_url') ?: self::CGI_URL;
379+
$debugData = ['url' => $url, 'request' => $request->getData()];
380+
$client->setUri($url);
379381
$client->setConfig(['maxredirects' => 0, 'timeout' => 30]);
380382

381383
foreach ($request->getData() as $key => $value) {
@@ -476,14 +478,14 @@ protected function loadTransactionDetails($transactionId)
476478
);
477479

478480
$client = new \Magento\Framework\HTTP\ZendClient();
479-
$uri = $this->getConfigData('cgi_url_td');
480-
$client->setUri($uri ? $uri : self::CGI_URL_TD);
481+
$url = $this->getConfigData('cgi_url_td') ?: self::CGI_URL_TD;
482+
$client->setUri($url);
481483
$client->setConfig(['timeout' => 45]);
482484
$client->setHeaders(['Content-Type: text/xml']);
483485
$client->setMethod(\Zend_Http_Client::POST);
484486
$client->setRawData($requestBody);
485487

486-
$debugData = ['url' => $uri, 'request' => $requestBody];
488+
$debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)];
487489

488490
try {
489491
$responseBody = $client->request()->getBody();
@@ -523,4 +525,20 @@ protected function getTransactionDetails($transactionId)
523525
? $this->transactionDetails[$transactionId]
524526
: $this->loadTransactionDetails($transactionId);
525527
}
528+
529+
/**
530+
* Remove nodes with private data from XML string
531+
*
532+
* Uses values from $_debugReplacePrivateDataKeys property
533+
*
534+
* @param string $xml
535+
* @return string
536+
*/
537+
protected function removePrivateDataFromXml($xml)
538+
{
539+
foreach ($this->getDebugReplacePrivateDataKeys() as $key) {
540+
$xml = preg_replace(sprintf('~(?<=<%s>).*?(?=</%s>)~', $key, $key), Logger::DEBUG_KEYS_MASK, $xml);
541+
}
542+
return $xml;
543+
}
526544
}

app/code/Magento/Authorizenet/Model/Directpost.php

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -726,17 +726,21 @@ protected function processOrder(\Magento\Sales\Model\Order $order)
726726
*/
727727
protected function processPaymentFraudStatus(\Magento\Sales\Model\Order\Payment $payment)
728728
{
729-
$fraudDetailsResponse = $payment->getMethodInstance()
730-
->fetchTransactionFraudDetails($this->getResponse()->getXTransId());
731-
$fraudData = $fraudDetailsResponse->getData();
729+
try {
730+
$fraudDetailsResponse = $payment->getMethodInstance()
731+
->fetchTransactionFraudDetails($this->getResponse()->getXTransId());
732+
$fraudData = $fraudDetailsResponse->getData();
732733

733-
if (empty($fraudData)) {
734-
$payment->setIsFraudDetected(false);
735-
return $this;
736-
}
734+
if (empty($fraudData)) {
735+
$payment->setIsFraudDetected(false);
736+
return $this;
737+
}
737738

738-
$payment->setIsFraudDetected(true);
739-
$payment->setAdditionalInformation('fraud_details', $fraudData);
739+
$payment->setIsFraudDetected(true);
740+
$payment->setAdditionalInformation('fraud_details', $fraudData);
741+
} catch (\Exception $e) {
742+
//this request is optional
743+
}
740744

741745
return $this;
742746
}
@@ -749,23 +753,27 @@ protected function processPaymentFraudStatus(\Magento\Sales\Model\Order\Payment
749753
*/
750754
protected function addStatusComment(\Magento\Sales\Model\Order\Payment $payment)
751755
{
752-
$transactionId = $this->getResponse()->getXTransId();
753-
$data = $payment->getMethodInstance()->getTransactionDetails($transactionId);
754-
$transactionStatus = (string)$data->transaction->transactionStatus;
755-
$fdsFilterAction = (string)$data->transaction->FDSFilterAction;
756-
757-
if ($payment->getIsTransactionPending()) {
758-
$message = 'Amount of %1 is pending approval on the gateway.<br/>'
759-
. 'Transaction "%2" status is "%3".<br/>'
760-
. 'Transaction FDS Filter Action is "%4"';
761-
$message = __(
762-
$message,
763-
$payment->getOrder()->getBaseCurrency()->formatTxt($this->getResponse()->getXAmount()),
764-
$transactionId,
765-
$this->dataHelper->getTransactionStatusLabel($transactionStatus),
766-
$this->dataHelper->getFdsFilterActionLabel($fdsFilterAction)
767-
);
768-
$payment->getOrder()->addStatusHistoryComment($message);
756+
try {
757+
$transactionId = $this->getResponse()->getXTransId();
758+
$data = $payment->getMethodInstance()->getTransactionDetails($transactionId);
759+
$transactionStatus = (string)$data->transaction->transactionStatus;
760+
$fdsFilterAction = (string)$data->transaction->FDSFilterAction;
761+
762+
if ($payment->getIsTransactionPending()) {
763+
$message = 'Amount of %1 is pending approval on the gateway.<br/>'
764+
. 'Transaction "%2" status is "%3".<br/>'
765+
. 'Transaction FDS Filter Action is "%4"';
766+
$message = __(
767+
$message,
768+
$payment->getOrder()->getBaseCurrency()->formatTxt($this->getResponse()->getXAmount()),
769+
$transactionId,
770+
$this->dataHelper->getTransactionStatusLabel($transactionStatus),
771+
$this->dataHelper->getFdsFilterActionLabel($fdsFilterAction)
772+
);
773+
$payment->getOrder()->addStatusHistoryComment($message);
774+
}
775+
} catch (\Exception $e) {
776+
//this request is optional
769777
}
770778
return $this;
771779
}

0 commit comments

Comments
 (0)