Refund.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /**
  3. * This file is part of the Klarna Order Management module
  4. *
  5. * (c) Klarna Bank AB (publ)
  6. *
  7. * For the full copyright and license information, please view the NOTICE
  8. * and LICENSE files that were distributed with this source code.
  9. */
  10. namespace Klarna\Ordermanagement\Gateway\Command;
  11. use Klarna\Core\Exception as KlarnaException;
  12. use Magento\Payment\Gateway\Command;
  13. /**
  14. * Class Refund
  15. *
  16. * @package Klarna\Ordermanagement\Gateway\Command
  17. */
  18. class Refund extends AbstractCommand
  19. {
  20. /**
  21. * Refund command
  22. *
  23. * @param array $commandSubject
  24. *
  25. * @return null|Command\ResultInterface
  26. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  27. */
  28. public function execute(array $commandSubject)
  29. {
  30. /** @var \Magento\Payment\Model\InfoInterface $payment */
  31. $payment = $commandSubject['payment']->getPayment();
  32. $amount = $commandSubject['amount'];
  33. $order = $payment->getOrder();
  34. $klarnaOrder = $this->getKlarnaOrder($order);
  35. if (!$klarnaOrder->getId() || !$klarnaOrder->getReservationId()) {
  36. $e = new KlarnaException(__('Unable to refund payment for this order.'));
  37. $this->messageManager->addErrorMessage($e->getMessage());
  38. throw $e;
  39. }
  40. $response = $this->getOmApi($order)
  41. ->refund($klarnaOrder->getReservationId(), $amount, $payment->getCreditmemo());
  42. if (!$response->getIsSuccessful()) {
  43. $errorMessage = __('Payment refund failed, please try again.');
  44. $errorMessage = $this->getFullErrorMessage($response, $errorMessage, 'refund');
  45. throw new KlarnaException($errorMessage);
  46. }
  47. if ($response->getTransactionId()) {
  48. $payment->setTransactionId($response->getTransactionId());
  49. }
  50. return null;
  51. }
  52. }