/** * Load vault payment extension attribute to order/payment entity * * @param OrderPaymentInterface $payment * @param \Closure $proceed * @return OrderPaymentExtensionInterface */ public function aroundGetExtensionAttributes(OrderPaymentInterface $payment, \Closure $proceed) { /** @var OrderPaymentExtensionInterface $paymentExtension */ $paymentExtension = $proceed(); if ($paymentExtension === null) { $paymentExtension = $this->paymentExtensionFactory->create(); } $paymentToken = $paymentExtension->getVaultPaymentToken(); if ($paymentToken === null) { $paymentToken = $this->paymentTokenManagement->getByPaymentId($payment->getEntityId()); $paymentExtension->setVaultPaymentToken($paymentToken); $payment->setExtensionAttributes($paymentExtension); } return $paymentExtension; }
/** * @inheritdoc */ public function handle(array $handlingSubject, array $response) { $isActiveVaultModule = $this->vaultPayment->isActiveForPayment(ConfigProvider::CODE); if (!$isActiveVaultModule) { return; } $paymentDO = $this->subjectReader->readPayment($handlingSubject); $transaction = $this->subjectReader->readTransaction($response); $payment = $paymentDO->getPayment(); // add vault payment token entity to extension attributes $paymentToken = $this->getVaultPaymentToken($transaction, $payment); if (null !== $paymentToken) { $extensionAttributes = $payment->getExtensionAttributes(); if (null === $extensionAttributes) { $extensionAttributes = $this->paymentExtensionFactory->create(); $payment->setExtensionAttributes($extensionAttributes); } $extensionAttributes->setVaultPaymentToken($paymentToken); } }