123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Model;
- use Magento\Sales\Model\Order\Payment\Transaction;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class PayflowExpress extends \Magento\Paypal\Model\Express
- {
- /**
- * @var string
- */
- protected $_code = Config::METHOD_WPP_PE_EXPRESS;
- /**
- * @var string
- */
- protected $_formBlockType = \Magento\Paypal\Block\PayflowExpress\Form::class;
- /**
- * Express Checkout payment method instance
- *
- * @var Express
- */
- protected $_ecInstance = null;
- /**
- * @var InfoFactory
- */
- protected $_paypalInfoFactory;
- /**
- * Availability option
- *
- * @var bool
- */
- protected $_canFetchTransactionInfo = false;
- /**
- * Payment Method feature
- *
- * @var bool
- */
- protected $_canReviewPayment = false;
- /**
- * @param \Magento\Framework\Model\Context $context
- * @param \Magento\Framework\Registry $registry
- * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
- * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
- * @param \Magento\Payment\Helper\Data $paymentData
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
- * @param \Magento\Payment\Model\Method\Logger $logger
- * @param ProFactory $proFactory
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\Framework\UrlInterface $urlBuilder
- * @param CartFactory $cartFactory
- * @param \Magento\Checkout\Model\Session $checkoutSession
- * @param \Magento\Framework\Exception\LocalizedExceptionFactory $exception
- * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
- * @param Transaction\BuilderInterface $transactionBuilder
- * @param InfoFactory $paypalInfoFactory
- * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
- * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
- * @param array $data
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Framework\Model\Context $context,
- \Magento\Framework\Registry $registry,
- \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
- \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
- \Magento\Payment\Helper\Data $paymentData,
- \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
- \Magento\Payment\Model\Method\Logger $logger,
- ProFactory $proFactory,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\Framework\UrlInterface $urlBuilder,
- CartFactory $cartFactory,
- \Magento\Checkout\Model\Session $checkoutSession,
- \Magento\Framework\Exception\LocalizedExceptionFactory $exception,
- \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
- \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
- InfoFactory $paypalInfoFactory,
- \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
- \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
- array $data = []
- ) {
- parent::__construct(
- $context,
- $registry,
- $extensionFactory,
- $customAttributeFactory,
- $paymentData,
- $scopeConfig,
- $logger,
- $proFactory,
- $storeManager,
- $urlBuilder,
- $cartFactory,
- $checkoutSession,
- $exception,
- $transactionRepository,
- $transactionBuilder,
- $resource,
- $resourceCollection,
- $data
- );
- $this->_paypalInfoFactory = $paypalInfoFactory;
- }
- /**
- * EC PE won't be available if the EC is available
- *
- * @param \Magento\Quote\Api\Data\CartInterface|\Magento\Quote\Model\Quote|null $quote
- * @return bool
- */
- public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null)
- {
- if (!parent::isAvailable($quote)) {
- return false;
- }
- if (!$this->_ecInstance) {
- $this->_ecInstance = $this->_paymentData->getMethodInstance(
- Config::METHOD_WPP_EXPRESS
- );
- }
- if ($quote) {
- $this->_ecInstance->setStore($quote->getStoreId());
- }
- return !$this->_ecInstance->isAvailable();
- }
- /**
- * Import payment info to payment
- *
- * @param Api\Nvp $api
- * @param \Magento\Sales\Model\Order\Payment $payment
- * @return void
- */
- protected function _importToPayment($api, $payment)
- {
- $payment->setTransactionId(
- $api->getPaypalTransactionId()
- )->setIsTransactionClosed(
- 0
- )->setAdditionalInformation(
- Express\Checkout::PAYMENT_INFO_TRANSPORT_REDIRECT,
- $api->getRedirectRequired() || $api->getRedirectRequested()
- )->setIsTransactionPending(
- $api->getIsPaymentPending()
- )->setTransactionAdditionalInfo(
- Payflow\Pro::TRANSPORT_PAYFLOW_TXN_ID,
- $api->getTransactionId()
- );
- $payment->setPreparedMessage(__('Payflow PNREF: #%1.', $api->getTransactionId()));
- $this->_paypalInfoFactory->create()->importToPayment($api, $payment);
- }
- /**
- * Checkout redirect URL getter for onepage checkout (hardcode)
- *
- * @see \Magento\Checkout\Controller\Onepage::savePaymentAction()
- * @see \Magento\Quote\Model\Quote\Payment::getCheckoutRedirectUrl()
- * @return string
- */
- public function getCheckoutRedirectUrl()
- {
- return $this->_urlBuilder->getUrl('paypal/payflowexpress/start');
- }
- /**
- * Check refund availability.
- * The main factor is that the last capture transaction exists and has an Payflow\Pro::TRANSPORT_PAYFLOW_TXN_ID in
- * additional information(needed to perform online refund. Requirement of the Payflow gateway)
- *
- * @return bool
- */
- public function canRefund()
- {
- /** @var \Magento\Sales\Model\Order\Payment $payment */
- $payment = $this->getInfoInstance();
- // we need the last capture transaction was made
- $captureTransaction = $this->transactionRepository->getByTransactionType(
- Transaction::TYPE_CAPTURE,
- $payment->getId(),
- $payment->getOrder()->getId()
- );
- return $captureTransaction && $captureTransaction->getAdditionalInformation(
- Payflow\Pro::TRANSPORT_PAYFLOW_TXN_ID
- ) && $this->_canRefund;
- }
- }
|