KpConfigProvider.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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\Model;
  11. use Klarna\Core\Exception as KlarnaException;
  12. use Klarna\Core\Helper\ConfigHelper;
  13. use Klarna\Kp\Api\Data\ResponseInterface;
  14. use Klarna\Kp\Model\Payment\Kp;
  15. use Magento\Checkout\Model\ConfigProviderInterface;
  16. /**
  17. * Class KpConfigProvider
  18. *
  19. * @package Klarna\Kp\Model
  20. */
  21. class KpConfigProvider implements ConfigProviderInterface
  22. {
  23. /**
  24. * @var ConfigHelper
  25. */
  26. private $config;
  27. /**
  28. * @var Session
  29. */
  30. private $session;
  31. /**
  32. * Constructor
  33. *
  34. * @param ConfigHelper $config
  35. * @param Session $session
  36. */
  37. public function __construct(ConfigHelper $config, Session $session)
  38. {
  39. $this->config = $config;
  40. $this->session = $session;
  41. }
  42. /**
  43. * Return payment config for frontend JS to use
  44. *
  45. * @return string[][]
  46. * @throws \Klarna\Core\Model\Api\Exception
  47. */
  48. public function getConfig()
  49. {
  50. $store = $this->session->getQuote()->getStore();
  51. $paymentConfig = [
  52. 'payment' => [
  53. 'klarna_kp' => [
  54. 'client_token' => null,
  55. 'message' => null,
  56. 'success' => 0,
  57. 'debug' => $this->config->isApiConfigFlag('debug', $store),
  58. 'enabled' => $this->config->isPaymentConfigFlag('active', $store, Kp::METHOD_CODE),
  59. 'available_methods' => [
  60. 'type' => 'klarna_kp',
  61. 'component' => 'Klarna_Kp/js/view/payments/kp'
  62. ]
  63. ]
  64. ]
  65. ];
  66. if (!$this->config->isPaymentConfigFlag('active', $store, Kp::METHOD_CODE)) {
  67. $paymentConfig['payment']['klarna_kp']['message'] = __('Klarna Payments is not enabled');
  68. return $paymentConfig;
  69. }
  70. try {
  71. /** @var ResponseInterface $response */
  72. $response = $this->session->getApiResponse();
  73. if ($response === null) {
  74. $response = $this->session->init();
  75. }
  76. $klarnaQuote = $this->session->getKlarnaQuote();
  77. if ($klarnaQuote->getClientToken() === '') {
  78. $paymentConfig['payment']['klarna_kp']['message'] = __('Please check credentials');
  79. return $paymentConfig;
  80. }
  81. $methods = $klarnaQuote->getPaymentMethodInfo();
  82. $paymentConfig['payment']['klarna_kp']['client_token'] = $klarnaQuote->getClientToken();
  83. $paymentConfig['payment']['klarna_kp']['authorization_token'] = $klarnaQuote->getAuthorizationToken();
  84. $paymentConfig['payment']['klarna_kp']['success'] = $response->isSuccessfull() ? 1 : 0;
  85. if (!$response->isSuccessfull()) {
  86. $paymentConfig['payment']['klarna_kp']['message'] = $response->getMessage();
  87. return $paymentConfig;
  88. }
  89. $paymentConfig = $this->getAvailableMethods($paymentConfig, $methods);
  90. } catch (KlarnaException $e) {
  91. $paymentConfig['payment']['klarna_kp']['message'] = $e->getMessage();
  92. }
  93. return $paymentConfig;
  94. }
  95. /**
  96. * Get available payment methods
  97. *
  98. * @param array $config
  99. * @param array $methods
  100. * @return array
  101. */
  102. private function getAvailableMethods($config, $methods)
  103. {
  104. $available_methods = [];
  105. foreach ($methods as $method) {
  106. $identifier = $method->identifier;
  107. $available_methods[] = [
  108. 'type' => 'klarna_' . $identifier,
  109. 'component' => 'Klarna_Kp/js/view/payments/kp'
  110. ];
  111. $config['payment'][$identifier] = $config['payment']['klarna_kp'];
  112. $config['payment']['klarna_kp'][$identifier] = [
  113. 'title' => $method->name,
  114. 'logo' => $method->asset_urls->standard
  115. ];
  116. unset($config['payment'][$identifier]['available_methods']);
  117. }
  118. $config['payment']['klarna_kp']['available_methods'] = $available_methods;
  119. return $config;
  120. }
  121. }