Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CancelResponseValidator.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
10 use Braintree\Error\ErrorCollection;
11 use Braintree\Error\Validation;
14 use Magento\Payment\Gateway\Validator\ResultInterfaceFactory;
16 
24 {
28  private static $acceptableTransactionCode = 91504;
29 
33  private $generalResponseValidator;
34 
38  private $subjectReader;
39 
45  public function __construct(
46  ResultInterfaceFactory $resultFactory,
47  GeneralResponseValidator $generalResponseValidator,
48  SubjectReader $subjectReader
49  ) {
50  parent::__construct($resultFactory);
51  $this->generalResponseValidator = $generalResponseValidator;
52  $this->subjectReader = $subjectReader;
53  }
54 
58  public function validate(array $validationSubject): ResultInterface
59  {
60  $result = $this->generalResponseValidator->validate($validationSubject);
61  if (!$result->isValid()) {
62  $response = $this->subjectReader->readResponseObject($validationSubject);
63  if ($this->isErrorAcceptable($response->errors)) {
64  $result = $this->createResult(true, [__('Transaction is cancelled offline.')]);
65  }
66  }
67 
68  return $result;
69  }
70 
77  private function isErrorAcceptable(ErrorCollection $errorCollection): bool
78  {
79  $errors = $errorCollection->deepAll();
80  // there is should be only one acceptable error
81  if (count($errors) > 1) {
82  return false;
83  }
84 
86  $error = array_pop($errors);
87 
88  return (int)$error->code === self::$acceptableTransactionCode;
89  }
90 }
$response
Definition: 404.php:11
createResult($isValid, array $fails=[], array $errorCodes=[])
__()
Definition: __.php:13
__construct(ResultInterfaceFactory $resultFactory, GeneralResponseValidator $generalResponseValidator, SubjectReader $subjectReader)
$errors
Definition: overview.phtml:9