jsonFactory = $jsonFactory; $this->fkValidator = $fkValidator; $this->tokenRepository = $tokenRepository; $this->paymentTokenManagement = $paymentTokenManagement; $this->errorsMap = [ self::WRONG_TOKEN => __('No token found.'), self::WRONG_REQUEST => __('Wrong request.'), self::ACTION_EXCEPTION => __('Deletion failure. Please try again.') ]; } /** * Dispatch request * * @return ResultInterface|ResponseInterface * @throws NotFoundException */ public function execute() { $request = $this->_request; if (!$request instanceof Http) { return $this->createErrorResponse(self::WRONG_REQUEST); } if (!$this->fkValidator->validate($request)) { return $this->createErrorResponse(self::WRONG_REQUEST); } $paymentToken = $this->getPaymentToken($request); if ($paymentToken === null) { return $this->createErrorResponse(self::WRONG_TOKEN); } try { $this->tokenRepository->delete($paymentToken); } catch (\Exception $e) { return $this->createErrorResponse(self::ACTION_EXCEPTION); } return $this->createSuccessMessage(); } /** * @param int $errorCode * @return ResponseInterface */ private function createErrorResponse($errorCode) { $this->messageManager->addErrorMessage( $this->errorsMap[$errorCode] ); return $this->_redirect('vault/cards/listaction'); } /** * @return ResponseInterface */ private function createSuccessMessage() { $this->messageManager->addSuccessMessage( __('Stored Payment Method was successfully removed') ); return $this->_redirect('vault/cards/listaction'); } /** * @param Http $request * @return PaymentTokenInterface|null */ private function getPaymentToken(Http $request) { $publicHash = $request->getPostValue(PaymentTokenInterface::PUBLIC_HASH); if ($publicHash === null) { return null; } return $this->paymentTokenManagement->getByPublicHash( $publicHash, $this->customerSession->getCustomerId() ); } }