PaymentResponseHandler.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\AuthorizenetAcceptjs\Gateway\Response;
  8. use Magento\AuthorizenetAcceptjs\Gateway\SubjectReader;
  9. use Magento\Payment\Gateway\Response\HandlerInterface;
  10. use Magento\Sales\Model\Order\Payment;
  11. /**
  12. * Processes payment information from a response
  13. */
  14. class PaymentResponseHandler implements HandlerInterface
  15. {
  16. private const RESPONSE_CODE_HELD = 4;
  17. /**
  18. * @var SubjectReader
  19. */
  20. private $subjectReader;
  21. /**
  22. * @param SubjectReader $subjectReader
  23. */
  24. public function __construct(SubjectReader $subjectReader)
  25. {
  26. $this->subjectReader = $subjectReader;
  27. }
  28. /**
  29. * @inheritdoc
  30. */
  31. public function handle(array $handlingSubject, array $response): void
  32. {
  33. $paymentDO = $this->subjectReader->readPayment($handlingSubject);
  34. $payment = $paymentDO->getPayment();
  35. $transactionResponse = $response['transactionResponse'];
  36. if ($payment instanceof Payment) {
  37. $payment->setCcLast4($payment->getAdditionalInformation('ccLast4'));
  38. $payment->setCcAvsStatus($transactionResponse['avsResultCode']);
  39. $payment->setIsTransactionClosed(false);
  40. if ($transactionResponse['responseCode'] == self::RESPONSE_CODE_HELD) {
  41. $payment->setIsTransactionPending(true)
  42. ->setIsFraudDetected(true);
  43. }
  44. }
  45. }
  46. }