Magento的贝宝和税收四舍五入问题(Magento & Paypal tax rounding

2019-07-30 20:23发布

我有Paypal和Magento的1.7.0.2部分四舍五入问题 - 网站上的所有价格包括税和所得税为20%(增值税)制定。

我会去收银台,一切都是正确的:

然后我会点击下订单,并支付宝将是这样的,这是不正确,因为现在总计为1P少。 这似乎是由税收是如何四舍五入是原因。

在某些情况下,它工作正常,但在其他的税是不正确四舍五入。 我试图使在应用程序/代码/核心/法师/税/型号/ Calculation.php税务计算方法calcTaxAmount变化()

我说这这似乎解决它calcTaxAmount方法,但它造成的产品页面上的价格则是不正确的(1P以下)。

$amount = $this->roundUp($amount);

我敢肯定这是一个错误,但我的想法。 如果有人遇到在此之前,有一个解决方案,我很高兴听到这个消息。 任何帮助非常赞赏。

编辑:这是我的Magento的税收设置

Answer 1:

我想我已经找到了解决这个问题困扰着社会。

如果你的价格包括税收,税收的计算是错误。

这里的修复 - 在Mage_Tax_Model_Calculation :: calcTaxAmount():

更改条件:

if ($priceIncludeTax)...

至:

if ( ! $priceIncludeTax ) ...

所以,条件是这样的:

if ( ! $priceIncludeTax ) { 
    $amount = $price*(1-1/(1+$taxRate)); 
} else { 
    $amount = $price*$taxRate; 
}

有关详细信息,请参阅我的意见: http://www.magentocommerce.com/boards/viewthread/247201/P45/

切记不要修改核心文件 - 在本地创建一个副本



Answer 2:

我的“固定”这个今天我的客户,但与解决方案不是真正的快乐。 但是,它的工作原理。

这是更好,如果你把这个文件拷贝到本地文件夹:应用程序/代码/核心/法师/贝宝/型号/原料药/ Nvp.php

我上线606添加了这个代码(仅适用于快速结账),所以它看起来是这样。

$request['SHIPPINGAMT'] = ($request['AMT'] - ($request['TAXAMT'] + $request['ITEMAMT']));

$response = $this->call(self::SET_EXPRESS_CHECKOUT, $request);
$this->_importFromResponse($this->_setExpressCheckoutResponse, $response);

而你需要在贝宝MOULE在后端转弯输送车线项目

如果有人知道一个更好的解决方案则正好覆盖shippingcost让我知道



Answer 3:

这个问题一直困扰着我(和它看起来的年龄Magento的社区),这要归功于ShopWorks推在正确的方向(包括他的代码片断,感谢队友!但是它会错误了,如果要回从快递车。结账时,$请求参数中添加了检查,以防止这种情况),我想出了以下修补程序(/劈):

在线Nvp.php 606将以下:

$totalValue = $request['TAXAMT'] + $request['ITEMAMT'];
$finalValue = $totalValue - $request['AMT'];

if($request['SHIPPINGAMT'] > 0) {
    $request['SHIPPINGAMT'] = ($request['AMT'] - ($request['TAXAMT'] + $request['ITEMAMT']));
    $totalValue = $request['TAXAMT'] + $request['ITEMAMT'] + $request['SHIPPINGAMT'];
    $finalValue = $totalValue - $request['AMT'];
}

if($request['AMT'] != $totalValue) {
    if($totalValue > $request['AMT']) {
        $request['TAXAMT'] = $request['TAXAMT'] - $finalValue;
    } elseif($totalValue < $request['AMT']) {
        $request['TAXAMT'] = $request['TAXAMT'] + $finalValue;
    } else {
        $request['AMT'] = $request['TAXAMT'] + $request['ITEMAMT'];
    }
}

此外,以下需要被也被放置在()函数调用(Nvp.php的线938)内:

$totalValue = $request['TAXAMT'] + $request['ITEMAMT'] + $request['SHIPPINGAMT'];
$finalValue = $totalValue - $request['AMT'];

if($request['AMT'] != $totalValue) {
    if($totalValue > $request['AMT']) {
        if($finalValue > 0) {
            // its preferable that we change the tax amount over the grand total amount
            $request['TAXAMT'] = $request['TAXAMT'] - $finalValue;
        } else {
            $request['AMT'] = $totalValue;
        }
    } elseif($totalValue < $request['AMT']) {
        if($finalValue > 0) {
            // its preferable that we change the tax amount over the grand total amount
            $request['TAXAMT'] = $request['TAXAMT'] + $finalValue;
        } else {
            $request['AMT'] = $totalValue;
        }
    } else {
        $request['AMT'] = $totalValue;
    }
}

这是一个黑客,并把它当作这样的。 目前我的同事正在测试,但似乎暂时是好的,但也有利于通过价格来设定税的计算方法(我们的会计师是否喜欢这个安排,但是这是英国,我不知道,如果其他国家将在特定的税额计算方法皱眉)。

我操纵$请求[“AMT”]的原因是因为$最终值变量的偶尔的计算会产生-0.9999重复整数这是没有用的人,我的数学很烂所以如果有人想在这个改进,请这样做!

一如往常不覆盖在核心目录nvp.php,创建一个单独的重写模块或在app /本地/法师做到这一点。 第一种选择最好! :-)



