![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-paypal/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Paypal\Model; use Magento\Quote\Api\Data\PaymentInterface; use Magento\Sales\Model\Order\Payment; /** * PayPal Direct Module * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Direct extends \Magento\Payment\Model\Method\Cc { /** * @var string */ protected $_code = \Magento\Paypal\Model\Config::METHOD_WPP_DIRECT; /** * @var string */ protected $_infoBlockType = \Magento\Paypal\Block\Payment\Info::class; /** * Availability option * * @var bool */ protected $_isGateway = true; /** * Availability option * * @var bool */ protected $_canAuthorize = true; /** * Availability option * * @var bool */ protected $_canCapture = true; /** * Availability option * * @var bool */ protected $_canCapturePartial = true; /** * Availability option * * @var bool */ protected $_canRefund = true; /** * Availability option * * @var bool */ protected $_canRefundInvoicePartial = true; /** * Availability option * * @var bool */ protected $_canVoid = true; /** * Availability option * * @var bool */ protected $_canUseInternal = true; /** * Availability option * * @var bool */ protected $_canUseCheckout = true; /** * Availability option * * @var bool */ protected $_canSaveCc = false; /** * @var bool */ protected $_canFetchTransactionInfo = true; /** * Availability option * * @var bool */ protected $_canReviewPayment = true; /** * Website Payments Pro instance * * @var \Magento\Paypal\Model\Pro */ protected $_pro; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; /** * @var \Magento\Framework\UrlInterface */ protected $_urlBuilder; /** * @var \Magento\Framework\App\RequestInterface */ protected $_requestHttp; /** * @var \Magento\Paypal\Model\CartFactory */ protected $_cartFactory; /** * @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 \Magento\Framework\Module\ModuleListInterface $moduleList * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param ProFactory $proFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\UrlInterface $urlBuilder * @param \Magento\Framework\App\RequestInterface $requestHttp * @param CartFactory $cartFactory * @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, \Magento\Framework\Module\ModuleListInterface $moduleList, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Paypal\Model\ProFactory $proFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\UrlInterface $urlBuilder, \Magento\Framework\App\RequestInterface $requestHttp, \Magento\Paypal\Model\CartFactory $cartFactory, \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, $moduleList, $localeDate, $resource, $resourceCollection, $data ); $this->_storeManager = $storeManager; $this->_urlBuilder = $urlBuilder; $this->_requestHttp = $requestHttp; $this->_cartFactory = $cartFactory; $proInstance = array_shift($data); if ($proInstance && $proInstance instanceof \Magento\Paypal\Model\Pro) { $this->_pro = $proInstance; } else { $this->_pro = $proFactory->create(); } $this->_pro->setMethod($this->_code); } /** * Store setter. Also updates store ID in config object * * @param \Magento\Store\Model\Store|int $store * @return $this */ public function setStore($store) { $this->setData('store', $store); if (null === $store) { $store = $this->_storeManager->getStore()->getId(); } $this->_pro->getConfig()->setStoreId(is_object($store) ? $store->getId() : $store); return $this; } /** * Whether method is available for specified currency * * @param string $currencyCode * @return bool */ public function canUseForCurrency($currencyCode) { return $this->_pro->getConfig()->isCurrencyCodeSupported($currencyCode); } /** * Payment action getter compatible with payment model * * @see \Magento\Sales\Model\Payment::place() * @return string */ public function getConfigPaymentAction() { return $this->_pro->getConfig()->getPaymentAction(); } /** * Return available CC types for gateway based on merchant country * * @return string */ public function getAllowedCcTypes() { $ccTypes = explode(',', $this->_pro->getConfig()->getValue('cctypes') ?? ''); $country = $this->_pro->getConfig()->getMerchantCountry(); if ($country == 'GB') { $ccTypes = array_intersect(['SM', 'SO', 'MC', 'DI', 'VI'], $ccTypes); } elseif ($country == 'CA') { $ccTypes = array_intersect(['MC', 'VI'], $ccTypes); } return implode(',', $ccTypes); } /** * Check whether payment method can be used * * @param \Magento\Quote\Api\Data\CartInterface|\Magento\Quote\Model\Quote|null $quote * @return bool */ public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null) { return parent::isAvailable($quote) && $this->_pro->getConfig()->isMethodAvailable(); } /** * Custom getter for payment configuration * * @param string $field * @param int|null $storeId * @return null|string * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getConfigData($field, $storeId = null) { $value = null; switch ($field) { case 'cctypes': $value = $this->getAllowedCcTypes(); break; case 'order_place_redirect_url': $value = $this->getOrderPlaceRedirectUrl(); break; default: $value = $this->_pro->getConfig()->getValue($field); } return $value; } /** * Authorize payment * * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface|Payment $payment * @param float $amount * @return $this */ public function authorize(\Magento\Payment\Model\InfoInterface $payment, $amount) { return $this->_placeOrder($payment, $amount); } /** * Void payment * * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface|Payment $payment * @return $this * @throws \Magento\Framework\Exception\LocalizedException */ public function void(\Magento\Payment\Model\InfoInterface $payment) { $this->_pro->void($payment); return $this; } /** * Capture payment * * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface|Payment $payment * @param float $amount * @return $this */ public function capture(\Magento\Payment\Model\InfoInterface $payment, $amount) { if (false === $this->_pro->capture($payment, $amount)) { $this->_placeOrder($payment, $amount); } return $this; } /** * Refund capture * * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface|Payment $payment * @param float $amount * @return $this * @throws \Magento\Framework\Exception\LocalizedException */ public function refund(\Magento\Payment\Model\InfoInterface $payment, $amount) { $this->_pro->refund($payment, $amount); return $this; } /** * Cancel payment * * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface|Payment $payment * @return $this */ public function cancel(\Magento\Payment\Model\InfoInterface $payment) { $this->void($payment); return $this; } /** * Whether payment can be reviewed * * @return bool */ public function canReviewPayment() { return parent::canReviewPayment() && $this->_pro->canReviewPayment($this->getInfoInstance()); } /** * Attempt to accept a pending payment * * @param \Magento\Payment\Model\Info|Payment $payment * @return bool */ public function acceptPayment(\Magento\Payment\Model\InfoInterface $payment) { parent::acceptPayment($payment); return $this->_pro->reviewPayment($payment, \Magento\Paypal\Model\Pro::PAYMENT_REVIEW_ACCEPT); } /** * Attempt to deny a pending payment * * @param \Magento\Payment\Model\Info|PaymentInterface $payment * @return bool */ public function denyPayment(\Magento\Payment\Model\InfoInterface $payment) { parent::denyPayment($payment); return $this->_pro->reviewPayment($payment, \Magento\Paypal\Model\Pro::PAYMENT_REVIEW_DENY); } /** * Fetch transaction details info * * @param \Magento\Payment\Model\InfoInterface $payment * @param string $transactionId * @return array */ public function fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId) { return $this->_pro->fetchTransactionInfo($payment, $transactionId); } /** * Place an order with authorization or capture action * * @param Payment $payment * @param float $amount * @return $this */ protected function _placeOrder(Payment $payment, $amount) { $order = $payment->getOrder(); $api = $this->_pro->getApi()->setPaymentAction( $this->_pro->getConfig()->getValue('paymentAction') )->setIpAddress( $this->_requestHttp->getClientIp(false) )->setAmount( $amount )->setCurrencyCode( $order->getBaseCurrencyCode() )->setInvNum( $order->getIncrementId() )->setEmail( $order->getCustomerEmail() )->setNotifyUrl( $this->_urlBuilder->getUrl('paypal/ipn/') )->setCreditCardType( $payment->getCcType() )->setCreditCardNumber( $payment->getCcNumber() )->setCreditCardExpirationDate( $this->_getFormattedCcExpirationDate($payment->getCcExpMonth(), $payment->getCcExpYear()) )->setCreditCardCvv2( $payment->getCcCid() ); // add shipping and billing addresses if ($order->getIsVirtual()) { $api->setAddress($order->getBillingAddress())->setSuppressShipping(true); } else { $api->setAddress($order->getShippingAddress()); $api->setBillingAddress($order->getBillingAddress()); } // add line items $cart = $this->_cartFactory->create(['salesModel' => $order]); $api->setPaypalCart($cart)->setIsLineItemsEnabled($this->_pro->getConfig()->getValue('lineItemsEnabled')); // call api and import transaction and other payment information $api->callDoDirectPayment(); $this->_importResultToPayment($api, $payment); try { $api->callGetTransactionDetails(); } catch (\Magento\Framework\Exception\LocalizedException $e) { // if we receive errors, but DoDirectPayment response is Success, then set Pending status for transaction $payment->setIsTransactionPending(true); } $this->_importResultToPayment($api, $payment); return $this; } /** * Format credit card expiration date based on month and year values. Format: mmyyyy * * @param string|int $month * @param string|int $year * @return string */ protected function _getFormattedCcExpirationDate($month, $year) { return sprintf('%02d%02d', $month, $year); } /** * Import direct payment results to payment * * @param \Magento\Paypal\Model\Api\Nvp $api * @param Payment $payment * @return void */ protected function _importResultToPayment($api, $payment) { $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0); $this->_pro->importPaymentInfo($api, $payment); } /** * Check void availability * * @return bool * @internal param \Magento\Framework\DataObject $payment */ public function canVoid() { return $this->_canVoid; } }