_paypalData = $paypalData; $this->_paypalConfigFactory = $paypalConfigFactory; $this->_localeResolver = $localeResolver; $this->_config = null; $this->_isScopePrivate = true; $this->currentCustomer = $currentCustomer; parent::__construct($context, $data); } /** * Set template and redirect message * * @return null */ protected function _construct() { $this->_config = $this->_paypalConfigFactory->create() ->setMethod($this->getMethodCode()); $mark = $this->_getMarkTemplate(); $mark->setPaymentAcceptanceMarkHref( $this->_config->getPaymentMarkWhatIsPaypalUrl($this->_localeResolver) )->setPaymentAcceptanceMarkSrc( $this->_config->getPaymentMarkImageUrl($this->_localeResolver->getLocale()) ); // known issue: code above will render only static mark image $this->_initializeRedirectTemplateWithMark($mark); parent::_construct(); $this->setRedirectMessage(__('You will be redirected to the PayPal website.')); } /** * Payment method code getter * * @return string */ public function getMethodCode() { return $this->_methodCode; } /** * Get initialized mark template * * @return Template */ protected function _getMarkTemplate() { /** @var $mark Template */ $mark = $this->_layout->createBlock(\Magento\Framework\View\Element\Template::class); $mark->setTemplate('Magento_Paypal::payment/mark.phtml'); return $mark; } /** * Initializes redirect template and set mark * @param Template $mark * * @return void */ protected function _initializeRedirectTemplateWithMark(Template $mark) { $this->setTemplate( 'Magento_Paypal::payment/redirect.phtml' )->setRedirectMessage( __('You will be redirected to the PayPal website when you place an order.') )->setMethodTitle( // Output PayPal mark, omit title '' )->setMethodLabelAfterHtml( $mark->toHtml() ); } /** * Get billing agreement code * * @return string|null */ public function getBillingAgreementCode() { $customerId = $this->currentCustomer->getCustomerId(); return $this->_paypalData->shouldAskToCreateBillingAgreement($this->_config, $customerId) ? Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT : null; } }