GeneralResponseValidator.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Gateway\Validator;
  7. use Braintree\Result\Error;
  8. use Braintree\Result\Successful;
  9. use Magento\Payment\Gateway\Validator\AbstractValidator;
  10. use Magento\Braintree\Gateway\SubjectReader;
  11. use Magento\Payment\Gateway\Validator\ResultInterfaceFactory;
  12. class GeneralResponseValidator extends AbstractValidator
  13. {
  14. /**
  15. * @var SubjectReader
  16. */
  17. protected $subjectReader;
  18. /**
  19. * @var ErrorCodeProvider
  20. */
  21. private $errorCodeProvider;
  22. /**
  23. * Constructor
  24. *
  25. * @param ResultInterfaceFactory $resultFactory
  26. * @param SubjectReader $subjectReader
  27. * @param ErrorCodeProvider $errorCodeProvider
  28. */
  29. public function __construct(
  30. ResultInterfaceFactory $resultFactory,
  31. SubjectReader $subjectReader,
  32. ErrorCodeProvider $errorCodeProvider
  33. ) {
  34. parent::__construct($resultFactory);
  35. $this->subjectReader = $subjectReader;
  36. $this->errorCodeProvider = $errorCodeProvider;
  37. }
  38. /**
  39. * @inheritdoc
  40. */
  41. public function validate(array $validationSubject)
  42. {
  43. /** @var Successful|Error $response */
  44. $response = $this->subjectReader->readResponseObject($validationSubject);
  45. $isValid = true;
  46. $errorMessages = [];
  47. foreach ($this->getResponseValidators() as $validator) {
  48. $validationResult = $validator($response);
  49. if (!$validationResult[0]) {
  50. $isValid = $validationResult[0];
  51. $errorMessages = array_merge($errorMessages, $validationResult[1]);
  52. }
  53. }
  54. $errorCodes = $this->errorCodeProvider->getErrorCodes($response);
  55. return $this->createResult($isValid, $errorMessages, $errorCodes);
  56. }
  57. /**
  58. * @return array
  59. */
  60. protected function getResponseValidators()
  61. {
  62. return [
  63. function ($response) {
  64. return [
  65. property_exists($response, 'success') && $response->success === true,
  66. [$response->message ?? __('Braintree error response.')]
  67. ];
  68. }
  69. ];
  70. }
  71. }