PaymentTokenAssigner.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Vault\Observer;
  7. use Magento\Framework\Event\Observer;
  8. use Magento\Payment\Observer\AbstractDataAssignObserver;
  9. use Magento\Quote\Api\Data\PaymentInterface;
  10. use Magento\Quote\Model\Quote\Payment;
  11. use Magento\Vault\Api\Data\PaymentTokenInterface;
  12. use Magento\Vault\Api\PaymentTokenManagementInterface;
  13. use Magento\Vault\Model\Method\Vault;
  14. class PaymentTokenAssigner extends AbstractDataAssignObserver
  15. {
  16. /**
  17. * @var PaymentTokenManagementInterface
  18. */
  19. private $paymentTokenManagement;
  20. /**
  21. * PaymentTokenAssigner constructor.
  22. * @param PaymentTokenManagementInterface $paymentTokenManagement
  23. */
  24. public function __construct(
  25. PaymentTokenManagementInterface $paymentTokenManagement
  26. ) {
  27. $this->paymentTokenManagement = $paymentTokenManagement;
  28. }
  29. /**
  30. * @param Observer $observer
  31. * @return void
  32. */
  33. public function execute(Observer $observer)
  34. {
  35. $dataObject = $this->readDataArgument($observer);
  36. $additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
  37. if (!is_array($additionalData) || !isset($additionalData[PaymentTokenInterface::PUBLIC_HASH])) {
  38. return;
  39. }
  40. $tokenPublicHash = $additionalData[PaymentTokenInterface::PUBLIC_HASH];
  41. if ($tokenPublicHash === null) {
  42. return;
  43. }
  44. /** @var Payment $paymentModel */
  45. $paymentModel = $this->readPaymentModelArgument($observer);
  46. if (!$paymentModel instanceof Payment) {
  47. return;
  48. }
  49. $quote = $paymentModel->getQuote();
  50. $customerId = (int) $quote->getCustomer()->getId();
  51. $paymentToken = $this->paymentTokenManagement->getByPublicHash($tokenPublicHash, $customerId);
  52. if ($paymentToken === null) {
  53. return;
  54. }
  55. $paymentModel->setAdditionalInformation(
  56. [
  57. PaymentTokenInterface::CUSTOMER_ID => $customerId,
  58. PaymentTokenInterface::PUBLIC_HASH => $tokenPublicHash
  59. ]
  60. );
  61. }
  62. }