我的Magento Verison是 - 1.4.1.1
我遇到两个问题:
1)当我进行Onepage结帐(注册,结算,发货和付款标签)的各个步骤时,有时在此过程中我会被重定向到购物车页面。没有错误,没有异常,var / report中没有生成报告。我不知道如何调试它。我找不到任何日志吗?
2)在单击下订单(最后一步)后的同一个页面结帐流程中,有时会重定向到购物车页面,发送一封电子邮件,说明订单失败并显示消息:
在此操作之前必须收集引用总计。
要解决此问题,我在文件prepareRecurringPaymentProfiles
的{{1}}中注释了这一行,解决了问题:
magento/app/code/core/Mage/Sales/Model/Quote.php
我不知道这两个问题是否相关。但我现在没有第二个问题,但第一个问题非常频繁。可能是什么原因以及如何解决?
进一步更新 - 我检查了firebug跟踪,这是500内部服务器错误,有时在一页结帐的任何步骤中都会出现错误。我能够在onepagecontroller.php中深入研究savebillingaction,savinghippingaction函数,并发现当$ this-> getRequest() - > isPost()为空时出现错误,如果为1,那么它会继续,然后转到下一步它重定向到购物车,不,我不知道为什么这不是1或是因为ajax无法发送帖子数据但我检查了XHR请求,Ajax每次都发送帖子数据(用firebug扩展检查)。有人能告诉我接下来要排除故障后我能做些什么。我可以在哪里寻找这些Ajax调用? Shipping.phtml(任何step.phtml)底部有JS,它如何调用OnePagecontroller savehippingaction函数?
答案 0 :(得分:1)
由于它是内部服务器错误,请尝试访问服务器的错误日志。会告诉你问题在哪里。我在1.7.0中遇到了同样的问题。在我的示例中,问题出现在/app/code/core/Mage/Usa/Model/Shipping/Carrier/Fedex.php
答案 1 :(得分:0)
首先,评论错误消息几乎不是解决问题的方法,因为您只是掩盖了一些可能对您的系统造成严重后果的问题。
确定这样的错误可能很难,但首先要考虑几个地方:
如果其中一个是这种情况,您应该检查这些更改是否有错误。如果没有,请尝试打开网站的默认主题并再次签出。如果错误消失,则表示您正在使用的主题存在问题。如果它仍然出现,则问题出在代码中。
在后一种情况下,使用Firebug验证违规页面请求是否导致Magento将“重定向”命令发送回前端。如果不是这种情况,那可能是某种JS错误,但更有可能的是,你在系统中的某些无效数据导致Magento在结账时窒息。
另外(想到这个,还没试过),试试多地址结账。我记得,它使用常规页面帖子,甚至可能比OnePage结帐有更多有用的消息。请根据上述结果编辑您的帖子,以便我们可以提供更多帮助,如果不这样做的话。
希望有所帮助!
答案 2 :(得分:0)
对于遇到其他任何人“必须在此操作之前收集报价总数”。错误,请检查您的Apache日志,了解500内部服务器错误的原因。如果它是这样的:
mod_fcgid: read data timeout in 40 seconds
Premature end of script headers: index.php
process 26126 graceful kill fail, sending SIGKILL
.. PHP需要很长时间才能做出回应。通常是onepage / checkout saveOrder操作,因为它非常繁重并且经常需要连接到第三方服务(支付网关,邮件服务,如mailchimp等)。这些对第三方服务的调用可能需要一段时间,具体取决于网络状态,可能是PHP超时的原因。
你可以从增加超时开始,但这不是一个好的永久性解决方案,因为你想首先找出原因。
New Relic是监控这些调用的好工具(也是监控Magento商店的好工具)。
答案 3 :(得分:0)
万一有人得到“必须在此操作之前收集报价总数”。错误,这些解决方案都没有解决他们的特殊问题,我会提到我的问题是:
<强>皮肤/前端/碱/默认/ JS / opcheckout.js 强>
var params = Form.serialize(payment.form);
这个站点有一个独特的JS错误,它清除了付款表单并阻止JS读取它的内容。您使用的模块或主题会有所不同,但请检查以确保付款表单可以正确序列化。如果没有,那么这可能是你的问题。
答案 4 :(得分:0)
我在我的商店Princessly遇到了同样的问题:
“提交订单信息...... ”需要大约20到130秒甚至更长时间才能完成并重定向到支付网关,如PayPal,如果有的话,点击下订单按钮,即一页结帐的最后一步。
如果没有通过,很可能因为花了太长时间超时,它会将重定向回购物车,让客户空车和一个< em>待付款订单,或者,它将例外:
在此操作之前必须收集引用总计。
很明显,好吧,有些东西超时并且脚本在收集报价总数之前结束(这只是我的理论),因此发送付款交易失败的提醒电子邮件。
经过12个小时的研究和调试,我终于找到了罪魁祸首和解决方案。
Magento默认启用RSS库存和新订单通知,因此每次按下订单(然后保存“销售/订单”资源)时,将刷新缓存以便发布RSS。对于Magento,缓存清理可能非常耗时。因此解决方案很简单。只需禁用RSS通知即可保存“销售/订单”资源。
找到 /app/code/core/Mage/Rss/etc/config.xml 并找到此块:
<sales_order_item_save_after>
<observers>
<notifystock>
<class>rss/observer</class>
<method>salesOrderItemSaveAfterNotifyStock</method>
</notifystock>
</observers>
</sales_order_item_save_after>
<sales_order_item_save_after>
<observers>
<ordernew>
<class>rss/observer</class>
<method>salesOrderItemSaveAfterOrderNew</method>
</ordernew>
</observers>
</sales_order_item_save_after>
只需删除或评论它并在System =&gt;中刷新Magento缓存;缓存管理=&gt;选择全部=&gt;提交。
现在我的商店只需要1秒甚至更短的时间来完成下订单并重定向到付款网关。