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
завершится неудачно и/или как продолжить атаку на проблему?
Ответы
Ответ 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'.
Теперь поток проверки будет работать правильно...
Работал для меня.