GetPaymentNonceCommand.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Gateway\Command;
  7. use Magento\Braintree\Gateway\SubjectReader;
  8. use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator;
  9. use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
  10. use Magento\Payment\Gateway\Command\Result\ArrayResultFactory;
  11. use Magento\Payment\Gateway\CommandInterface;
  12. use Magento\Vault\Api\PaymentTokenManagementInterface;
  13. /**
  14. * Class GetPaymentNonceCommand
  15. */
  16. class GetPaymentNonceCommand implements CommandInterface
  17. {
  18. /**
  19. * @var PaymentTokenManagementInterface
  20. */
  21. private $tokenManagement;
  22. /**
  23. * @var BraintreeAdapterFactory
  24. */
  25. private $adapterFactory;
  26. /**
  27. * @var ArrayResultFactory
  28. */
  29. private $resultFactory;
  30. /**
  31. * @var SubjectReader
  32. */
  33. private $subjectReader;
  34. /**
  35. * @var PaymentNonceResponseValidator
  36. */
  37. private $responseValidator;
  38. /**
  39. * @param PaymentTokenManagementInterface $tokenManagement
  40. * @param BraintreeAdapterFactory $adapterFactory
  41. * @param ArrayResultFactory $resultFactory
  42. * @param SubjectReader $subjectReader
  43. * @param PaymentNonceResponseValidator $responseValidator
  44. */
  45. public function __construct(
  46. PaymentTokenManagementInterface $tokenManagement,
  47. BraintreeAdapterFactory $adapterFactory,
  48. ArrayResultFactory $resultFactory,
  49. SubjectReader $subjectReader,
  50. PaymentNonceResponseValidator $responseValidator
  51. ) {
  52. $this->tokenManagement = $tokenManagement;
  53. $this->adapterFactory = $adapterFactory;
  54. $this->resultFactory = $resultFactory;
  55. $this->subjectReader = $subjectReader;
  56. $this->responseValidator = $responseValidator;
  57. }
  58. /**
  59. * @inheritdoc
  60. * @throws \Exception
  61. */
  62. public function execute(array $commandSubject)
  63. {
  64. $publicHash = $this->subjectReader->readPublicHash($commandSubject);
  65. $customerId = $this->subjectReader->readCustomerId($commandSubject);
  66. $paymentToken = $this->tokenManagement->getByPublicHash($publicHash, $customerId);
  67. if (!$paymentToken) {
  68. throw new \Exception('No available payment tokens');
  69. }
  70. $storeId = $this->subjectReader->readStoreId($commandSubject);
  71. $data = $this->adapterFactory->create($storeId)
  72. ->createNonce($paymentToken->getGatewayToken());
  73. $result = $this->responseValidator->validate(['response' => ['object' => $data]]);
  74. if (!$result->isValid()) {
  75. throw new \Exception(__(implode("\n", $result->getFailsDescription())));
  76. }
  77. return $this->resultFactory->create(['array' => ['paymentMethodNonce' => $data->paymentMethodNonce->nonce]]);
  78. }
  79. }