TokensConfigProvider.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Vault\Model\Ui;
  7. use Magento\Checkout\Model\ConfigProviderInterface;
  8. use Magento\Framework\App\ObjectManager;
  9. use Magento\Store\Model\StoreManagerInterface;
  10. use Magento\Vault\Api\PaymentMethodListInterface;
  11. use Magento\Vault\Model\CustomerTokenManagement;
  12. /**
  13. * Class ConfigProvider
  14. * @api
  15. * @since 100.1.0
  16. */
  17. class TokensConfigProvider implements ConfigProviderInterface
  18. {
  19. /**
  20. * @var string
  21. */
  22. private static $vaultCode = 'vault';
  23. /**
  24. * @var StoreManagerInterface
  25. */
  26. private $storeManager;
  27. /**
  28. * @var TokenUiComponentProviderInterface[]
  29. */
  30. private $tokenUiComponentProviders;
  31. /**
  32. * @var CustomerTokenManagement
  33. */
  34. private $customerTokenManagement;
  35. /**
  36. * @var PaymentMethodListInterface
  37. */
  38. private $vaultPaymentList;
  39. /**
  40. * Constructor
  41. *
  42. * @param StoreManagerInterface $storeManager
  43. * @param CustomerTokenManagement $customerTokenManagement
  44. * @param TokenUiComponentProviderInterface[] $tokenUiComponentProviders
  45. */
  46. public function __construct(
  47. StoreManagerInterface $storeManager,
  48. CustomerTokenManagement $customerTokenManagement,
  49. array $tokenUiComponentProviders = []
  50. ) {
  51. $this->storeManager = $storeManager;
  52. $this->tokenUiComponentProviders = $tokenUiComponentProviders;
  53. $this->customerTokenManagement = $customerTokenManagement;
  54. }
  55. /**
  56. * Retrieve assoc array of checkout configuration
  57. *
  58. * @return array
  59. * @since 100.1.0
  60. */
  61. public function getConfig()
  62. {
  63. $vaultPayments = [];
  64. $providers = $this->getComponentProviders();
  65. if (empty($providers)) {
  66. return $vaultPayments;
  67. }
  68. $tokens = $this->customerTokenManagement->getCustomerSessionTokens();
  69. foreach ($tokens as $i => $token) {
  70. $paymentCode = $token->getPaymentMethodCode();
  71. if (!isset($providers[$paymentCode])) {
  72. continue;
  73. }
  74. $componentProvider = $providers[$paymentCode];
  75. $component = $componentProvider->getComponentForToken($token);
  76. $config = $component->getConfig();
  77. $vaultPaymentCode = !empty($config['code']) ? $config['code'] : $paymentCode;
  78. $vaultPayments[$vaultPaymentCode . '_' . $i] = [
  79. 'config' => $config,
  80. 'component' => $component->getName()
  81. ];
  82. }
  83. return [
  84. 'payment' => [
  85. self::$vaultCode => $vaultPayments
  86. ]
  87. ];
  88. }
  89. /**
  90. * Get list of available vault ui token providers.
  91. *
  92. * @return TokenUiComponentProviderInterface[]
  93. */
  94. private function getComponentProviders()
  95. {
  96. $providers = [];
  97. $storeId = $this->storeManager->getStore()->getId();
  98. $vaultPaymentMethods = $this->getVaultPaymentList()->getActiveList($storeId);
  99. foreach ($vaultPaymentMethods as $method) {
  100. $providerCode = $method->getProviderCode();
  101. $componentProvider = $this->getComponentProvider($providerCode);
  102. if ($componentProvider === null) {
  103. continue;
  104. }
  105. $providers[$providerCode] = $componentProvider;
  106. }
  107. return $providers;
  108. }
  109. /**
  110. * @param string $vaultProviderCode
  111. * @return TokenUiComponentProviderInterface|null
  112. */
  113. private function getComponentProvider($vaultProviderCode)
  114. {
  115. $componentProvider = isset($this->tokenUiComponentProviders[$vaultProviderCode])
  116. ? $this->tokenUiComponentProviders[$vaultProviderCode]
  117. : null;
  118. return $componentProvider instanceof TokenUiComponentProviderInterface
  119. ? $componentProvider
  120. : null;
  121. }
  122. /**
  123. * Get instance of vault payment list instance
  124. * @return PaymentMethodListInterface
  125. * @deprecated 100.2.0
  126. */
  127. private function getVaultPaymentList()
  128. {
  129. if ($this->vaultPaymentList === null) {
  130. $this->vaultPaymentList = ObjectManager::getInstance()->get(PaymentMethodListInterface::class);
  131. }
  132. return $this->vaultPaymentList;
  133. }
  134. }