config = $configFactory->create(); $this->config->setMethod(Config::METHOD_EXPRESS); $this->serializer = $serializer; $this->smartButtonConfig = $smartButtonConfig; $this->urlBuilder = $urlBuilder; } /** * Check is Paypal In-Context Express Checkout button should render in cart/mini-cart * * @return bool */ private function shouldRender(): bool { $isInCatalog = $this->getIsInCatalogProduct(); $isInContext = (bool)(int) $this->config->getValue('in_context'); return ($isInContext && $isInCatalog); } /** * @inheritdoc */ protected function _toHtml() { if (!$this->shouldRender()) { return ''; } return parent::_toHtml(); } /** * Get shortcut alias * * @return string */ public function getAlias() { return $this->getData(self::ALIAS_ELEMENT_INDEX); } /** * Returns string to initialize js component * * @return string */ public function getJsInitParams(): string { $clientConfig = [ 'button' => 1, 'getTokenUrl' => $this->urlBuilder->getUrl( 'paypal/express/getTokenData', ['_secure' => $this->getRequest()->isSecure()] ), 'onAuthorizeUrl' => $this->urlBuilder->getUrl( 'paypal/express/onAuthorization', ['_secure' => $this->getRequest()->isSecure()] ), 'onCancelUrl' => $this->urlBuilder->getUrl( 'paypal/express/cancel', ['_secure' => $this->getRequest()->isSecure()] ) ]; $smartButtonsConfig = $this->smartButtonConfig->getConfig('product'); $clientConfig = array_replace_recursive($clientConfig, $smartButtonsConfig); $config = [ 'Magento_Paypal/js/in-context/product-express-checkout' => [ 'clientConfig' => $clientConfig ] ]; return $this->serializer->serialize($config); } }