/**
  * 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;
 }
 /**
  * @param PaymentTokenInterface $token
  * @param OrderPaymentInterface $payment
  * @return bool
  */
 public function saveTokenWithPaymentLink(PaymentTokenInterface $token, OrderPaymentInterface $payment)
 {
     $tokenDuplicate = $this->getByPublicHash($token->getPublicHash(), $token->getCustomerId());
     if (!empty($tokenDuplicate)) {
         if ($token->getIsVisible() || $tokenDuplicate->getIsVisible()) {
             $token->setEntityId($tokenDuplicate->getEntityId());
             $token->setIsVisible(true);
         } elseif ($token->getIsVisible() === $tokenDuplicate->getIsVisible()) {
             $token->setEntityId($tokenDuplicate->getEntityId());
         } else {
             $token->setPublicHash($this->encryptor->getHash($token->getPublicHash() . $token->getGatewayToken()));
         }
     }
     $this->paymentTokenRepository->save($token);
     $result = $this->addLinkToOrderPayment($token->getEntityId(), $payment->getEntityId());
     return $result;
 }
 /**
  * @param PaymentTokenInterface $token
  * @param OrderPaymentInterface $payment
  * @return bool
  */
 public function saveTokenWithPaymentLink(PaymentTokenInterface $token, OrderPaymentInterface $payment)
 {
     $tokenDuplicate = $this->getByPublicHash($token->getPublicHash(), $token->getCustomerId());
     if (!empty($tokenDuplicate)) {
         $token->setEntityId($tokenDuplicate->getEntityId());
         $token->setIsVisible($token->getIsActive());
     }
     $this->paymentTokenRepository->save($token);
     $result = $this->addLinkToOrderPayment($token->getEntityId(), $payment->getEntityId());
     return $result;
 }