5

我对 Paypal 和 Magento 1.7.0.2 有一些四舍五入的问题 - 网站上的所有价格均含税,税费为 20%(增值税)。

我会去结帐,一切都是正确的:

在此处输入图像描述

然后我会点击下订单,Paypal 会是这样,这是不正确的,因为现在总计少了 1 便士。这似乎是由于税收是如何四舍五入的。

在此处输入图像描述

在某些情况下,它可以正常工作,但在其他情况下,税收四舍五入不正确。我已尝试更改app/code/core/Mage/Tax/Model/Calculation.php中的税收计算方法calcTaxAmount()

我将此添加到似乎可以修复它的 calcTaxAmount 方法中,但它会导致产品页面上的价格不正确(少 1 便士)。

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

我很确定这是一个错误,但我没有想法。如果有人以前遇到过这种情况并有解决方案,我会很高兴听到它。非常感谢任何帮助。

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

在此处输入图像描述

4

6 回答 6

2

我今天为我的客户“修复”了这个问题,但对解决方案并不满意。但它有效。

最好将此文件复制到本地文件夹:app/code/core/Mage/Paypal/Model/Api/Nvp.php

我在第 606 行添加了这段代码(仅用于快速结帐),所以它看起来像这样。

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

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

并且您需要在后端的 paypal moule 中打开 Transfer Cart Line Items

如果有人知道更好的解决方案,那么只需覆盖运费让我知道

于 2012-11-05T20:25:57.380 回答
2

这个问题一直困扰着我(从外观上看,magento 社区已经很久了),这要归功于 ShopWorks 朝着正确的方向推进(包括他的代码片段,谢谢队友!但是,如果从 express 回到购物车,它会出错结帐,添加了一个签入以防止这种情况发生。)$request 参数我想出了以下修复(/hack):

在 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'];
    }
}

此外,还需要在 call() 函数中放置以下内容(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;
    }
}

这是一个 hack,并这样对待它。我的同事目前正在测试,但目前似乎还可以,按单价设置计税方法也很有帮助(我们的会计师对这种安排很满意,但这是针对英国的,我不确定是否其他国家会不赞成这种特定的税收计算方法)。

我操作 $request['AMT'] 的原因是因为有时 $finalValue 变量的计算会产生一个 -0.9999 重复整数,这对任何人都没有用,我的数学很烂,所以如果有人想改进这个,请这样做!

一如既往不要覆盖核心目录中的 nvp.php,创建一个单独的重写模块或在 app/local/mage 中执行此操作。首选首选!:-)

于 2013-01-28T12:43:35.757 回答
2

我想我已经找到了解决这个困扰社区的问题的方法。

如果您的价格包含税,则税款计算是错误的。

这是修复 - 在 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/

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

于 2012-10-23T07:38:50.973 回答
1

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

为了验证金额是否正确,第_validate()381 行的方法汇总了订单中的所有商品价格,加上运费和税金,并将结果与​​订单的总价值(从 order 方法获得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;
}

还是希望以后的diffs不要超过0.009999999...

希望这可以帮助。

于 2014-03-13T17:22:39.983 回答
0

我正在使用 CE1.7.0.2 并且已经被这个问题困扰了好几天,尝试了几种解决方案,最后找到了 Adam Hall 的修复/破解。理想对我来说看起来很合理,所以我将它应用到我的网站上,一切都很顺利,直到今天早上,我意识到税额调整不适合我们的情况。

我们在加利福尼亚州,在全州销售东西,加利福尼亚州的客户将被收取销售税,而其他人则不会。因此,当税额为零并且必须减去差额时,它将产生一个负税额,这显然会被贝宝拒绝。所以当从税额中减去差额时,我添加了一个条件语句

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

如果税额为零,我将调整运费而不是税额。(当然如果税和运费都是免费的,这是行不通的,但我认为这不会在实际业务中发生。)希望这可以帮助那些和我们有同样问题的人。

于 2016-01-29T20:07:18.520 回答
-1

我只是将转移购物车行项目更改为“否”,而没有更改上述代码..它起作用了。

Magento 1.9.0.1

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

德米特罗

于 2015-01-21T04:28:43.590 回答