18 use Psr\Log\LoggerInterface;
31 private $requestBuilder;
36 private $transferFactory;
61 private $errorMessageMapper;
76 LoggerInterface $logger,
81 $this->requestBuilder = $requestBuilder;
82 $this->transferFactory = $transferFactory;
83 $this->client = $client;
84 $this->handler = $handler;
85 $this->validator = $validator;
87 $this->errorMessageMapper = $errorMessageMapper;
99 public function execute(array $commandSubject)
102 $transferO = $this->transferFactory->create(
103 $this->requestBuilder->build($commandSubject)
106 $response = $this->client->placeRequest($transferO);
107 if ($this->validator !==
null) {
108 $result = $this->validator->validate(
109 array_merge($commandSubject, [
'response' =>
$response])
116 if ($this->handler) {
117 $this->handler->handle(
134 $errorsSource = array_merge(
$result->getErrorCodes(),
$result->getFailsDescription());
135 foreach ($errorsSource as $errorCodeOrMessage) {
136 $errorCodeOrMessage = (string) $errorCodeOrMessage;
139 if ($this->errorMessageMapper !==
null) {
140 $mapped = (string) $this->errorMessageMapper->getMessage($errorCodeOrMessage);
141 if (!empty($mapped)) {
142 $messages[] = $mapped;
143 $errorCodeOrMessage = $mapped;
146 $this->logger->critical(
'Payment Error: ' . $errorCodeOrMessage);
149 throw new CommandException(
151 ?
__(implode(PHP_EOL, $messages))
152 :
__(
'Transaction has been declined. Please try again later.')
__construct(BuilderInterface $requestBuilder, TransferFactoryInterface $transferFactory, ClientInterface $client, LoggerInterface $logger, HandlerInterface $handler=null, ValidatorInterface $validator=null, ErrorMessageMapperInterface $errorMessageMapper=null)
execute(array $commandSubject)