128     private $paymentFailures;
   164         \
Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
   169         \
Magento\Framework\Module\ModuleListInterface $moduleList,
   170         \
Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
   184         \
Magento\Sales\Api\PaymentFailuresInterface $paymentFailures = 
null   192         $this->_code = static::METHOD_CODE;
   194             ->get(\
Magento\Sales\Api\PaymentFailuresInterface::class);
   200             $customAttributeFactory,
   262             throw new \Magento\Framework\Exception\LocalizedException(
__(
'Invalid amount for capture.'));
   267         if (
$payment->getParentTransactionId()) {
   268             $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
   271             $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
   275         if (empty(
$result->getData())) {
   293         switch (
$result->getXResponseCode()) {
   297                     $result->getXResponseReasonCode(),
   305                     if (!
$payment->getParentTransactionId()
   311                         ->setTransactionAdditionalInfo(
   312                             self::REAL_TRANSACTION_ID_KEY,
   317                 throw new \Magento\Framework\Exception\LocalizedException(
   318                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   322                 throw new \Magento\Framework\Exception\LocalizedException(
   323                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   326                 throw new \Magento\Framework\Exception\LocalizedException(
__(
'Payment capturing error.'));
   339         if (!
$payment->getParentTransactionId()) {
   340             throw new \Magento\Framework\Exception\LocalizedException(
__(
'Invalid transaction ID.'));
   343         $payment->setAnetTransType(self::REQUEST_TYPE_VOID);
   349         switch (
$result->getXResponseCode()) {
   356                         ->setShouldCloseParentTransaction(1)
   357                         ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, 
$result->getXTransId());
   360                 throw new \Magento\Framework\Exception\LocalizedException(
   361                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   365                 throw new \Magento\Framework\Exception\LocalizedException(
   366                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   369                 throw new \Magento\Framework\Exception\LocalizedException(
__(
'Payment voiding error.'));
   388         } 
catch (\Exception $e) {
   407             throw new \Magento\Framework\Exception\LocalizedException(
__(
'Invalid amount for refund.'));
   410         if (!
$payment->getParentTransactionId()) {
   411             throw new \Magento\Framework\Exception\LocalizedException(
__(
'Invalid transaction ID.'));
   414         $payment->setAnetTransType(self::REQUEST_TYPE_CREDIT);
   421         switch (
$result->getXResponseCode()) {
   427                     $payment->setIsTransactionClosed(
true)
   428                         ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, 
$result->getXTransId());
   431                 throw new \Magento\Framework\Exception\LocalizedException(
   432                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   436                 throw new \Magento\Framework\Exception\LocalizedException(
   437                     $this->dataHelper->wrapGatewayError(
$result->getXResponseReasonText())
   440                 throw new \Magento\Framework\Exception\LocalizedException(
__(
'Payment refunding error.'));
   466         return $this->dataHelper->getRelayUrl(
$storeId);
   490         switch ($paymentAction) {
   498                 $order->setCanSendNewEmailFlag(
false);
   499                 $payment->setBaseAmountAuthorized($order->getBaseTotalDue());
   500                 $payment->setAmountAuthorized($order->getTotalDue());
   501                 $payment->setAnetTransType($requestType);
   516         $request = $this->requestFactory->create()
   517             ->setConstantData($this)
   518             ->setDataFromOrder(
$order, $this)
   521         $this->_debug([
'request' => 
$request->getData()]);
   552             throw new \Magento\Framework\Exception\LocalizedException(
   553                 __(
'The transaction was declined because the response hash validation failed.')
   568         $this->_debug([
'response' => $responseData]);
   577         $responseText = $this->dataHelper->wrapGatewayError(
$response->getXResponseReasonText());
   579         if ($this->getOrderIncrementId()) {
   580             $order = $this->getOrderFromResponse();
   584                 throw new \Magento\Framework\Exception\LocalizedException(
   585                     __(
'This payment didn\'t work out because we can\'t find this order.')
   588             if ($order->getId()) {
   599             $responseText = $responseText && !
$response->isApproved()
   601                 : 
__(
'This payment didn\'t work out because we can\'t find this order.');
   602             throw new \Magento\Framework\Exception\LocalizedException($responseText);
   615         $payment->setTransactionId(
$response->getXTransId())
   616             ->setParentTransactionId(
null)
   617             ->setIsTransactionClosed(0)
   618             ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, 
$response->getXTransId());
   626             $payment->setIsTransactionPending(
true)
   627                 ->setIsFraudDetected(
true);
   639         switch ($this->
getResponse()->getXResponseCode()) {
   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);
   650                 throw new \Magento\Framework\Exception\LocalizedException(
   651                     __(
'There was a payment authorization error.')
   665             throw new \Magento\Framework\Exception\LocalizedException(
   666                 __(
'Please enter a transaction ID to authorize this payment.')
   680         return sprintf(
'%.2F', 
$amount) == sprintf(
'%.2F', $this->
getResponse()->getXAmount());
   698         } 
catch (\Exception $e) {
   710         $payment->getMethodInstance()->setIsInitializeNeeded(
false);
   721                 'Something went wrong: the paid amount doesn\'t match the order amount.'   722                 . 
' Please correct this and try again.'   725             throw new \Magento\Framework\Exception\LocalizedException(
$message);
   729             if (!
$response->hasOrderSendConfirmation() || 
$response->getOrderSendConfirmation()) {
   730                 $this->orderSender->send(
$order);
   733             $quote = $this->quoteRepository->get(
$order->getQuoteId())->setIsActive(
false);
   734             $this->quoteRepository->save(
$quote);
   735         } 
catch (\Exception $e) {
   749             $fraudDetailsResponse = 
$payment->getMethodInstance()
   750                 ->fetchTransactionFraudDetails($this->
getResponse()->getXTransId());
   751             $fraudData = $fraudDetailsResponse->getData();
   753             if (empty($fraudData)) {
   754                 $payment->setIsFraudDetected(
false);
   758             $fdsFilterAction = (string)$fraudDetailsResponse->getFdsFilterAction();
   759             if ($this->fdsFilterActionIsReportOnly($fdsFilterAction) === 
false) {
   763             $payment->setAdditionalInformation(
'fraud_details', $fraudData);
   764         } 
catch (\Exception $e) {
   780             $transactionId = $this->
getResponse()->getXTransId();
   781             $data = $this->transactionService->getTransactionDetails($this, $transactionId);
   782             $transactionStatus = (string)
$data->transaction->transactionStatus;
   783             $fdsFilterAction = (
string)
$data->transaction->FDSFilterAction;
   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"';
   793                     $this->dataHelper->getTransactionStatusLabel($transactionStatus),
   794                     $this->dataHelper->getFdsFilterActionLabel($fdsFilterAction)
   798         } 
catch (\Exception $e) {
   799             $this->getPsrLogger()->critical($e);
   819                 && strtoupper(
$response->getXType()) == self::REQUEST_TYPE_AUTH_ONLY
   822                       ->setTransactionId(
null)
   823                       ->setParentTransactionId(
$response->getXTransId())
   827         } 
catch (\Exception $e) {
   829             $this->getPsrLogger()->critical($e);
   841         $transaction = $this->transactionRepository->getByTransactionId(
   846         return $transaction->getAdditionalInformation(self::REAL_TRANSACTION_ID_KEY);
   877         $this->_isInitializeNeeded = (bool)$isInitializeNeeded;
   901         $transaction = $this->transactionRepository->getByTransactionId(
   909             if (
$response->getTransactionStatus() == 
'voided') {
   910                 $payment->setIsTransactionDenied(
true);
   911                 $payment->setIsTransactionClosed(
true);
   914                 $transaction->setAdditionalInformation(self::TRANSACTION_FRAUD_STATE_KEY, 
false);
   915                 $payment->setIsTransactionApproved(
true);
   918             $payment->setIsTransactionDenied(
true);
   935         if (
$payment->getIsTransactionApproved()) {
   937                 'Transaction %1 has been approved. Amount %2. Transaction status is "%3"',
   939                 $payment->getOrder()->getBaseCurrency()->formatTxt(
$payment->getAmountAuthorized()),
   940                 $this->dataHelper->getTransactionStatusLabel(
$response->getTransactionStatus())
   945                 'Transaction %1 has been voided/declined. Transaction status is "%2". Amount %3.',
   947                 $this->dataHelper->getTransactionStatusLabel(
$response->getTransactionStatus()),
   948                 $payment->getOrder()->getBaseCurrency()->formatTxt(
$payment->getAmountAuthorized())
   988         $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId);
   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);
  1003     private function getPsrLogger()
  1005         if (
null === $this->psrLogger) {
  1007                 ->get(\Psr\Log\LoggerInterface::class);
  1009         return $this->psrLogger;
  1017     private function getOrderFromResponse(): \
Magento\Sales\Model\Order
  1019         if (!$this->
order) {
  1020             $this->
order = $this->orderFactory->create();
  1022             if ($incrementId = $this->getOrderIncrementId()) {
  1023                 $this->
order = $this->
order->loadByIncrementId($incrementId);
  1027         return $this->order;
  1035     private function getOrderIncrementId(): string
  1047     private function fdsFilterActionIsReportOnly($fdsFilterAction)
  1049         return $fdsFilterAction === (string)$this->dataHelper->getFdsFilterActionLabel(
'report');
 
declineOrder(\Magento\Sales\Model\Order $order, $message='', $voidPayment=true)
initialize($paymentAction, $stateObject)
$_canRefundInvoicePartial
const RESPONSE_REASON_CODE_APPROVED
elseif(isset( $params[ 'redirect_parent']))
process(array $responseData)
$_canFetchTransactionInfo
void(\Magento\Payment\Model\InfoInterface $payment)
processRefund(\Magento\Framework\DataObject $payment, $amount)
const RESPONSE_REASON_CODE_PENDING_REVIEW_DECLINED
getRealParentTransactionId($payment)
fillPaymentByResponse(\Magento\Framework\DataObject $payment)
addStatusComment(\Magento\Sales\Model\Order\Payment $payment)
getValue($key, $storeId=null)
processOrder(\Magento\Sales\Model\Order $order)
const REQUEST_TYPE_AUTH_ONLY
authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
const RESPONSE_REASON_CODE_PENDING_REVIEW
processPaymentFraudStatus(\Magento\Sales\Model\Order\Payment $payment)
const RESPONSE_CODE_ERROR
const RESPONSE_REASON_CODE_PENDING_REVIEW_AUTHORIZED
setDataHelper(\Magento\Authorizenet\Helper\Data $dataHelper)
const RESPONSE_CODE_DECLINED
setPathPattern($pathPattern)
fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId)
generateRequestFromOrder(\Magento\Sales\Model\Order $order)
setResponseData(array $postData)
const RESPONSE_CODE_APPROVED
__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)
addStatusCommentOnUpdate(\Magento\Sales\Model\Order\Payment $payment, \Magento\Framework\DataObject $response, $transactionId)
const ACTION_AUTHORIZE_CAPTURE
getConfigData($field, $storeId=null)
getTransactionResponse($transactionId)
setMethodCode($methodCode)
order(\Magento\Payment\Model\InfoInterface $payment, $amount)
const REQUEST_TYPE_AUTH_CAPTURE
isGatewayActionsLocked($payment)
getRelayUrl($storeId=null)
processCapture($result, $payment)
refund(\Magento\Payment\Model\InfoInterface $payment, $amount)
capture(\Magento\Payment\Model\InfoInterface $payment, $amount)
setIsInitializeNeeded($isInitializeNeeded=true)