Redirect Magento在OnePage签出上的奇怪重定向行为

Redirect Magento在OnePage签出上的奇怪重定向行为,redirect,magento,checkout,magento-1.4,Redirect,Magento,Checkout,Magento 1.4,我的Magento Verison是-1.4.1.1 我有两个问题: 1) 当我通过Onepage结账的各个步骤(注册、账单、发货和付款选项卡)时,有时在这个过程中,我会被重定向到购物车页面。var/report中没有错误、异常和生成报告。我不知道如何调试它。没有我可以找的日志吗 2) 在单击下订单(最后一步)后的同一个Onepage签出过程中,有时会重定向到购物车页面,发送电子邮件,说明订单失败,并显示以下消息: 在此操作之前,必须收集报价总额 为了解决这个问题,我在文件magento/app

我的Magento Verison是-1.4.1.1

我有两个问题:

1) 当我通过Onepage结账的各个步骤(注册、账单、发货和付款选项卡)时,有时在这个过程中,我会被重定向到购物车页面。var/report中没有错误、异常和生成报告。我不知道如何调试它。没有我可以找的日志吗

2) 在单击下订单(最后一步)后的同一个Onepage签出过程中,有时会重定向到购物车页面,发送电子邮件,说明订单失败,并显示以下消息:

在此操作之前,必须收集报价总额

为了解决这个问题,我在文件
magento/app/code/core/Mage/Sales/Model/Quote.php
中的
prepareCurringPaymentProfiles
中注释了这一行,解决了这个问题:

throw new Exception("Quote totals must be collected before this operation.");
我不知道这两个问题是否相关。但我现在不是第二个问题,而是经常出现第一个问题。原因可能是什么?如何解决

进一步更新-我检查了firebug跟踪,这是500个内部服务器错误,有时出现在单页签出的任何步骤中。我深入研究了onepagecontroller.php中的savebillingaction、saveshippingaction函数,发现$this->getRequest()->isPost()为空时会出现错误,如果为1,则继续执行,然后转到下一步,否则会重定向到购物车,不,我不知道为什么这不是1,或者是因为ajax无法发送post数据,但我检查了XHR请求,ajax每次都发送post数据(使用firebug扩展检查)。有人能告诉我下一步可以做什么来排除故障吗。在哪里可以找到这些Ajax调用?
Shipping.phtml(any step.phtml)底部有JS,它如何调用OnePagecontroller saveshippingaction函数?

首先,注释错误消息几乎不是解决问题的方法,因为您只是在掩盖一些可能对系统造成严重后果的问题

确定这样的错误可能很困难,但有几个地方需要首先查看:

  • 您是否在较低版本上安装了此系统,然后进行了升级?如果是,怎么做
  • 您是否使用任何扩展来修改网站的销售/结帐部分
  • 您是否覆盖了与此站点部分相关的任何模型
  • 您是否更改了签出的JS或HTML
  • 如果其中一种情况是这样的,您应该检查这些更改是否存在bug。如果没有,请尝试打开网站的默认主题并再次签出。如果bug消失,则说明您使用的主题存在问题。如果它仍然出现,则问题出在代码中

    在后一种情况下,使用Firebug验证有问题的页面请求是否会导致Magento将“重定向”命令发回前端。如果不是这样,可能是某种JS错误,但更有可能是系统中某个地方的无效数据导致Magento在签出时阻塞

    另外(刚刚想到这一点,还没有尝试过),尝试多地址签出。我记得,它使用常规的页面帖子,甚至可能有比OnePage签出更有用的消息。请用上面的发现编辑你的帖子,这样我们就可以在没有帮助的情况下提供更多帮助


    希望有帮助

    对于遇到“此操作之前必须收集报价总额”错误的任何其他人,请检查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保存订单操作,因为它非常繁重,并且经常需要连接到第三方服务(支付网关、通讯服务,如mailchimp等)。这些对第三方服务的调用可能需要一段时间,这取决于网络状态,可能是PHP超时的原因

    您可以从增加超时开始,但这不是一个好的永久解决方案,因为您首先想知道为什么会发生这种情况


    New Relic是监视这些调用的好工具(也是监视您的Magento存储的好工具)。

    万一有人收到“此操作之前必须收集报价总额”。错误,并且这些解决方案都无法修复其特定问题,我要提到的是,我的解决方案存在以下问题:

    skin/frontend/base/default/js/opcheckout.js

    var params = Form.serialize(payment.form);
    

    这个网站有一个独特的JS错误,它正在清除支付表单并阻止JS阅读它的内容。您使用的模块或主题将有所不同,但请检查以确保付款表单可以正确序列化。如果不是,那可能是您的问题。

    因为这是内部服务器错误,请尝试访问服务器的错误日志。我会告诉你哪里出了问题。我在1.7.0中也遇到过同样的问题。在我的例子中,问题出现在
    /app/code/core/Mage/Usa/Model/Shipping/Carrier/Fedex.php

    我的商店也有同样的问题:

  • “提交订单信息…”需要大约20到130秒甚至更长的时间才能通过并重定向到支付网关,如PayPal,如果有的话,在单击一页签出的最后一步下订单后

  • 如果它没有通过,很可能是因为时间太长而超时,它会将重定向回购物车,给客户留下一个空购物车和一个待定的付款单,或者,它会给出以下例外情况:

    在此操作之前,必须收集报价总额

    因为很明显,在收集报价总额之前(这只是我的理论),有些东西超时了,脚本结束了,因此发送支付交易失败提醒电子邮件

  • 经过12个小时的研究和调试,我终于找到了罪魁祸首和解决方案<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>