OnePage Checkout上的Magento奇怪重定向行为

时间:2011-04-04 10:45:01

标签: redirect magento checkout magento-1.4

我的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函数?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

确定这样的错误可能很难,但首先要考虑几个地方:

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

    在后一种情况下,使用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遇到了同样的问题:

  1. 提交订单信息...... ”需要大约20到130秒甚至更长时间才能完成并重定向到支付网关,如PayPal,如果有的话,点击下订单按钮,即一页结帐的最后一步。

  2. 如果没有通过,很可能因为花了太长时间超时,它会将重定向回购物车,让客户空车和一个< em>待付款订单,或者,它将例外:

      

    在此操作之前必须收集引用总计。

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

  3. 经过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秒甚至更短的时间来完成下订单并重定向到付款网关。