AuthorizationCommand.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Gateway\Payflowpro\Command;
  7. use Magento\Framework\Exception\LocalizedException;
  8. use Magento\Framework\Exception\State\InvalidTransitionException;
  9. use Magento\Payment\Gateway\Command;
  10. use Magento\Payment\Gateway\Command\ResultInterface;
  11. use Magento\Payment\Gateway\CommandInterface;
  12. use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
  13. use Magento\Payment\Helper\Formatter;
  14. use Magento\Paypal\Model\Payflow\Transparent;
  15. class AuthorizationCommand implements CommandInterface
  16. {
  17. use Formatter;
  18. /**
  19. * @var Transparent
  20. */
  21. private $payflowFacade;
  22. /**
  23. * AuthorizationCommand constructor.
  24. * @param Transparent $payflowFacade
  25. */
  26. public function __construct(
  27. Transparent $payflowFacade
  28. ) {
  29. $this->payflowFacade = $payflowFacade;
  30. }
  31. /**
  32. * Executes command basing on business object
  33. *
  34. * @param array $commandSubject
  35. * @return ResultInterface|null
  36. * @throws LocalizedException
  37. * @throws InvalidTransitionException
  38. */
  39. public function execute(array $commandSubject)
  40. {
  41. /** @var double $amount */
  42. $amount = $commandSubject['amount'];
  43. /** @var PaymentDataObjectInterface $paymentDO */
  44. $paymentDO = $commandSubject['payment'];
  45. $payment = $paymentDO->getPayment();
  46. $storeId = $paymentDO->getOrder()->getStoreId();
  47. $this->payflowFacade->setStore($storeId);
  48. $request = $this->payflowFacade->buildBasicRequest();
  49. /** @var \Magento\Sales\Model\Order $order */
  50. $order = $payment->getOrder();
  51. $this->payflowFacade->addRequestOrderInfo($request, $order);
  52. $request = $this->payflowFacade->fillCustomerContacts($order, $request);
  53. /** @var \Magento\Vault\Api\Data\PaymentTokenInterface $token */
  54. $token = $payment->getExtensionAttributes()->getVaultPaymentToken();
  55. $request->setData('trxtype', Transparent::TRXTYPE_AUTH_ONLY);
  56. $request->setData('origid', $token->getGatewayToken());
  57. $request->setData('amt', $this->formatPrice($amount));
  58. $response = $this->payflowFacade->postRequest($request, $this->payflowFacade->getConfig());
  59. $this->payflowFacade->processErrors($response);
  60. try {
  61. $this->payflowFacade->getResponceValidator()->validate($response, $this->payflowFacade);
  62. } catch (LocalizedException $exception) {
  63. $payment->setParentTransactionId($response->getData(Transparent::PNREF));
  64. $this->payflowFacade->void($payment);
  65. throw new LocalizedException(__("The payment couldn't be processed at this time. Please try again later."));
  66. }
  67. $this->payflowFacade->setTransStatus($payment, $response);
  68. return $this;
  69. }
  70. }