123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Vault\Controller\Cards;
- use Magento\Customer\Model\Session;
- use Magento\Framework\App\Action\Context;
- use Magento\Framework\App\Request\Http;
- use Magento\Framework\App\ResponseInterface;
- use Magento\Framework\Controller\Result\JsonFactory;
- use Magento\Framework\Controller\ResultInterface;
- use Magento\Framework\Data\Form\FormKey\Validator;
- use Magento\Framework\Exception\NotFoundException;
- use Magento\Vault\Api\Data\PaymentTokenInterface;
- use Magento\Vault\Api\PaymentTokenRepositoryInterface;
- use Magento\Vault\Controller\CardsManagement;
- use Magento\Vault\Model\PaymentTokenManagement;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class DeleteAction extends CardsManagement
- {
- const WRONG_REQUEST = 1;
- const WRONG_TOKEN = 2;
- const ACTION_EXCEPTION = 3;
- /**
- * @var array
- */
- private $errorsMap = [];
- /**
- * @var JsonFactory
- */
- private $jsonFactory;
- /**
- * @var Validator
- */
- private $fkValidator;
- /**
- * @var PaymentTokenRepositoryInterface
- */
- private $tokenRepository;
- /**
- * @var PaymentTokenManagement
- */
- private $paymentTokenManagement;
- /**
- * @param Context $context
- * @param Session $customerSession
- * @param JsonFactory $jsonFactory
- * @param Validator $fkValidator
- * @param PaymentTokenRepositoryInterface $tokenRepository
- * @param PaymentTokenManagement $paymentTokenManagement
- */
- public function __construct(
- Context $context,
- Session $customerSession,
- JsonFactory $jsonFactory,
- Validator $fkValidator,
- PaymentTokenRepositoryInterface $tokenRepository,
- PaymentTokenManagement $paymentTokenManagement
- ) {
- parent::__construct($context, $customerSession);
- $this->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()
- );
- }
- }
|