5

Paypal と Magento 1.7.0.2 で四捨五入の問題があります - サイトの価格はすべて税込みで、税は 20% (VAT) で算出されます。

私はチェックアウトに行き、すべてが正しいです:

ここに画像の説明を入力

次に、[place order] をクリックします。Paypal は次のようになります。総計が 1 ペンス少なくなるため、これは正しくありません。これは、税の四捨五入が原因のようです。

ここに画像の説明を入力

場合によっては問題なく機能しますが、税金が正しく丸められない場合もあります。app/code/core/Mage/Tax/Model/Calculation.phpの税計算メソッドcalcTaxAmount()を変更してみました

これを calcTaxAmount メソッドに追加したところ、修正されたように見えましたが、商品ページの価格が正しくなくなりました (1p 減)。

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

これはバグだと確信していますが、アイデアがありません。誰かが以前にこれに遭遇し、解決策を持っている場合は、喜んで聞いてください. どんな助けでも大歓迎です。

編集:Magentoでの私の税金設定は次のとおりです

ここに画像の説明を入力

4

6 に答える 6

2

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でこれを行ってください。できれば最初のオプション!:-)

于 2013-01-28T12:43:35.757 に答える
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

コミュニティを悩ませているこの問題の解決策を見つけたと思います。

価格に税金が含まれている場合、税金の計算は間違っています。

これが修正です - 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

Paypal の magento モジュール (少なくとも私の 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;
}

将来的に 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

上記のコードを変更せずに、転送カートの項目を「いいえ」に変更したところ、うまくいきました。

マジェント 1.9.0.1

参考までに-それが機能するかどうかをテストしてください。

ドミトロ

于 2015-01-21T04:28:43.590 に答える