我们正在使用1.9&php7; 检测到此问题并涉及贝宝可疑欺诈行为(由于差额)。
所有正确的前端(适用税);但是在结帐和计算时,magento使用总计不含税。
实际错误订单计算:
不含税的产品价格+含税的运费=付款总额
切换到php5,计算正确。
有想法吗
谢谢!
我们正在使用1.9&php7; 检测到此问题并涉及贝宝可疑欺诈行为(由于差额)。
所有正确的前端(适用税);但是在结帐和计算时,magento使用总计不含税。
实际错误订单计算:
不含税的产品价格+含税的运费=付款总额
切换到php5,计算正确。
有想法吗
谢谢!
Answers:
我创建了一个magento模块,以解决php7总计计算中的magento问题。我特别遇到的问题是,使用amazonpayments结帐页面上的amazon模块将税款加到总计中两次,以加薪。
archigrafix在本文(/magento//a/97107/35665)中提供的答案解决了我的问题-因此,这只是打包到模块中的修复程序。
我真的不知道这是否有任何帮助,但有一点需要研究。
您的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下有效
在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
现在,它可以正确计算: