<?php /** * This file is part of the Klarna Order Management module * * (c) Klarna Bank AB (publ) * * For the full copyright and license information, please view the NOTICE * and LICENSE files that were distributed with this source code. */ namespace Klarna\Ordermanagement\Gateway\Command; use Klarna\Core\Exception as KlarnaException; use Magento\Payment\Gateway\Command; /** * Class Refund * * @package Klarna\Ordermanagement\Gateway\Command */ class Refund extends AbstractCommand { /** * Refund command * * @param array $commandSubject * * @return null|Command\ResultInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute(array $commandSubject) { /** @var \Magento\Payment\Model\InfoInterface $payment */ $payment = $commandSubject['payment']->getPayment(); $amount = $commandSubject['amount']; $order = $payment->getOrder(); $klarnaOrder = $this->getKlarnaOrder($order); if (!$klarnaOrder->getId() || !$klarnaOrder->getReservationId()) { $e = new KlarnaException(__('Unable to refund payment for this order.')); $this->messageManager->addErrorMessage($e->getMessage()); throw $e; } $response = $this->getOmApi($order) ->refund($klarnaOrder->getReservationId(), $amount, $payment->getCreditmemo()); if (!$response->getIsSuccessful()) { $errorMessage = __('Payment refund failed, please try again.'); $errorMessage = $this->getFullErrorMessage($response, $errorMessage, 'refund'); throw new KlarnaException($errorMessage); } if ($response->getTransactionId()) { $payment->setTransactionId($response->getTransactionId()); } return null; } }