GeneralResponseValidator.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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\Validator;
  8. use Magento\AuthorizenetAcceptjs\Gateway\SubjectReader;
  9. use Magento\Payment\Gateway\Validator\AbstractValidator;
  10. use Magento\Payment\Gateway\Validator\ResultInterface;
  11. use Magento\Payment\Gateway\Validator\ResultInterfaceFactory;
  12. /**
  13. * Validates that the request was successful
  14. */
  15. class GeneralResponseValidator extends AbstractValidator
  16. {
  17. /**
  18. * The result code that authorize.net returns for a successful Api call
  19. */
  20. private const RESULT_CODE_SUCCESS = 'Ok';
  21. /**
  22. * @var SubjectReader
  23. */
  24. private $subjectReader;
  25. /**
  26. * @var ResultInterfaceFactory
  27. */
  28. private $resultFactory;
  29. /**
  30. * @param ResultInterfaceFactory $resultFactory
  31. * @param SubjectReader $subjectReader
  32. */
  33. public function __construct(
  34. ResultInterfaceFactory $resultFactory,
  35. SubjectReader $subjectReader
  36. ) {
  37. parent::__construct($resultFactory);
  38. $this->resultFactory = $resultFactory;
  39. $this->subjectReader = $subjectReader;
  40. }
  41. /**
  42. * @inheritdoc
  43. */
  44. public function validate(array $validationSubject): ResultInterface
  45. {
  46. $response = $this->subjectReader->readResponse($validationSubject);
  47. $isValid = (isset($response['messages']['resultCode'])
  48. && $response['messages']['resultCode'] === self::RESULT_CODE_SUCCESS);
  49. $errorCodes = [];
  50. $errorMessages = [];
  51. if (!$isValid) {
  52. if (isset($response['messages']['message']['code'])) {
  53. $errorCodes[] = $response['messages']['message']['code'];
  54. $errorMessages[] = $response['messages']['message']['text'];
  55. } elseif (isset($response['messages']['message'])) {
  56. foreach ($response['messages']['message'] as $message) {
  57. $errorCodes[] = $message['code'];
  58. $errorMessages[] = $message['text'];
  59. }
  60. } elseif (isset($response['errors']['error'])) {
  61. foreach ($response['errors']['error'] as $message) {
  62. $errorCodes[] = $message['errorCode'];
  63. $errorMessages[] = $message['errorText'];
  64. }
  65. }
  66. }
  67. return $this->createResult($isValid, $errorMessages, $errorCodes);
  68. }
  69. }