Magento“报价总计必须收集”由于原型Form.serizalize结帐失败导致例外

时间:2012-12-08 12:27:13

标签: magento serialization prototypejs

间歇性且看似随机的错误正在影响至少三个不同站点的Magento结账。在Magento论坛上有很多关于这个主题的主题有一些不好的建议(吞下例外)。这个问题导致销售损失,并导致网站所有者感到很沮丧。自2011年3月(http://www.magentocommerce.com/bug-tracking/issue/?issue=11081)以来,Magento已记录此问题。

付款方式,浏览器,Magento版本或我们尝试关联的其他因素中没有任何模式。主要症状是var / log / exception.log中记录的异常,其中指出“必须收集引用总计”,它将在Mage_Sales_Model_Quote::prepareRecurringPaymentProfiles()中抛出。

我们在发生异常时记录了请求参数,并确定payment参数为空。我们认为Magento在客户点击下订单时重新发送付款步骤中的表单元素(以便在AJAX请求之间不会在网站上保留信用卡详细信息),并且表单序列化失败并返回null / empty,opcheckout.js代码然后传递给PHP触发异常。

您能否建议哪些条件或数据会导致原型的Form.serialize方法以这种方式失败和/或如何进一步解决问题?

2 个答案:

答案 0 :(得分:9)

实际上,可能的原因很少。

Prototype的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
});

我认为它可以帮助您找出序列化过程中的问题。付款表单可能会以某种方式显示为空,或者表单中的所有项目都被禁用等等......

此致 伊万

答案 1 :(得分:1)

我遇到了类似的问题。 要通过简单的步骤解决此问题,请打开数据库,现在数据库<<表'core_config_data'并将路径'design / email / header'和'design / email / footer'的值从'2'更改为'0'。

结帐流程现在可以正常运行...... 为我工作!!