AuthorizeOperation.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Payment\Operations;
  7. use Magento\Sales\Api\Data\OrderPaymentInterface;
  8. use Magento\Sales\Model\Order;
  9. use Magento\Sales\Model\Order\Payment;
  10. use Magento\Sales\Model\Order\Payment\Transaction;
  11. class AuthorizeOperation extends AbstractOperation
  12. {
  13. /**
  14. * Authorizes payment.
  15. *
  16. * @param OrderPaymentInterface $payment
  17. * @param bool $isOnline
  18. * @param string|float $amount
  19. * @return OrderPaymentInterface
  20. */
  21. public function authorize(OrderPaymentInterface $payment, $isOnline, $amount)
  22. {
  23. // check for authorization amount to be equal to grand total
  24. /**
  25. * @var $payment Payment
  26. */
  27. $payment->setShouldCloseParentTransaction(false);
  28. $isSameCurrency = $payment->isSameCurrency();
  29. if (!$isSameCurrency || !$payment->isCaptureFinal($amount)) {
  30. $payment->setIsFraudDetected(true);
  31. }
  32. // update totals
  33. $amount = $payment->formatAmount($amount, true);
  34. $payment->setBaseAmountAuthorized($amount);
  35. // do authorization
  36. $order = $payment->getOrder();
  37. if ($isOnline) {
  38. // invoke authorization on gateway
  39. $method = $payment->getMethodInstance();
  40. $method->setStore($order->getStoreId());
  41. $method->authorize($payment, $amount);
  42. }
  43. $message = $this->stateCommand->execute($payment, $amount, $order);
  44. // update transactions, order state and add comments
  45. $transaction = $payment->addTransaction(Transaction::TYPE_AUTH);
  46. $message = $payment->prependMessage($message);
  47. $payment->addTransactionCommentsToOrder($transaction, $message);
  48. return $payment;
  49. }
  50. }