4

我的 Magento 版本是 - 1.4.1.1

我有两个问题:

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

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

必须在此操作之前收集报价总计。

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

throw new Exception("Quote totals must be collected before this operation.");

我不知道这两个问题是否相关。但是我现在没有第二个问题,而是经常遇到第一个问题。可能是什么原因以及如何解决?

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

4

5 回答 5

1

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

于 2015-05-14T21:02:54.510 回答
0

以防万一有人收到“必须在此操作之前收集报价总计”。错误,这些解决方案都没有解决他们的特定问题,我会提到我的问题是:

皮肤/前端/基础/默认/js/opcheckout.js

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

该站点存在一个独特的 JS 错误,该错误正在清除付款表单并阻止 JS 读取其内容。您使用的模块或主题会有所不同,但请检查以确保付款表单可以正确序列化。如果没有,那可能是你的问题。

于 2014-08-06T01:45:22.923 回答
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 商店的好工具)。

于 2013-05-02T01:35:11.420 回答
0

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

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

  1. 您是否在较低版本上安装了此系统然后升级?如果是这样,怎么做?
  2. 您是否使用了任何修改网站销售/结帐部分的扩展程序?
  3. 您是否覆盖了与网站这一部分相关的任何模型?
  4. 您是否更改了结帐的 JS 或 HTML?

如果是其中一种情况,您应该查看这些更改是否存在错误。如果没有,请尝试打开网站的默认主题并再次签出。如果错误消失,则说明您使用的主题有问题。如果仍然出现,则问题出在代码中。

在后一种情况下,使用 Firebug 来验证有问题的页面请求是否导致 Magento 将“重定向”命令发送回前端。如果不是这种情况,则可能是某种 JS 错误,但更有可能的是,您最终会在系统中某处导致 Magento 在结帐期间阻塞的无效数据结束。

还有(刚想到这个,没试过),试试多地址结账。我记得,它使用常规页面帖子,甚至可能比 OnePage 结帐更有用的消息。请根据上面的发现编辑您的帖子,以便我们可以在不这样做的情况下提供更多帮助。

希望有帮助!

于 2011-04-04T12:33:38.010 回答
0

我在公主店里遇到了同样的问题:

  1. “ Submitting order information ... ”需要大约20到130秒甚至更长的时间才能通过并重定向到PayPal等支付网关,如果有的话,点击Place Order按钮后,一页结账的最后一步。

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

    必须在此操作之前收集报价总计。

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

经过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 => Cache Management => Select All => Submit 中刷新 Magento 缓存。

现在,我的商店只需 1 秒甚至更短的时间就可以通过下订单并重定向到支付网关。

于 2016-01-31T14:42:02.153 回答