123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Model;
- use Magento\Checkout\Model\ConfigProviderInterface;
- use Magento\Framework\Locale\ResolverInterface;
- use Magento\Customer\Helper\Session\CurrentCustomer;
- use Magento\Framework\UrlInterface;
- use Magento\Payment\Helper\Data as PaymentHelper;
- use Magento\Paypal\Helper\Data as PaypalHelper;
- /**
- * Class ExpressConfigProvider
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ExpressConfigProvider implements ConfigProviderInterface
- {
- const IN_CONTEXT_BUTTON_ID = 'paypal-express-in-context-button';
- /**
- * @var ResolverInterface
- */
- protected $localeResolver;
- /**
- * @var Config
- */
- protected $config;
- /**
- * @var \Magento\Customer\Helper\Session\CurrentCustomer
- */
- protected $currentCustomer;
- /**
- * @var PaypalHelper
- */
- protected $paypalHelper;
- /**
- * @var string[]
- */
- protected $methodCodes = [
- Config::METHOD_WPP_BML,
- Config::METHOD_WPP_PE_EXPRESS,
- Config::METHOD_WPP_EXPRESS,
- Config::METHOD_WPP_PE_BML
- ];
- /**
- * @var \Magento\Payment\Model\Method\AbstractMethod[]
- */
- protected $methods = [];
- /**
- * @var PaymentHelper
- */
- protected $paymentHelper;
- /**
- * @var UrlInterface
- */
- protected $urlBuilder;
- /**
- * @var SmartButtonConfig
- */
- private $smartButtonConfig;
- /**
- * ExpressConfigProvider constructor.
- * @param ConfigFactory $configFactory
- * @param ResolverInterface $localeResolver
- * @param CurrentCustomer $currentCustomer
- * @param PaypalHelper $paypalHelper
- * @param PaymentHelper $paymentHelper
- * @param UrlInterface $urlBuilder
- * @param SmartButtonConfig|null $smartButtonConfig
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function __construct(
- ConfigFactory $configFactory,
- ResolverInterface $localeResolver,
- CurrentCustomer $currentCustomer,
- PaypalHelper $paypalHelper,
- PaymentHelper $paymentHelper,
- UrlInterface $urlBuilder,
- SmartButtonConfig $smartButtonConfig
- ) {
- $this->localeResolver = $localeResolver;
- $this->config = $configFactory->create();
- $this->currentCustomer = $currentCustomer;
- $this->paypalHelper = $paypalHelper;
- $this->paymentHelper = $paymentHelper;
- $this->urlBuilder = $urlBuilder;
- $this->smartButtonConfig = $smartButtonConfig;
- foreach ($this->methodCodes as $code) {
- $this->methods[$code] = $this->paymentHelper->getMethodInstance($code);
- }
- }
- /**
- * @inheritdoc
- */
- public function getConfig()
- {
- $locale = $this->localeResolver->getLocale();
- $config = [
- 'payment' => [
- 'paypalExpress' => [
- 'paymentAcceptanceMarkHref' => $this->config->getPaymentMarkWhatIsPaypalUrl(
- $this->localeResolver
- ),
- 'paymentAcceptanceMarkSrc' => $this->config->getPaymentMarkImageUrl(
- $locale
- ),
- 'isContextCheckout' => false,
- 'inContextConfig' => []
- ]
- ]
- ];
- $isInContext = $this->isInContextCheckout();
- if ($isInContext) {
- $config['payment']['paypalExpress']['isContextCheckout'] = $isInContext;
- $config['payment']['paypalExpress']['inContextConfig'] = [
- 'inContextId' => self::IN_CONTEXT_BUTTON_ID,
- 'merchantId' => $this->config->getValue('merchant_id'),
- ];
- $clientConfig = [
- 'button' => [
- self::IN_CONTEXT_BUTTON_ID
- ],
- 'getTokenUrl' => $this->urlBuilder->getUrl('paypal/express/getTokenData'),
- 'onAuthorizeUrl' => $this->urlBuilder->getUrl('paypal/express/onAuthorization'),
- 'onCancelUrl' => $this->urlBuilder->getUrl('paypal/express/cancel')
- ];
- $clientConfig = array_replace_recursive($clientConfig, $this->smartButtonConfig->getConfig('checkout'));
- $config['payment']['paypalExpress']['inContextConfig']['clientConfig'] = $clientConfig;
- }
- foreach ($this->methodCodes as $code) {
- if ($this->methods[$code]->isAvailable()) {
- $config['payment']['paypalExpress']['redirectUrl'][$code] = $this->getMethodRedirectUrl($code);
- $config['payment']['paypalExpress']['billingAgreementCode'][$code] =
- $this->getBillingAgreementCode($code);
- }
- }
- return $config;
- }
- /**
- * Return setting value for in context checkout
- *
- * @return bool
- */
- protected function isInContextCheckout()
- {
- $this->config->setMethod(Config::METHOD_EXPRESS);
- return (bool)(int) $this->config->getValue('in_context');
- }
- /**
- * Return redirect URL for method
- *
- * @param string $code
- * @return mixed
- */
- protected function getMethodRedirectUrl($code)
- {
- return $this->methods[$code]->getCheckoutRedirectUrl();
- }
- /**
- * Return billing agreement code for method
- *
- * @param string $code
- * @return null|string
- */
- protected function getBillingAgreementCode($code)
- {
- $customerId = $this->currentCustomer->getCustomerId();
- $this->config->setMethod($code);
- return $this->paypalHelper->shouldAskToCreateBillingAgreement($this->config, $customerId)
- ? Express\Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT : null;
- }
- }
|