vaultPaymentList = $vaultPaymentList; $this->paymentMethodList = $paymentMethodList; $this->storeManager = $storeManager; } /** * Checkout LayoutProcessor before process plugin. * * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $processor * @param array $jsLayout * @return array * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function beforeProcess(\Magento\Checkout\Block\Checkout\LayoutProcessor $processor, $jsLayout) { $configuration = &$jsLayout['components']['checkout']['children']['steps']['children']['billing-step'] ['children']['payment']['children']['renders']['children']; if (!isset($configuration)) { return [$jsLayout]; } $storeId = $this->storeManager->getStore()->getId(); $activePaymentMethodList = $this->paymentMethodList->getActiveList($storeId); $activeVaultList = $this->vaultPaymentList->getActiveList($storeId); $getCodeFunc = function ($method) { return $method->getCode(); }; $getProviderCodeFunc = function ($method) { return $method->getProviderCode(); }; $activePaymentMethodCodes = array_map($getCodeFunc, $activePaymentMethodList); $activeVaultProviderCodes = array_map($getProviderCodeFunc, $activeVaultList); $activePaymentMethodCodes = array_merge( $activePaymentMethodCodes, $activeVaultProviderCodes ); foreach ($configuration as $paymentGroup => $groupConfig) { $notActivePaymentMethodCodes = array_diff(array_keys($groupConfig['methods']), $activePaymentMethodCodes); foreach ($notActivePaymentMethodCodes as $notActivePaymentMethodCode) { unset($configuration[$paymentGroup]['methods'][$notActivePaymentMethodCode]); } if ($paymentGroup === 'vault' && !empty($activeVaultProviderCodes)) { continue; } if (empty($configuration[$paymentGroup]['methods'])) { unset($configuration[$paymentGroup]); } } return [$jsLayout]; } }