10 use Magento\Framework\HTTP\ZendClientFactory;
25 const CGI_URL_TD =
'https://apitest.authorize.net/xml/v1/request.api';
84 return isset($this->transactionDetails[$transactionId])
85 ? $this->transactionDetails[$transactionId]
86 : $this->loadTransactionDetails($context, $transactionId);
97 protected function loadTransactionDetails(
Authorizenet $context, $transactionId)
100 $requestBody = $this->getRequestBody(
101 $context->getConfigData(
'login'),
102 $context->getConfigData(
'trans_key'),
107 $client = $this->httpClientFactory->create();
109 $client->setUri(
$url);
110 $client->setConfig([
'timeout' => self::CONNECTION_TIMEOUT]);
111 $client->setHeaders([
'Content-Type: text/xml']);
113 $client->setRawData($requestBody);
115 $debugData = [
'url' =>
$url,
'request' => $this->removePrivateDataFromXml($requestBody)];
118 $responseBody = $client->request()->getBody();
119 if (!$this->xmlSecurityHelper->scan($responseBody)) {
120 $this->logger->critical(
'Attempt loading of external XML entities in response from Authorizenet.');
121 throw new \Exception();
123 $debugData[
'response'] = $responseBody;
124 libxml_use_internal_errors(
true);
125 $responseXmlDocument =
new Element($responseBody);
126 libxml_use_internal_errors(
false);
127 }
catch (\Exception $e) {
128 throw new LocalizedException(
__(
'The transaction details are unavailable. Please try again later.'));
130 $context->debugData($debugData);
133 if (!isset($responseXmlDocument->messages->resultCode)
134 || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS
136 throw new LocalizedException(
__(
'The transaction details are unavailable. Please try again later.'));
139 $this->transactionDetails[$transactionId] = $responseXmlDocument;
140 return $responseXmlDocument;
150 private function getRequestBody($login, $transactionKey, $transactionId)
152 $requestBody = sprintf(
153 '<?xml version="1.0" encoding="utf-8"?>' .
154 '<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">' .
155 '<merchantAuthentication><name>%s</name><transactionKey>%s</transactionKey></merchantAuthentication>' .
156 '<transId>%s</transId>' .
157 '</getTransactionDetailsRequest>',
173 private function removePrivateDataFromXml($xml)
175 foreach ($this->debugReplacePrivateDataKeys as $key) {
__construct(Security $xmlSecurityHelper, Logger $logger, ZendClientFactory $httpClientFactory)
getTransactionDetails(Authorizenet $context, $transactionId)
const PAYMENT_UPDATE_STATUS_CODE_SUCCESS
$debugReplacePrivateDataKeys