Magento não finaliza compra – Não avança no pagamento

Notei que a versão 1.9.3.x (ou após a aplicação do path SUPEE-9767) o Magento não avança após escolher o método de pagamento, não tem erro em nenhum log, pois não dá erro, na verificação de form key, na controller (app/code/core/Mage/Checkout/controllers/OnepageController.php em saveBillingAction) se ele não receber o valor do form key a rotina retorna sem fazer NADA.

Mas no fonte payment.phtml (app\design\frontend\[SEU PACOTE]/[SEU TEMA]\template\checkout\onepage\payment.phtml) tem a chamada do form key que é esta:

<?php echo $this->getBlockHtml(‘formkey’) ?>

Mas se inspecionar elemento verá que no html ela aparece assim:

<input name=”form_key” type=”hidden” value=”5Vp2fgkMjOb2D5h9″ disabled autocomplete=”off”>

Com este “disable” o form_key vai ser NULO e a controller mencionada acima retorna sem fazer nada e sem dar erro e o checkout não acontece.

Uma solução encontrei neste post:

https://community.magento.com/t5/Magento-1-x-Security-Patches/SUPEE-9767-V2-Formkey-contains-disabled-on-step-5-checkout-for/td-p/72971

Outra, que achei melhor, pois não altera código do core (ou js do core) altera um .phtml que é assim:

edite o app\design\frontend\[SEU PACOTE]/[SEU TEMA]\template\checkout\onepage\payment.phtml
ache a linha <?php echo $this->getBlockHtml(‘formkey’) ?> (deve ser a # 40) e deixe ela assim:
<?php // echo $this->getBlockHtml(‘formkey’) ?> comentado o echo ou remova ela toda e troque por esta:

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" class="formkey-paym" />

Adicionamos um nome/classe formkey-paym para poder ser achado e tirado o “disable” com um java script. Para isto adicone no final deste payment.phtml a seguinte rotina:

<script>
jQuery(document).ready(function(){
jQuery('#shipping-method-buttons-container .button').click(function(e){
  setTimeout(function(){
         jQuery("#co-payment-form .formkey-paym").removeAttr('disabled');
   }, 2000);
 });
});
</script>

Desta forma quando tivermos clicando em “shipping” ele vai tirar o “disable” do form-key do payment e o checkout vai acontecer.

Testei no Magento 1.9.3.10 e no 1.9.4.2 com sucesso.

Caso tenha dificuldade, altere o opcheckout.js na pasta
skin/frontend/[SEU PACOTE]/default/js que vai funcionar da mesma forma.

Espero ter ajudado!

Alfredo Letti

One Step Checkout Brasil 6.0 erra no total na tela de fechamento
Problemas com a árvore de categorias ao adicionar produtos no Magento

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *