首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento & Paypal税舍入问题

Magento & Paypal税舍入问题
EN

Stack Overflow用户
提问于 2012-08-08 16:29:06
回答 6查看 12.3K关注 0票数 5

我有一些四舍五入的问题与贝宝和Magento 1.7.0.2 -所有的价格在网站上包括税收和税收是20% (增值税)。

我要去结账,一切都是正确的:

然后我会点击订购,贝宝将是这样,这是不正确的,因为总金额现在减少了1便士。这似乎是由税收的四舍五入造成的。

在某些情况下,这是可行的,但在另一些情况下,税收被错误地舍入。我尝试修改app/code/core/Mage/ tax /Model/Calculation.php中的税收计算方法calcTaxAmount()

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

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

我很确定这是个窃听器,但我没有主意了。如果有人之前遇到过这种情况,并有了解决办法,我很高兴听到。任何帮助都很感激。

编辑:以下是我在Magento中的税务设置

EN

回答 6

Stack Overflow用户

发布于 2012-10-23 07:38:50

我想我已经找到了困扰社会的解决办法。

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

下面是修正后的Mage_Tax_Model_Calculation::calcTaxAmount():

改变条件:

代码语言:javascript
复制
if ($priceIncludeTax)...

至:

代码语言:javascript
复制
if ( ! $priceIncludeTax ) ...

所以情况看起来是:

代码语言:javascript
复制
if ( ! $priceIncludeTax ) { 
    $amount = $price*(1-1/(1+$taxRate)); 
} else { 
    $amount = $price*$taxRate; 
}

有关详细信息,请查看我的评论:http://www.magentocommerce.com/boards/viewthread/247201/P45/

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

票数 2
EN

Stack Overflow用户

发布于 2012-11-05 20:25:57

我今天为我的客户“修正”了这个问题,但对解决方案并不满意。但很管用。

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

我在第606行添加了此代码(仅用于快捷结帐),因此如下所示。

代码语言:javascript
复制
$request['SHIPPINGAMT'] = ($request['AMT'] - ($request['TAXAMT'] + $request['ITEMAMT']));

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

并且您需要在后端的paypal鼠标中转换传输购物车线项目

如果有人知道更好的解决方案,那就直接覆盖运费,让我知道。

票数 2
EN

Stack Overflow用户

发布于 2013-01-28 12:43:35

这个问题一直困扰着我(多年来一直困扰着magento社区),感谢ShopWorks朝着正确的方向推进(包括他的代码片段,谢谢伙计!)但是,如果从快捷签出返回到购物车,则会出现错误,添加了一个签入以防止出现这种情况。)对于$request参数,我得到了以下修复(/hack):

在Nvp.php的第606行中放置以下内容:

代码语言:javascript
复制
$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行):

代码语言:javascript
复制
$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,是因为偶尔计算$finalValue变量会产生一个-0.9999重复整数,这对任何人都没有用,我的数学很烂,所以如果有人想改进它,请这样做!

与往常一样,不要覆盖核心目录中的nvp.php,创建一个单独的重写模块,或者在app/local/mage中这样做。第一个方案最好是:-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11868985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档