Answer 4:

有一个“错误”在PayPal在Magento模块(至少在我的Magento 1.8.0); 它驻留在Mage_Paypal_Model_Cart类。

为了验证该数额是正确的,方法_validate()上线381概括了所有项目的价格从订单,加上运费和税,并将结果与订单的总价值进行比较(从订单方法得到getBaseGrandTotal()

但有时候,有量之间的差异0.009999999999999999(它必须来自不同的圆整方法,我不知道); 这样的项目是不是有效的,并且该方法getItems()从管线146点返回false。

在我的情况下,这导致客户支付他们的订单不同数量和“欺诈嫌疑”标志。

我固定它通过改变从比较方法(线404):

if (sprintf('%.4F', $sum) == sprintf('%.4F', $referenceAmount)) {
    $this->_areItemsValid = true;
}

$diff = abs(sprintf('%.4F', $sum) - sprintf('%.4F', $referenceAmount));

if ($diff < 0.01) {
     $this->_areItemsValid = true;
}

我还是希望不会有超过0.009999999在未来的diff ...

希望这可以帮助。



Answer 5:

我使用CE1.7.0.2并一直停留在这个问题上天,尝试了几种解决方案,并最终降落在亚当·霍尔的修复/黑客。 理想看起来合理的我,所以我将其运用在我的网站,一切都很顺利,直到今天早上,我意识到,对税额进行调整,不会对我们的情况下工作。

我们在加利福尼亚州和卖东西都在美国,在加利福尼亚州的客户将被收取销售税,而其他外部环境不会。 所以,当税额为零,必须减去的差异,就会产生这显然将贝宝拒绝负税额。 因此,从纳税额减去差的时候,我增加了一个条件语句

if ($request['TAXAMT'] > 0) {
    $request['TAXAMT'] = $request['TAXAMT'] - $finalValue;
} else {
    $request['SHIPPINGAMT'] = $request['SHIPPINGAMT'] - $finalValue;
}

如果税额为零,我会调整发货量,而不是税额。 (当然,如果税收和运费都是免费的,这是不行的,但我不认为这会在实际业务发生的。)希望这能帮助那些谁具有相同的问题,因为我们的。



Answer 6:

我只是改变了运送车线项目“NO”,而上面的代码改变..和它的工作。

Magento的1.9.0.1

仅供参考 - 测试它是否适合你。

德米特罗



文章来源: Magento & Paypal tax rounding issue