当前位置 : 主页 > 大数据 > 区块链 >

Magento“报价总计必须收集”由于失败的原型Form.serizalize在结帐中的异常

来源:互联网 收集:自由互联 发布时间:2021-06-22
间歇性和看似随机的错误正在影响至少三个不同网站的Magento结帐. Magento论坛上有一些关于这个话题的线索,有一些不好的建议(吞下异常).这个问题导致销售失误,导致网站所有者感到很沮
间歇性和看似随机的错误正在影响至少三个不同网站的Magento结帐. Magento论坛上有一些关于这个话题的线索,有一些不好的建议(吞下异常).这个问题导致销售失误,导致网站所有者感到很沮丧.自2011年3月以来,Magento已经记录了这个问题( http://www.magentocommerce.com/bug-tracking/issue/?issue=11081).

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

当异常发生时,我们已经记录了请求参数,并确定了付款参数为空.我们认为,Magento在客户点击“放置订单”时,从付款步骤重新发送表单元素(以便信用卡详细信息不会在AJAX请求之间在站点上持久存在),并且表单序列化失败并返回null / empty,opcheckout.js代码然后传递到PHP触发异常.

你能建议什么条件或数据会导致原型的Form.serialize方法以这种方式失败和/或如何进一步攻击这个问题?

其实这个原因很少有可能.

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

我认为这将帮助您找出序列化过程中的问题.付款表单可能有些空白,或者表单中的所有项目都被禁用等等…

此致伊万

上一篇:2018-10-25 星期四
下一篇:2018-10-24 星期三
网友评论