/** * @param Observer $observer * @return void */ public function execute(Observer $observer) { $dataObject = $this->readDataArgument($observer); $additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA); if (!is_array($additionalData) || !isset($additionalData[PaymentTokenInterface::PUBLIC_HASH])) { return; } $tokenPublicHash = $additionalData[PaymentTokenInterface::PUBLIC_HASH]; if ($tokenPublicHash === null) { return; } /** @var Payment $paymentModel */ $paymentModel = $this->readPaymentModelArgument($observer); if (!$paymentModel instanceof Payment) { return; } $quote = $paymentModel->getQuote(); $customerId = $quote->getCustomer()->getId(); if ($customerId === null) { return; } $paymentToken = $this->paymentTokenManagement->getByPublicHash($tokenPublicHash, $customerId); if ($paymentToken === null) { return; } $paymentModel->setAdditionalInformation(Vault::TOKEN_METADATA_KEY, [PaymentTokenInterface::CUSTOMER_ID => $customerId, PaymentTokenInterface::PUBLIC_HASH => $tokenPublicHash]); }
/** * @inheritdoc * @throws \Exception */ public function execute(array $commandSubject) { $publicHash = $this->subjectReader->readPublicHash($commandSubject); $customerId = $this->subjectReader->readCustomerId($commandSubject); $paymentToken = $this->tokenManagement->getByPublicHash($publicHash, $customerId); if (!$paymentToken) { throw new Exception('No available payment tokens'); } $data = $this->adapter->createNonce($paymentToken->getGatewayToken()); $result = $this->responseValidator->validate(['response' => ['object' => $data]]); if (!$result->isValid()) { throw new Exception(__(implode("\n", $result->getFailsDescription()))); } return $this->resultFactory->create(['array' => ['paymentMethodNonce' => $data->paymentMethodNonce->nonce]]); }
/** * @param OrderPaymentInterface $orderPayment * @return void */ private function attachTokenExtensionAttribute(OrderPaymentInterface $orderPayment) { $additionalInformation = $orderPayment->getAdditionalInformation(); $tokenData = isset($additionalInformation[self::TOKEN_METADATA_KEY]) ? $additionalInformation[self::TOKEN_METADATA_KEY] : null; if ($tokenData === null) { throw new \LogicException("Token metadata should be defined"); } $customerId = $tokenData[PaymentTokenInterface::CUSTOMER_ID]; $publicHash = $tokenData[PaymentTokenInterface::PUBLIC_HASH]; $paymentToken = $this->tokenManagement->getByPublicHash($publicHash, $customerId); if ($paymentToken === null) { throw new \LogicException("No token found"); } $extensionAttributes = $this->getPaymentExtensionAttributes($orderPayment); $extensionAttributes->setVaultPaymentToken($paymentToken); }