SUPEE-9767 Magento CE 1.9.3.3 Проверка Onestep не работает с включенной проверкой ключа формы При оформлении заказа [дубликат]


После обновления до Magento CE 1.9.3.3, когда я включаю проверку ключа формы при оформлении заказа, как рекомендовано SUPEE-9767, проверка onestep перестает работать.

После выбора способа оплаты, когда я нажимаю Продолжить оплату, одноэтапный процесс не продолжается. Я не вижу никакого ответа сервера или зарегистрированных сообщений об ошибках.

Когда я отключите проверку ключа формы при оформлении заказа, процесс оформления заказа будет функционировать должным образом.

Это установка Magento по умолчанию без расширенной темы.

Обновление 1

Это, по-видимому, связано с Исправлением SUPEE-9767/CE 1.9.3.3 - Проверка одной страницы - Проблема с регистрацией клиента, когда вызов метода сохранения ajax возвращает значение null, даже если файлы шаблонов исправлены и присутствуют ключи формы,

Я не смог воспроизвести это на чистая установка 1933 года.

Обновление 2

Вот причина моей проблемы

<input name="form_key" type="hidden" value="SLLU234jmligBYb9" disabled="" autocomplete="off">

CSS добавляет отключенный селектор в ключ form_key. Это означает, что значение form_key не передается контроллеру одноэтапной проверки, в результате чего контроллер возвращает значение null. Чтобы проверить это, удалите отключенный селектор в инспекторе браузера.

Эта проблема была вызвана Paypal Plus, который динамически заменяет содержимое набора полей в onestep способ оплаты при оформлении заказа. Смотрите мой ответ ниже.

Author: 7ochem, 2017-06-01

8 answers

Моя проблема была вызвана динамическим кодом (paypal plus) в процессе оформления заказа на одной странице, перезаписывающим элемент fieldset в форме html-метода с одним шагом - удалением или отключением (с помощью css) скрытого элемента form_key.

Исправление заключается в том, чтобы гарантировать, что на элемент formkey не влияет динамический код или css. Перемещение кода ключа формы за пределы набора полей может помочь

<form action="" id="co-payment-form">
    <?php echo $this->getBlockHtml('formkey') ?>
    <fieldset>
        <?php echo $this->getChildHtml('methods') ?>
    </fieldset>
</form>

Вы можете легко подтвердить, обнаруживается ли form_key и отправляется ли он на одну страницу контроллер проверяя сетевые запросы ajax в вашем браузере по мере прохождения методов проверки, каждый метод должен включать ключ формы в данные формы ajax, если ключ формы отсутствует, но был исправлен в исходном коде Magento, затем проверьте внешний код, влияющий на элемент ключа формы, т. Е. css или динамические изменения на стороне клиента.

enter image description here

 14
Author: paj, 2017-06-02 08:43:56

Https://gist.github.com/schmengler/c42acc607901a887ef86b4daa7a0445b

Примените это исправление после 9767, когда вы применили исправление безопасности, и это исправление добавит ключи формы во все необходимые PHTML файлы

 3
Author: Murtuza Zabuawala, 2017-06-01 11:44:33

В моем случае я применил SUPE-9767, но в нашей пользовательской проверке отсутствовал код ключа формы, как указано выше, т.Е. <?php echo $this->getBlockHtml('formkey') ?>. Я все еще получал ошибку, когда нажал на проверку, но затем я очистил скомпилированные классы:

server:~$ cd /path/to/magento/public/shell
server:/path/to/magento/public/shell$ php compiler.php disable
server:/path/to/magento/public/shell$ php compiler.php clear
server:/path/to/magento/public/shell$ php compiler.php compile
server:/path/to/magento/public/shell$ php compiler.php enable

А также очистил кэш для хорошей оценки:

server:/path/to/magento/public/shell$ cd ..
server:/path/to/magento/public/$ rm -r var/cache/*

Проблема решена.

 1
Author: GuruBob, 2017-06-06 21:49:58

Добавьте все ваши пользовательские шаблоны оформления заказа в формы в следующей строке

<?php echo $this->getBlockHtml('formkey') ?>
 0
Author: Andrey Borgoyakov, 2017-06-01 14:00:04

Если вы используете EE, вам может потребоваться проверить, не переопределила ли ваша пользовательская тема также следующий файл:

Приложение/дизайн/интерфейс/rwd/предприятие/шаблон/учетная запись подарочной карты/страница/оплата/скрипты.phtml

var quoteBaseGrandTotal = <?php echo (float)$this->_getQuote()->getBaseGrandTotal(); ?>;
var isGiftCardApplied = <?php if($this->isFullyPaidAfterApplication()): ?>true<?php else: ?>false<?php endif; ?>;
var epsilon = 0.0001;
function enablePaymentMethods(free) {
    Payment.prototype.init = function () {
        var elements = Form.getElements(this.form);
        var methodName = '';
        for (var i=0; i < elements.length; i++) {
            if (elements[i].name == 'payment[method]'
                || elements[i].name == 'payment[use_customer_balance]'
                || elements[i].name == 'payment[use_reward_points]'


// Make sure the next line exists in your theme
                || elements[i].name == 'form_key'


            ) {
                methodName = elements[i].value;
 0
Author: Gabriel Queiroz Silva, 2017-06-02 14:45:56

Возникла та же проблема, но мне пришлось отредактировать основные файлы, чтобы исправить ее!

Я получаю эту ошибку:

[02-Jun-2017 14:25:32 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 14:37:07 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 14:41:48 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 14:43:09 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 14:52:19 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 15:00:40 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 15:03:54 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 15:06:50 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 15:09:45 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353
[02-Jun-2017 15:12:50 UTC] PHP Fatal error:  Call to undefined method Mage_Checkout_OnepageController::isFormkeyValidationOnCheckoutEnabled() in /chroot/he/Checkout/controllers/OnepageController.php on line 353

Поэтому я отредактировал функцию $this-> isFormkeyValidationOnCheckoutEnabled() в этом файле:

\app\code\core\Mage\Checkout\controllers\OnepageController.php

И теперь мой процесс оформления заказа снова работает!

 0
Author: Roger David Ellis, 2017-06-03 04:53:03

Проверка застряла на шаге 4 после SUPEE-9767 с включенной проверкой ключа формы при проверке Очевидно, что тогда вы используете пользовательскую тему. Как бы это ни было просто, вам тоже придется добавить туда строку. Это просто следующим образом: Откройте свои пользовательские темы payment.phtml и добавьте строку в свой формуляр с идентификатором "форма совместного платежа":

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

В качестве примера я сделал это сразу после начального php-тега, поэтому он находится поверх шаблона.

Дополнительно: Если ваша пользовательская тема перезаписывает opcheckout.js, есть также некоторые необходимые изменения: Найти

if (elements[i].name=='payment[method]') {

И замените его на

if (elements[i].name=='payment[method]' || elements[i].name == 'form_key') {

Все кредиты community.magento.com

 0
Author: Jelqui, 2017-06-06 21:06:10

Вы должны использовать ключ формы в своем ключе формы, чтобы он работал.

getBlockHtml('ключ формы')?>
 -4
Author: Keshav Patidar, 2017-06-02 15:19:11