Pro.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Model\Payflow;
  7. /**
  8. * PayPal Website Payments Pro (Payflow Edition) implementation for payment method instances
  9. * This model was created because right now PayPal Direct and PayPal Express payment
  10. * (Payflow Edition) methods cannot have same abstract
  11. */
  12. class Pro extends \Magento\Paypal\Model\Pro
  13. {
  14. /**
  15. * Api model type
  16. *
  17. * @var string
  18. */
  19. protected $_apiType = \Magento\Paypal\Model\Api\PayflowNvp::class;
  20. /**
  21. * Config model type
  22. *
  23. * @var string
  24. */
  25. protected $_configType = \Magento\Paypal\Model\Config::class;
  26. /**
  27. * Payflow trx_id key in transaction info
  28. */
  29. const TRANSPORT_PAYFLOW_TXN_ID = 'payflow_trxid';
  30. /**
  31. * Refund a capture transaction
  32. *
  33. * @param \Magento\Framework\DataObject $payment
  34. * @param float $amount
  35. * @return void
  36. */
  37. public function refund(\Magento\Framework\DataObject $payment, $amount)
  38. {
  39. $captureTxnId = $this->_getParentTransactionId($payment);
  40. if ($captureTxnId) {
  41. $api = $this->getApi();
  42. $api->setAuthorizationId($captureTxnId);
  43. }
  44. parent::refund($payment, $amount);
  45. }
  46. /**
  47. * Is capture request needed on this transaction
  48. *
  49. * @return true
  50. */
  51. protected function _isCaptureNeeded()
  52. {
  53. return true;
  54. }
  55. /**
  56. * Get payflow transaction id from parent transaction
  57. *
  58. * @param \Magento\Framework\DataObject $payment
  59. * @return string
  60. */
  61. protected function _getParentTransactionId(\Magento\Framework\DataObject $payment)
  62. {
  63. if ($payment->getParentTransactionId()) {
  64. return $this->transactionRepository->getByTransactionId(
  65. $payment->getParentTransactionId(),
  66. $payment->getId(),
  67. $payment->getOrder()->getId()
  68. )->getAdditionalInformation(
  69. self::TRANSPORT_PAYFLOW_TXN_ID
  70. );
  71. }
  72. return $payment->getParentTransactionId();
  73. }
  74. /**
  75. * Import capture results to payment
  76. *
  77. * @param \Magento\Paypal\Model\Api\Nvp $api
  78. * @param \Magento\Sales\Model\Order\Payment $payment
  79. * @return void
  80. */
  81. protected function _importCaptureResultToPayment($api, $payment)
  82. {
  83. $payment->setTransactionId(
  84. $api->getPaypalTransactionId()
  85. )->setIsTransactionClosed(
  86. false
  87. )->setTransactionAdditionalInfo(
  88. self::TRANSPORT_PAYFLOW_TXN_ID,
  89. $api->getTransactionId()
  90. );
  91. $payment->setPreparedMessage(__('Payflow PNREF: #%1.', $api->getTransactionId()));
  92. $this->_infoFactory->create()->importToPayment($api, $payment);
  93. }
  94. /**
  95. * Fetch transaction details info method does not exists in Payflow
  96. *
  97. * @param \Magento\Payment\Model\InfoInterface $payment
  98. * @param string $transactionId
  99. * @throws \Magento\Framework\Exception\LocalizedException
  100. * @return void
  101. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  102. */
  103. public function fetchTransactionInfo(\Magento\Payment\Model\InfoInterface $payment, $transactionId)
  104. {
  105. throw new \Magento\Framework\Exception\LocalizedException(
  106. __('Unable to fetch transaction details.')
  107. );
  108. }
  109. /**
  110. * Import refund results to payment
  111. *
  112. * @param \Magento\Paypal\Model\Api\Nvp $api
  113. * @param \Magento\Sales\Model\Order\Payment $payment
  114. * @param bool $canRefundMore
  115. * @return void
  116. */
  117. protected function _importRefundResultToPayment($api, $payment, $canRefundMore)
  118. {
  119. $payment->setTransactionId(
  120. $api->getPaypalTransactionId()
  121. )->setIsTransactionClosed(
  122. 1 // refund initiated by merchant
  123. )->setShouldCloseParentTransaction(
  124. !$canRefundMore
  125. )->setTransactionAdditionalInfo(
  126. self::TRANSPORT_PAYFLOW_TXN_ID,
  127. $api->getTransactionId()
  128. );
  129. $payment->setPreparedMessage(__('Payflow PNREF: #%1.', $api->getTransactionId()));
  130. $this->_infoFactory->create()->importToPayment($api, $payment);
  131. }
  132. }