Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AfterPaymentSaveObserver.php
Go to the documentation of this file.
1 <?php
8 
12 use Magento\Sales\Api\Data\OrderPaymentExtensionInterface;
17 
22 {
23  const PAYMENT_OBJECT_DATA_KEY = 'payment';
24 
29 
33  protected $encryptor;
34 
39  public function __construct(
42  ) {
43  $this->paymentTokenManagement = $paymentTokenManagement;
44  $this->encryptor = $encryptor;
45  }
46 
53  public function execute(Observer $observer)
54  {
56  $payment = $observer->getDataByKey(self::PAYMENT_OBJECT_DATA_KEY);
57  $extensionAttributes = $payment->getExtensionAttributes();
58 
59  $paymentToken = $this->getPaymentToken($extensionAttributes);
60  if ($paymentToken === null) {
61  return $this;
62  }
63 
64  if ($paymentToken->getEntityId() !== null) {
65  $this->paymentTokenManagement->addLinkToOrderPayment(
66  $paymentToken->getEntityId(),
67  $payment->getEntityId()
68  );
69 
70  return $this;
71  }
72 
73  $order = $payment->getOrder();
74 
75  $paymentToken->setCustomerId($order->getCustomerId());
76  $paymentToken->setIsActive(true);
77  $paymentToken->setPaymentMethodCode($payment->getMethod());
78 
79  $additionalInformation = $payment->getAdditionalInformation();
80  if (isset($additionalInformation[VaultConfigProvider::IS_ACTIVE_CODE])) {
81  $paymentToken->setIsVisible(
82  (bool) (int) $additionalInformation[VaultConfigProvider::IS_ACTIVE_CODE]
83  );
84  }
85 
86  $paymentToken->setPublicHash($this->generatePublicHash($paymentToken));
87 
88  $this->paymentTokenManagement->saveTokenWithPaymentLink($paymentToken, $payment);
89 
90  $extensionAttributes->setVaultPaymentToken($paymentToken);
91 
92  return $this;
93  }
94 
102  {
103  $hashKey = $paymentToken->getGatewayToken();
104  if ($paymentToken->getCustomerId()) {
105  $hashKey = $paymentToken->getCustomerId();
106  }
107 
108  $hashKey .= $paymentToken->getPaymentMethodCode()
109  . $paymentToken->getType()
110  . $paymentToken->getTokenDetails();
111 
112  return $this->encryptor->getHash($hashKey);
113  }
114 
121  protected function getPaymentToken(OrderPaymentExtensionInterface $extensionAttributes = null)
122  {
123  if (null === $extensionAttributes) {
124  return null;
125  }
126 
128  $paymentToken = $extensionAttributes->getVaultPaymentToken();
129 
130  if (null === $paymentToken || empty($paymentToken->getGatewayToken())) {
131  return null;
132  }
133 
134  return $paymentToken;
135  }
136 }
__construct(PaymentTokenManagementInterface $paymentTokenManagement, EncryptorInterface $encryptor)
$order
Definition: order.php:55
$payment
Definition: order.php:17
$extensionAttributes
Definition: payment.php:22
generatePublicHash(PaymentTokenInterface $paymentToken)