Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
GatewayCommand.php
Go to the documentation of this file.
1 <?php
7 
18 use Psr\Log\LoggerInterface;
19 
27 {
31  private $requestBuilder;
32 
36  private $transferFactory;
37 
41  private $client;
42 
46  private $handler;
47 
51  private $validator;
52 
56  private $logger;
57 
61  private $errorMessageMapper;
62 
72  public function __construct(
73  BuilderInterface $requestBuilder,
74  TransferFactoryInterface $transferFactory,
75  ClientInterface $client,
76  LoggerInterface $logger,
77  HandlerInterface $handler = null,
78  ValidatorInterface $validator = null,
79  ErrorMessageMapperInterface $errorMessageMapper = null
80  ) {
81  $this->requestBuilder = $requestBuilder;
82  $this->transferFactory = $transferFactory;
83  $this->client = $client;
84  $this->handler = $handler;
85  $this->validator = $validator;
86  $this->logger = $logger;
87  $this->errorMessageMapper = $errorMessageMapper;
88  }
89 
99  public function execute(array $commandSubject)
100  {
101  // @TODO implement exceptions catching
102  $transferO = $this->transferFactory->create(
103  $this->requestBuilder->build($commandSubject)
104  );
105 
106  $response = $this->client->placeRequest($transferO);
107  if ($this->validator !== null) {
108  $result = $this->validator->validate(
109  array_merge($commandSubject, ['response' => $response])
110  );
111  if (!$result->isValid()) {
112  $this->processErrors($result);
113  }
114  }
115 
116  if ($this->handler) {
117  $this->handler->handle(
118  $commandSubject,
119  $response
120  );
121  }
122  }
123 
131  private function processErrors(ResultInterface $result)
132  {
133  $messages = [];
134  $errorsSource = array_merge($result->getErrorCodes(), $result->getFailsDescription());
135  foreach ($errorsSource as $errorCodeOrMessage) {
136  $errorCodeOrMessage = (string) $errorCodeOrMessage;
137 
138  // error messages mapper can be not configured if payment method doesn't have custom error messages.
139  if ($this->errorMessageMapper !== null) {
140  $mapped = (string) $this->errorMessageMapper->getMessage($errorCodeOrMessage);
141  if (!empty($mapped)) {
142  $messages[] = $mapped;
143  $errorCodeOrMessage = $mapped;
144  }
145  }
146  $this->logger->critical('Payment Error: ' . $errorCodeOrMessage);
147  }
148 
149  throw new CommandException(
150  !empty($messages)
151  ? __(implode(PHP_EOL, $messages))
152  : __('Transaction has been declined. Please try again later.')
153  );
154  }
155 }
$response
Definition: 404.php:11
__()
Definition: __.php:13
$logger
__construct(BuilderInterface $requestBuilder, TransferFactoryInterface $transferFactory, ClientInterface $client, LoggerInterface $logger, HandlerInterface $handler=null, ValidatorInterface $validator=null, ErrorMessageMapperInterface $errorMessageMapper=null)