Auditoria de loja nova que eu faço sempre: abrir o checkout com um produto barato no carrinho e ver a lista de pagamentos. Em umas quatro de cada dez, lá está "Check / Money order" — cheque ou ordem de pagamento, coisa de loja americana dos anos 90.
Não é bug, é o padrão do Magento. Quem instalou nunca desligou, e o pedido que entra por ali nasce em pending, sem pagamento nenhum, ocupando estoque.
O que vem ligado de fábrica
Abrindo o etc/config.xml do Magento_OfflinePayments e do Magento_Payment, o retrato é esse:
| Caminho | Padrão | Nome no checkout |
|---|---|---|
payment/checkmo/active | 1 | Check / Money order |
payment/free/active | 1 | No Payment Information Required |
payment/banktransfer/active | 0 | Bank Transfer Payment |
payment/cashondelivery/active | 0 | Cash On Delivery |
payment/purchaseorder/active | 0 | Purchase Order |
Confira o que está valendo na sua loja de uma vez só:
php bin/magento config:show payment | grep "/active"A saída vem no formato caminho - valor. Esse comando lê tanto o que está no banco quanto o padrão do core, então serve mesmo para loja onde ninguém nunca salvou essa tela.
Desligue e trave o campo
Pelo admin é Stores > Configuration > Sales > Payment Methods, mas eu prefiro pela CLI porque dá para travar:
php bin/magento config:set --lock-env payment/checkmo/active 0
php bin/magento cache:clean configO --lock-env faz duas coisas: grava o valor no app/etc/env.php e deixa o campo cinza no admin, para ninguém religar sem querer. É o que a própria descrição do comando diz.
Tem um porém que morde em pipeline de deploy: o env.php quase nunca está no git, e ambiente que regenera esse arquivo perde o travamento. Nesse caso use o irmão dele:
php bin/magento config:set --lock-config payment/checkmo/active 0Esse grava no app/etc/config.php, que é versionado e vale para todas as instalações do projeto. Só lembre que valor em config.php entra na loja pelo app:config:import durante o deploy.
Não desligue o "free" junto
O payment/free também vem ativo. No admin ele não se chama pelo nome que aparece no checkout: procure por Zero Subtotal Checkout. É comum a pessoa desligar os dois de uma vez achando que está limpando a lista. Não faça isso sem entender o que ele é.
Olhando o isAvailable() do Magento\Payment\Model\Method\Free, o método só fica disponível quando o total do pedido, arredondado, é zero. Ou seja: cliente nenhum vê esse método num pedido normal.
Ele existe para os casos em que não há o que cobrar — cupom de 100%, brinde, produto virtual liberado numa promoção. Desligue o free e o cliente que aplicou o cupom de 100% chega no checkout e não encontra forma de pagamento nenhuma. O carrinho fica travado e você só descobre pelo suporte, semanas depois.
Então a regra é simples: checkmo sai, free fica. E se a sua loja realmente nunca vai ter pedido de valor zero, aí sim dá para desligar — mas teste um cupom de 100% no ambiente de homologação antes de subir.
Já os outros três (banktransfer, cashondelivery, purchaseorder) vêm desligados. Se algum estiver ligado na sua loja, alguém ligou de propósito ou um módulo mexeu — vale entender o porquê antes de simplesmente desligar.
Perguntas rápidas
Já tenho pedidos antigos feitos por Check / Money order. Desligar o método some com eles?
Não. Desativar só tira o método do checkout para pedidos novos. O histórico continua igual e o pedido antigo segue faturável e cancelável normalmente.
Desliguei e o método continua aparecendo. O que falta?
Na maior parte das vezes é cache de configuração. Rode cache:clean config e teste numa aba anônima. Se persistir, confira se o valor não foi salvo em outro escopo, com config:show usando --scope=websites e o código do site.
Serve para desligar métodos de gateways também?
Serve, o caminho segue o mesmo padrão: payment, barra, código do método, barra, active. Só descubra o código certo do módulo antes, porque cada gateway usa o seu, e alguns têm um código separado para cartão, Pix e boleto.
Pra conferir na fonte
- Check / Money order — Adobe Experience League
- Use the command line to set configuration values — Adobe Experience League
- Magento_OfflinePayments etc/config.xml — GitHub
- Magento_Payment etc/config.xml — GitHub