magento serialization prototypejs

Magento "Quote Totals debe recopilarse" Excepción debido a la falla del prototipo Form.serizalize en el proceso de pago



serialization prototypejs (2)

Un error intermitente y aparentemente aleatorio está afectando el pago de Magento en al menos tres sitios diferentes. Hay varios temas sobre este tema en los foros de Magento con algunos malos consejos (trague la excepción). El problema está causando la pérdida de ventas y resulta en una gran frustración para los propietarios del sitio. Este problema se ha registrado con Magento desde marzo de 2011 ( http://www.magentocommerce.com/bug-tracking/issue/?issue=11081 ).

No existe un patrón en el método de pago, navegador, versión de Magento u otros factores que hemos intentado correlacionar. El síntoma principal es una excepción registrada en var / log / exception.log que indica "Se deben recopilar totales de cotización" que se Mage_Sales_Model_Quote::prepareRecurringPaymentProfiles() en Mage_Sales_Model_Quote::prepareRecurringPaymentProfiles() .

Hemos registrado los parámetros de Solicitud cuando ocurre la Excepción e identificamos que el parámetro de payment está vacío. Creemos que Magento reenvía los elementos de formulario del paso Pago en el momento en que el cliente hace clic en Realizar pedido (para que los datos de la tarjeta de crédito no se conserven en el sitio entre las solicitudes AJAX) y la serialización del formulario falla y devuelve un valor nulo / empty que el código opcheckout.js luego pasa a PHP activando la excepción.

¿Puede sugerir qué condiciones o datos podrían hacer que el método Form.serialize del prototipo falle de esta manera y / o cómo atacar aún más el problema?


En realidad, hay pocas razones posibles para eso.

El método Prototype''s Form.serialize() usa otro método de la misma clase, llamado Form.getElements() . Puede probar el siguiente código para ver qué elementos pasan desde el objeto payment.form. Simplemente anule el método review.save() durante el tiempo de ejecución para fines de depuración.

Puede pegar el siguiente código en la consola de su navegador favorito (Chrome, Firefox o 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 });

Creo que te ayudará a descubrir el problema con el proceso de serialización. Es posible que el formulario de pago se haya quedado vacío, o que todos los elementos del formulario hayan sido deshabilitados y así sucesivamente ...

Atentamente, Ivan


Enfrenté un problema similar. Para resolver este problema en simples pasos, abra su base de datos, ahora la base de datos << tabla ''core_config_data'' y cambie los valores para la ruta ''diseño / correo electrónico / encabezado'' y ''diseño / correo electrónico / pie de página'' de ''2'' a ''0''.

El flujo de pago ahora funcionará correctamente ... ¡Funcionó para mí!