Подтвердить что ты не робот

Magento "Итоговые суммы котировок должны быть собраны" Исключение из-за неудачного прототипа Form.serizalize в оформлении заказа

Периодически и, казалось бы, случайная ошибка влияет на проверку Magento по крайней мере на трех разных сайтах. В этой теме на форумах Magento есть несколько тем, с некоторыми плохими советами (проглотите исключение). Этот вопрос вызывает упущенные продажи и приводит к большому разочарованию для владельцев сайтов. Эта проблема была зарегистрирована с Magento с марта 2011 года (http://www.magentocommerce.com/bug-tracking/issue/?issue=11081).

В способе оплаты, браузере, версии Magento или других факторах, которые мы пытались сопоставить, нет шаблона. Первичный симптом - это Исключение, записанное в var/log/exception.log, в котором говорится, что "Котировки котировок должны быть собраны", которые попадают в Mage_Sales_Model_Quote::prepareRecurringPaymentProfiles().

Мы выполнили регистрацию параметров запроса при возникновении исключения и обнаружили, что параметр payment пуст. Мы полагаем, что Magento повторно отправляет элементы формы с шага "Оплата" во время клика, нажимая "Разместить заказ" (чтобы данные о кредитной карте не сохранялись на сайте между запросами AJAX), и сериализация формы не выполняется и возвращает нулевое значение /empty, который затем выводит код opcheckout.js на PHP, запускающий Исключение.

Можете ли вы предложить, какие условия или данные могут привести к тому, что метод прототипа Form.serialize завершится неудачно и/или как продолжить атаку на проблему?

4b9b3361

Ответ 1

На самом деле для этого есть несколько причин.

Прототип Form.serialize() использует другой метод из того же класса, который называется Form.getElements(). Вы можете попробовать следующий код, чтобы узнать, какие элементы передаются из объекта payment.form. Просто переопределите метод review.save() во время выполнения для цели отладки.

Вы можете вставить следующий код в консоль своего любимого браузера (Chrome, Firefox или Safari):

review.save = review.save.wrap(function (originalMethod) {
    console.log(payment.form); // Check what is in the form object
    console.log(Form.getElements(payment.form)); // Check what items are returned for serializing
    originalMethod(); // Calling original place order functionality to see if the issue occurs, so you can compare above debug info
});

Я думаю, это поможет вам разобраться с проблемой процесса сериализации. Возможно, что форма оплаты каким-то образом пуста или все элементы в форме были отключены и так далее...

С уважением, Иван

Ответ 2

Я столкнулся с подобной проблемой. Чтобы решить эту проблему на простых шагах, откройте свою базу данных, теперь база данных < table 'core_config_data' и изменить значения для 'design/email/header' и 'design/email/footer' от '2' до '0'.

Теперь поток проверки будет работать правильно... Работал для меня.