RequestSecureToken.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Controller\Transparent;
  7. use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
  8. use Magento\Framework\App\Action\Context;
  9. use Magento\Framework\Controller\Result\Json;
  10. use Magento\Framework\Controller\Result\JsonFactory;
  11. use Magento\Framework\Controller\ResultInterface;
  12. use Magento\Framework\Session\Generic;
  13. use Magento\Framework\Session\SessionManager;
  14. use Magento\Paypal\Model\Payflow\Service\Request\SecureToken;
  15. use Magento\Paypal\Model\Payflow\Transparent;
  16. use Magento\Quote\Model\Quote;
  17. /**
  18. * Class RequestSecureToken
  19. *
  20. * @package Magento\Paypal\Controller\Transparent
  21. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  22. */
  23. class RequestSecureToken extends \Magento\Framework\App\Action\Action implements HttpPostActionInterface
  24. {
  25. /**
  26. * @var JsonFactory
  27. */
  28. protected $resultJsonFactory;
  29. /**
  30. * @var Generic
  31. */
  32. private $sessionTransparent;
  33. /**
  34. * @var SecureToken
  35. */
  36. private $secureTokenService;
  37. /**
  38. * @var SessionManager
  39. */
  40. private $sessionManager;
  41. /**
  42. * @var Transparent
  43. */
  44. private $transparent;
  45. /**
  46. * @param Context $context
  47. * @param JsonFactory $resultJsonFactory
  48. * @param Generic $sessionTransparent
  49. * @param SecureToken $secureTokenService
  50. * @param SessionManager $sessionManager
  51. * @param Transparent $transparent
  52. */
  53. public function __construct(
  54. Context $context,
  55. JsonFactory $resultJsonFactory,
  56. Generic $sessionTransparent,
  57. SecureToken $secureTokenService,
  58. SessionManager $sessionManager,
  59. Transparent $transparent
  60. ) {
  61. $this->resultJsonFactory = $resultJsonFactory;
  62. $this->sessionTransparent = $sessionTransparent;
  63. $this->secureTokenService = $secureTokenService;
  64. $this->sessionManager = $sessionManager;
  65. $this->transparent = $transparent;
  66. parent::__construct($context);
  67. }
  68. /**
  69. * Send request to PayfloPro gateway for get Secure Token
  70. *
  71. * @return ResultInterface
  72. */
  73. public function execute()
  74. {
  75. /** @var Quote $quote */
  76. $quote = $this->sessionManager->getQuote();
  77. if (!$quote || !$quote instanceof Quote) {
  78. return $this->getErrorResponse();
  79. }
  80. $this->sessionTransparent->setQuoteId($quote->getId());
  81. try {
  82. $token = $this->secureTokenService->requestToken($quote);
  83. if (!$token->getData('securetoken')) {
  84. throw new \LogicException();
  85. }
  86. return $this->resultJsonFactory->create()->setData(
  87. [
  88. $this->transparent->getCode() => ['fields' => $token->getData()],
  89. 'success' => true,
  90. 'error' => false
  91. ]
  92. );
  93. } catch (\Exception $e) {
  94. return $this->getErrorResponse();
  95. }
  96. }
  97. /**
  98. * Get error response.
  99. *
  100. * @return Json
  101. */
  102. private function getErrorResponse()
  103. {
  104. return $this->resultJsonFactory->create()->setData(
  105. [
  106. 'success' => false,
  107. 'error' => true,
  108. 'error_messages' => __('Your payment has been declined. Please try again.')
  109. ]
  110. );
  111. }
  112. }