我对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中的税务设置
答案 0 :(得分: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/
请记住不要修改核心文件 - 在本地创建副本
答案 1 :(得分: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);
你需要在后端转换paypal moule中的转移购物车行项目
如果有人知道更好的解决方案,那么只需覆盖运费即可让我知道
答案 2 :(得分:1)
这个问题一直困扰着我(并且看起来像magento社区已经很久了),感谢ShopWorks向正确的方向推进(包括他的代码片段,感谢伙伴!但是如果回到来自快速结账的购物车,添加了一个检查以防止这个。)$ 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;
}
}
这是一个黑客,并将其视为这样。我的同事目前正在对其进行测试,但目前似乎还行,按单价设置税收计算方法也很有帮助(我们的会计师对此安排感到满意,但这是针对英国的,我不确定是否其他国家会对这种特定的税收计算方法不满意。)
我操作$ request ['AMT']的原因是因为偶尔计算$ finalValue变量会产生-0.9999重复整数,这对任何人都没用,我的数学很糟糕,所以如果有人想改进的话在此,请这样做!
一如既往不要覆盖核心目录中的nvp.php,创建一个单独的重写模块或在app / local / mage中执行此操作。第一个选择最好! : - )
答案 3 :(得分:1)
有一个&#34; bug&#34;在magento模块中的Paypal(至少在我的Magento 1.8.0上);
它位于Mage_Paypal_Model_Cart
类。
要验证金额是否正确,第381行的方法_validate()
汇总订单中的所有商品价格,添加运费和税金,并将结果与订单总价值进行比较(来自订购方法getBaseGrandTotal()
)
但有时,金额之间有0.009999999999999999的差异(它必须来自不同的舍入方法,我不知道);所以这些项目无效,第146行的方法getItems()
返回false。
在我的情况下,这导致客户支付不同金额和欺诈怀疑&#34;在他们的订单上标记。
我通过改变比较方法(第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的差异......
希望这有帮助。
答案 4 :(得分:0)
我使用CE1.7.0.2并且已经坚持这个问题好几天,尝试了几个解决方案,最后登陆了Adam Hall的修复/黑客。理想对我来说是合理的,所以我在我的网站上应用它,一切顺利到今天早上,我意识到税额调整对我们的情况不起作用。
我们在加利福尼亚州并在全州销售商品,加州的客户将被征收销售税,而其他人则不会。因此,当税额为零并且必须减去差额时,它将产生负税额,显然将被paypal拒绝。因此,当从税额减去差额时,我添加了一个条件语句
if ($request['TAXAMT'] > 0) {
$request['TAXAMT'] = $request['TAXAMT'] - $finalValue;
} else {
$request['SHIPPINGAMT'] = $request['SHIPPINGAMT'] - $finalValue;
}
如果税额为零,我将调整运费金额而不是税额。 (当然,如果税收和运费都是免费的,这将无效,但我认为这不会在实际业务中发生。)希望这可以帮助那些与我们有同样问题的人。
答案 5 :(得分:-1)
我刚刚将转运购物车订单项更改为“否”,没有上述代码更改..并且它有效。
Magento 1.9.0.1
仅供参考 - 测试它是否适合您。
德米特罗