| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?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;
- }
- }
|