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

Jon*_*Day 13 serialization magento prototypejs

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

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

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

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

Iva*_*nyi 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
});
Run Code Online (Sandbox Code Playgroud)

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

真诚的,伊万

  • 非常好的方法,将试一试.问题是无法一致地重现它:-( (2认同)
  • 作为这个问题的受害者,我可以证明它是随机的,难以复制.这里有一些很好的代码 - 我很高兴把它交给质量保证部门,看看我们是否可以设置一些自动化并对其进行测试...... (2认同)