refundResponseFactory = $refundResponseFactory; $this->logger = $logger; $this->clientFactory = $clientFactory; } /** * @inheritdoc */ public function placeRequest(TransferInterface $transferObject) { $data = $transferObject->getBody(); $log = [ 'request' => $transferObject->getBody(), 'client' => static::class ]; $response = []; try { $response = $this->process($data); } catch (\Exception $e) { $message = __($e->getMessage() ?: "Something went wrong during Gateway request."); $log['error'] = $message; $this->logger->debug($log); } finally { $log['response'] = (array)$response; $this->logger->debug($log); } return $response; } /** * @inheritdoc */ protected function process(array $data) { $store_id = $data['store_id']; unset($data['store_id']); $response = [ 'status' => false ]; try { $client = $this->clientFactory->create($store_id); $responseParser = $client->refund($data); $refundResponse = $this->refundResponseFactory->create(['response' => $responseParser]); $refund = $refundResponse->getDetails(); } catch (\Exception $e) { $log['error'] = $e->getMessage(); $this->logger->debug($log); } $response['state'] = $refund->getRefundStatus()->getState(); if (in_array($refund->getRefundStatus()->getState(), self::SUCCESS_CODES)) { $response['status'] = true; $response['refund_id'] = $refund->getRefundId(); } else { $response['response_code'] = $refund->getRefundStatus()->getReasonCode(); } // Gateway expects response to be in form of array return $response; } }