paymentHelper = $paymentHelper; $this->methodSpecificationFactory = $specificationFactory; } /** * @param \Magento\Quote\Api\Data\CartInterface $quote * @return \Magento\Payment\Model\MethodInterface[] */ public function getAvailableMethods(\Magento\Quote\Api\Data\CartInterface $quote = null) { $store = $quote ? $quote->getStoreId() : null; $availableMethods = []; foreach ($this->getPaymentMethodList()->getActiveList($store) as $method) { $methodInstance = $this->getPaymentMethodInstanceFactory()->create($method); if ($methodInstance->isAvailable($quote) && $this->_canUseMethod($methodInstance, $quote)) { $methodInstance->setInfoInstance($quote->getPayment()); $availableMethods[] = $methodInstance; } } return $availableMethods; } /** * Check payment method model * * @param \Magento\Payment\Model\MethodInterface $method * @param \Magento\Quote\Api\Data\CartInterface $quote * @return bool */ protected function _canUseMethod($method, \Magento\Quote\Api\Data\CartInterface $quote) { return $this->methodSpecificationFactory->create( [ AbstractMethod::CHECK_USE_CHECKOUT, AbstractMethod::CHECK_USE_FOR_COUNTRY, AbstractMethod::CHECK_USE_FOR_CURRENCY, AbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX, ] )->isApplicable( $method, $quote ); } /** * Get payment method list. * * @return \Magento\Payment\Api\PaymentMethodListInterface */ private function getPaymentMethodList() { if ($this->paymentMethodList === null) { $this->paymentMethodList = ObjectManager::getInstance()->get( \Magento\Payment\Api\PaymentMethodListInterface::class ); } return $this->paymentMethodList; } /** * Get payment method instance factory. * * @return \Magento\Payment\Model\Method\InstanceFactory */ private function getPaymentMethodInstanceFactory() { if ($this->paymentMethodInstanceFactory === null) { $this->paymentMethodInstanceFactory = ObjectManager::getInstance()->get( \Magento\Payment\Model\Method\InstanceFactory::class ); } return $this->paymentMethodInstanceFactory; } }