Magento总计,不含税,含PHP7 1.9


17

我们正在使用1.9&php7; 检测到此问题并涉及贝宝可疑欺诈行为(由于差额)。

所有正确的前端(适用税);但是在结帐和计算时,magento使用总计不含税。

实际错误订单计算:

不含税的产品价格+含税的运费=付款总额

切换到php5,计算正确。

有想法吗

谢谢!


我也有同样的问题。到目前为止,我发现的只是这个:stackoverflow.com/questions/34281113/… 解决这个问题的解决方案将是很棒的。
Reinsch 2015年

这独立于PHP 7,并且已在较早之前进行了报告,例如,早在2012年就已报告:排序算法:Magento结帐总额未正确排序,导致错误的运费计算,给出的内部Magento票证为[MCACE-129]。
hakre 2015年

Answers:


13

我创建了一个magento模块,以解决php7总计计算中的magento问题。我特别遇到的问题是,使用amazonpayments结帐页面上的amazon模块将税款加到总计中两次,以加薪

学分

archigrafix在本文(/magento//a/97107/35665)中提供的答案解决了我的问题-因此,这只是打包到模块中的修复程序。

模块:

https://github.com/hartmut-ltd/magento-php7-totals-fix


有用 !!!推荐解决方案
jruzafa

9

我真的不知道这是否有任何帮助,但有一点需要研究。

您的collecttotals模型订单的订购方式可能不同,并且在grand_total之后订购/应用税款

您可以按以下步骤测试是否是问题所在。(请注意,这涉及调整核心文件以获取一些调试信息,请不要在实际站点上尝试此操作!)

编辑位于以下位置的方法:

Mage_Sales_Model_Quote_Address::collecttotals

并在该方法中添加一行,这样您就可以在处理模型时输出它们。

public function collectTotals()
    {
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_before', array($this->_eventObject => $this));
        foreach ($this->getTotalCollector()->getCollectors() as $model) {
            mage::log($model->getCode()); // <===== ADD THIS LINE
            $model->collect($this);
        }
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_after', array($this->_eventObject => $this));
        return $this;
    }

确保启用日志记录。

通过控制台添加日志文件: tail -f system.log

通过前端重现问题。

您将在日志中获得以下条目(来自1.9.2.2的原始版本-您可能还有其他条目)

2015-12-21T05:54:12+00:00 DEBUG (7): nominal
2015-12-21T05:54:12+00:00 DEBUG (7): subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): msrp
2015-12-21T05:54:12+00:00 DEBUG (7): freeshipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): weee
2015-12-21T05:54:12+00:00 DEBUG (7): shipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_shipping
2015-12-21T05:54:12+00:00 DEBUG (7): discount
2015-12-21T05:54:12+00:00 DEBUG (7): tax
2015-12-21T05:54:12+00:00 DEBUG (7): grand_total

您将看到它重复,因此只需看一下它的开始和结束,就应该很容易看到该模式

请注意上面的最后两个条目:税收在grand_total之前。这可能是可能这个排序是不正常的,而且税grand_total后出现的,所以grand_total不会有税收应用。

编辑:

好的,所以我没有看到所提到的问题实际上指向要解决的问题。我怀疑这可能是问题所在,但我自己并未在PHP7中进行测试

有解决方案,但这不是很好。商店中放置的任何新扩展(将模型插入收集器中)都需要加以注意,并添加到排序中,否则可能会出错。将来可能会有点维护问题。

只需通过将<sort_order>总计放入配置中来强制排序顺序即可。您可以通过自己的扩展名(仅包含config.xml)来执行此操作,在其中您可以指定每个收集器的顺序。

在config.xml中,具有如下指令:

<sales>
   <quote>
      <totals>
         <nominal>
           <sort_order>100</sort_order>
        </nominal>
        <subtotal>
           <sort_order>200</sort_order>
        </subtotal>
        <msrp>
           <sort_order>300</sort_order>
        </msrp>
        <freeshipping>
           <sort_order>400</sort_order>
        </freeshipping>

        ......
        insert each collector model with a sort directive
        ......

     </totals>
   </quote>

在每个排序指令之间使用较大的间距,以留出空间来插入其他向前的内容。

如前所述,不是很优雅,但是可以解决您的直接问题。

另请注意,系统中还有其他收集器指令,因此它们也可能是错误的/需要调整

检查核心销售扩展config.xml,并查找 <totals>

在那里,您会发现:

<order_invoice>
<order_creditmemo>
<pdf>

其他扩展中可能还有其他功能,无论是核心/第三方

希望能有所帮助。

PS:我没有在PHP7中测试过任何一个。我知道sort_order指令的放置在php5.x下有效


PHP7中的排序已更改,您将必须显式定义唯一的排序顺序,因为具有多个相同的排序顺序(即,三个不同项目的等级5)会产生奇怪的结果。stackoverflow.com/questions/34281113/...
惨败实验室

我已经为答案添加了修改。
ProxiBlue 2015年

谢谢ProxiBlue; 我们会检查。我们发现重新索引存在一些问题;在某些情况下,它会重现此问题。转到“ TAX配置”,保存一些“不变”,TAX返回。
琼M

8

在Magento 1.6.2和PHP 7.0.2上,我通过以下方式解决了它:

1-首先创建一个本地config.xml:将/app/code/core/Mage/Sales/etc/config.xml复制到/app/code/local/Mage/Sales/etc/config.xml

2-像这样更改 在此处输入图片说明

现在,它可以正确计算:

在此处输入图片说明


1
您不能覆盖本地代码池中的XML文件(仅覆盖自动加载的PHP类),因此它必须是实际自定义模块的config.xml的一部分。
Fabian Schmengler,

1
如前所述,这是使用本地config.xml完成​​的。
archigrafix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.