Cursos Magento

Como redirecionar o cliente pro checkout ao adicionar um item no carrinho

, , ,

Publicado em 30 de agosto de 2022

Neste artigo criaremos um módulo para enviar seu cliente para o checkout após ter um produto acionado ao carrinho.

Isto é útil especialmente se a sua loja vende apenas um produto, ou se é comum os clientes fazerem a compra apenas de um item por vez.

Aqui no Magenteiro nós implementamos o módulo que mostraremos aqui. Isto porque nossos alunos costumam sempre se inscrever em um curso por vez, e também faziam muita confusão com os valores exibidos no checkout por conta de produtos adicionados anteriormente.

Com a chegada do Clube Magenteiro, isso ficou ainda mais óbvio pra gente. Ou seja, a maioria dos novos alunos optam apenas por adicionar o Clube Magenteiro no carrinho, já que ele dá acesso à todos os outros cursos do site.

O que este módulo vai fazer (técnico)

O módulo que criamos adicionará um Plugin do tipo before na classe Magento\Checkout\Model\Cart.

Plugins do tipo before modificam parâmetros de entrada de um método. No entanto, no nosso caso, tudo o que queremos fazer é definir o parâmetro return_url na classe Http antes que o método Cart::addProduct fosse chamado.

Fizemos isso porque o método em questão irá ler este valor a fim de determinar para qual URL o cliente será enviado após adicionar o produto ao carrinho.

Dica do Clube Magenteiro 🤘

Se você esqueceu como os Plugins funcionam, assista a aula O que são Plugins e alguns exemplos 🔒. Ela é a primeira aula do módulo 9 do Magento 2: O Curso, e é esclarecedora nesse sentido.

Vamos ao módulo

Para criar um módulo que redireciona seu cliente para o checkout após adicionar um produto ao carrinho, siga o nosso passo a passo.

Depois de criar um módulo básico para Magento, vamos declarar o Plugin que acabei de mencionar. Fazemos isso adicionando um arquivo di.xml à pasta <seu_modulo>/etc/.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\Cart">
        <plugin name="AddProductToCartRedirectsToCheckout" type="Magenteiro\AddToCartGoToCheckout\Plugin\CartPlugin" sortOrder="10" disabled="false"/>
    </type>
</config>

Em seguida, crie a classe do Plugin em questão:

<?php
declare(strict_types=1);

namespace Magenteiro\AddToCartGoToCheckout\Plugin;

use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\Request\Http;
use Magento\Framework\UrlInterface;
use Magento\Store\Model\StoreManagerInterface;

class CartPlugin
{
    protected UrlInterface $url;
    protected Http $request;
    protected StoreManagerInterface $storeManager;
    private ScopeConfigInterface $config;

    public function __construct(
        UrlInterface $url,
        Http $request,
        StoreManagerInterface $storeManager,
        ScopeConfigInterface $config)
    {
        $this->url = $url;
        $this->request = $request;
        $this->storeManager = $storeManager;
        $this->config = $config;
    }

    /**
     * Sets redirect url if firecheckout is not enabled or available
     * @param $subject
     * @param $productInfo
     * @param $requestInfo
     *
     * @return array
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function beforeAddProduct($subject, $productInfo, $requestInfo = null)
    {
        //if Firecheckout is enabled, do nothing.
        if ($this->config->getValue('firecheckout/general/enabled')) {
            return [$productInfo, $requestInfo];
        }
        
        $returnUrl = $this->storeManager->getStore()->getBaseUrl() . "checkout/";
        $url = $this->url->getUrl($returnUrl);
        $this->request->setParam('return_url', $url);
        return [$productInfo, $requestInfo];
    }
}

No nosso módulo nós também fazemos uma verificação extra para ver se o Firecheckout está ativo. Fazemos isso pois o Firecheckout possui uma configuração que já adiciona um plugin similar. Se você não usa o Firecheckout, fique à vontade pra remover esta verificação e a dependência do ScopeConfigInterface da sua classe.

O Firecheckout é um dos melhores módulos de checkout para Magento 2. Alunos do Magento 2: O Curso e do Clube Magenteiro têm 30% de desconto na aquisição do mesmo. #ficadica

Por fim, uma vez adicionada a classe do seu Plugin (acima) e ter declarado ele no di.xml, basta habilitar o módulo com o comando bin/magento s:up && bin/magento mod:en NomeDoSeu_Modulo.

Download do Módulo

Caso tenha seguido os passos acima mas nem tudo saiu como esperado, você pode baixar o nosso módulo e comparar o que pode ter dado errado no seu. Ou use-o à vontade. 😉

Quer apenas redirecionar seu cliente pro carrinho? Então você não precisa de nada disso.

Por padrão, ao adicionar um produto no carrinho o cliente permanece na mesma página. Uma mensagem dizendo que o produto foi adicionado ao carrinho de compras é exibida, e o cliente pode clicar no link ou no minicart para concluir a compra.

Isto nem sempre é óbvio para o cliente e muitos abandonam a compra por achar que algo deu errado. Além disso, a mensagem desaparece após alguns segundos.

No entanto, você pode configurar o Magento para redirecionar o cliente para o carrinho após ter um produto adicionado ao mesmo.

Isso é feito na área administrativa, em Lojas > Configurações > Configuração, depois em Vendas > Finalizar Compras > Carrinho de Compras e habilitando a opção “Depois de Adicionar um Produto, Reenvie para o Carrinho de Compras”.

Infelizmente por enquanto o Magento não tem uma opção para redirecionar direto para o Checkout, a não ser por meio de módulos como este que fizemos aqui.

Espero que tenha gostado.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/redirecionar-cliente-checkout-adicionar-item-carrinho/"]