AssignData.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * This file is part of the Klarna KP 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\Kp\Observer;
  11. use Klarna\Kp\Api\QuoteInterface;
  12. use Klarna\Kp\Api\QuoteRepositoryInterface;
  13. use Klarna\Kp\Model\Payment\Kp;
  14. use Magento\Framework\App\Config\ScopeConfigInterface;
  15. use Magento\Framework\DataObjectFactory;
  16. use Magento\Framework\Event\Observer;
  17. use Magento\Framework\Exception\LocalizedException;
  18. use Magento\Framework\Exception\NoSuchEntityException;
  19. use Magento\Payment\Observer\AbstractDataAssignObserver;
  20. use Magento\Quote\Api\Data\PaymentInterface;
  21. use Magento\Store\Model\ScopeInterface;
  22. use Psr\Log\LoggerInterface;
  23. /**
  24. * Class AssignData
  25. *
  26. * @package Klarna\Kp\Observer
  27. */
  28. class AssignData extends AbstractDataAssignObserver
  29. {
  30. /**
  31. * @var QuoteRepositoryInterface
  32. */
  33. private $klarnaQuoteRepository;
  34. /**
  35. * @var LoggerInterface
  36. */
  37. private $log;
  38. /**
  39. * @var DataObjectFactory
  40. */
  41. private $dataObjectFactory;
  42. /**
  43. * @var ScopeConfigInterface
  44. */
  45. private $config;
  46. /**
  47. * AssignData constructor.
  48. *
  49. * @param QuoteRepositoryInterface $klarnaQuoteRepository
  50. * @param LoggerInterface $log
  51. * @param DataObjectFactory $dataObjectFactory
  52. * @param ScopeConfigInterface $config
  53. */
  54. public function __construct(
  55. QuoteRepositoryInterface $klarnaQuoteRepository,
  56. LoggerInterface $log,
  57. DataObjectFactory $dataObjectFactory,
  58. ScopeConfigInterface $config
  59. ) {
  60. $this->klarnaQuoteRepository = $klarnaQuoteRepository;
  61. $this->log = $log;
  62. $this->dataObjectFactory = $dataObjectFactory;
  63. $this->config = $config;
  64. }
  65. /**
  66. * Observer
  67. *
  68. * @param Observer $observer
  69. * @return void
  70. * @throws LocalizedException
  71. */
  72. public function execute(Observer $observer)
  73. {
  74. $method = $this->readMethodArgument($observer);
  75. if (false === strpos($method->getCode(), 'klarna_')) {
  76. return;
  77. }
  78. $data = $this->readDataArgument($observer);
  79. $additionalData = $data->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
  80. if (!is_array($additionalData)) {
  81. return;
  82. }
  83. $additionalData = $this->dataObjectFactory->create(['data' => $additionalData]);
  84. $payment = $this->readPaymentModelArgument($observer);
  85. $quote = $payment->getQuote();
  86. if (!$this->config->isSetFlag(
  87. 'payment/' . Kp::METHOD_CODE . '/active',
  88. ScopeInterface::SCOPE_STORES,
  89. $quote->getStore()
  90. )) {
  91. return;
  92. }
  93. try {
  94. /** @var QuoteInterface $klarnaQuote */
  95. $klarnaQuote = $this->klarnaQuoteRepository->getActiveByQuote($quote);
  96. $klarnaQuote->setAuthorizationToken($additionalData->getData('authorization_token'));
  97. $payment->setAdditionalInformation('method_title', $additionalData->getData('method_title'));
  98. $payment->setAdditionalInformation('logo', $additionalData->getData('logo'));
  99. $payment->setAdditionalInformation('method_code', $payment->getMethodInstance()->getCode());
  100. $payment->setAdditionalInformation('klarna_order_id', $klarnaQuote->getSessionId());
  101. $this->klarnaQuoteRepository->save($klarnaQuote);
  102. } catch (NoSuchEntityException $npe) {
  103. $data = ['klarna_id' => $additionalData->getData('authorization_token')];
  104. $this->log->error($npe, $data);
  105. }
  106. }
  107. }