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