Vou para Magento 2 Admin> Marketing> Promoções> Regras de preço do carrinho e crio uma nova regra: Pagamento por transferência bancária:
Informações da regra da guia:
- Nome da regra: pagamento por transferência bancária
- Status: Ativo
- Sites: Site Principal
- Grupos de Clientes: selecione todos
- Cupom: No Cupom
- Usos por cliente: 0
- De: blank
- Para: em branco
- Prioridade: 0
- Público no feed RSS: Não
Guia Condições:
- Se TODAS essas condições forem VERDADEIRAS:
- O método de pagamento é Pagamento por transferência bancária
Guia Ações:
- Aplicar: porcentagem de desconto no preço do produto
- Valor do desconto: 2
- O desconto máximo de quantidade é aplicado a: 0
- Desconto Qty Step (Buy X): 0
- Aplicar ao valor da remessa: Não
- Descartar regras subsequentes: Não
- Frete grátis: Não
- Aplique a regra apenas ao carrinho de itens que atenda às seguintes condições (deixe em branco para todos os itens): nothing
Ativei o método de pagamento por transferência bancária, vá para a página de check-out, clique em Pagamento por transferência bancária, mas o preço percentual do desconto não aparece no resumo do pedido.
Por favor me dê um conselho. Como fazer um desconto na forma de pagamento no Magento 2. No Magento 1, ele funciona bem.
Muito obrigado
Respostas:
Essa regra não funciona porque o Magento 2 não salva a forma de pagamento para citar quando você seleciona uma. E também não recarrega totais ao selecionar uma forma de pagamento. E, infelizmente, você precisa escrever um módulo personalizado para resolver o problema.
O novo módulo precisa apenas de 4 arquivos para serem criados:
app / code / Namespace / ModuleName / etc / frontend / routes.xml
Isso definirá um novo controlador para o nosso módulo.
app / code / Namespace / ModuleName / Controller / Checkout / ApplyPaymentMethod.php
Este arquivo cria uma ação do controlador para salvar a forma de pagamento selecionada para cotação
app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
Este arquivo permite substituir o
Magento_Checkout/js/action/select-payment-method
arquivoapp / code / Namespace / ModuleName / view / frontend / web / js / action / select-payment-method.js
Envia uma solicitação ajax para salvar a forma de pagamento e recarregar os totais do carrinho.
PS Partes do código foram retiradas da extensão da Taxa de pagamento do Magento 2.
fonte
No Magento 2.2, não consegui obter a resposta do MagestyApps para funcionar. Eu precisava adicionar alguns arquivos adicionais. Porque:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(na verdade ele se aplica a\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
), esperava que os dadospayment_method
fossem definidos nos endereços da cotação;payment_method
dados nos endereços das cotações, não funcionou quando a cotação se tornou um pedido, porque não persistepayment_method
;O seguinte módulo funcionou para mim (graças à resposta do MagestyApps, foi baseado em cima disso):
registration.php
etc / module.xml
etc / di.xml
etc / frontend / routes.xml
Controller / Checkout / ApplyPaymentMethod.php
Modelo / Regra / Condição / FilterTextGenerator / Endereço / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
view / frontend / requirejs-config.js
view / frontend / web / js / action / select-payment-method.js
fonte
Fatal error: Class 'Magento\AdvancedSalesRule\Model\Rule\Condition\Address\PaymentMethod' not found in Vendor/SalesRulesPaymentMethod/Model/Rule/Condition/FilterTextGenerator/Address/PaymentMethod.php on line 7
. Eu até tentei mudar AdvancedSalesRule para SalesRule quanto eu posso ver, não há modelo AdvancedSalesRule em Magento 2.2.2Acabamos de verificar a mesma regra e descobrimos que ela não funciona. Usando as mesmas condições, nenhuma informação sobre o método escolhido selecionado é enviada e não é registrada em nenhum lugar até que o pedido seja feito e a regra não funcione.
O endereço não tem método de pagamento até a validação e obtém o método de pagamento a partir de uma cotação de pagamento que não existe porque nenhuma informação foi enviada (
$model->getQuote()->getPayment()->getMethod()
devoluçõesnull
).Supomos que esse seja um bug do Magento. Quando você escolhe um método de pagamento, as informações devem ser enviadas com antecedência.
fonte
A solução com o módulo personalizado está funcionando.
Eu apenas pensei que seria uma informação útil para os iniciantes do Magento saberem que você também precisa adicionar esses arquivos para poder adicionar e ativar este módulo:
(copie de um módulo diferente e altere os arquivos de acordo com o nome e o espaço de nome do módulo)
então você seria capaz de correr
bin/magento setup:upgrade
fonte
Eu criei os arquivos e substituí os namespaces e modulename, mas acho que meus arquivos não serão executados.
Talvez um erro nos meus arquivos ??
registration.php
compositer.json
}
module.xml
fonte
na verdade, substituir os arquivos principais do magento não é uma boa ideia. Em vez de substituir, é
Magento_Checkout/js/action/select-payment-method
melhor criar um mixin para ele. E você pode resolvê-lo sem criar um novo controlador. Veja abaixo (além da resposta @magestyapps)app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
app / code / Namespace / ModuleName / view / frontend / js / checkout / action / select-payment-method-mixin.js
fonte
Verifique a solução no post abaixo:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
fonte