• Resolved bennol

    (@bennol)


    Hallo,

    bei Verwendung Ihres PayPal Plugins sind wir auf ein Problem Preis-Rundungen gesto?en. Das Plugin benutzt nicht direkt die von WooCommerce bereitgestellten Klassen WC_Cart / WC_Order und die darin berechneten Summen, sondern berechnet den Gesamtpreis noch einmal selbst erneut. Da WooCommerce aber intern Produktpreise mit mehr als zwei Dezimalstellen unterstützt und das Plugin die selbst berechneten Preise auf zwei Dezimalstellen rundet, kommt es auf eine andere Gesamtsumme und die PayPal-Verarbeitung schl?gt fehl mit dem Fehler:

    Validierungsfehler: PayPal-Betr?ge stimmen nicht überein (brutto XXX,XX, sollte YYY,YY sein). [..]

    Beispiel: 15 Stück eines Produktes zum Nettopreis von 67,226 €

    Die Utility-Klassen
    CartItemData.php
    OrderItemData.php
    ?rekonstruieren” den Preis der einzelnen Produkte, indem Sie die von WooCommerce gelieferte Gesamtsumme der 15 Produkte (1008,39 €) durch 15 teilen und anschlie?end auf zwei Dezimalstellen runden:

    return $this->format( $this->data['subtotal'] / $this->get_quantity() );
    // bzw.
    return $this->format( $this->data['line_subtotal'] / $this->get_quantity() );

    Damit steht hier der gerundete Preis von 67,23 für die einzelnen Produkte.

    Daraus wird dann in der Methode get_item_list() der Datei
    OrderDataCommon.php
    eine ItemList der zu bezahlenden Produkte für die PayPal Transaktion erzeugt.

    Das Payment-Objekt für die Abwicklung der Zahlung wird in
    WCPayPalPayment.php
    erzeugt und nutzt dazu die Methode get_total() aus OrderDataCommon.php.
    Die Methode get_total() nutzt aber nicht die von WooCommerce in WC_Cart/WC_Order berechneten Summen, sondern summiert alle gerundeten Elemente der ItemList.

    Dadurch erwartet WooCommerce eine eingehende Zahlung von 1008,39 € (67,226 * 15), w?hrend das Plugin die Summe auf 1008,45 € (67,23 * 15) berechnet hat.

    Mir ist nicht ganz klar, warum das Plugin überhaupt Summen neu ausrechnet und nicht die von WooCommerce bereitgestellten Klassen nutzt. über die Verwendung von mehreren Dezimalstellen in Preisen l?sst sich streiten, aber wenn WooCommerce diese unterstützt sollte sich das Plugin auch daran halten.

    Ich freue mich über eine Rückmeldung und ggf. einen Ausblick, ob dies Plugin-seitig korrigiert wird.
    Viele Grü?e
    Benno L.

Viewing 6 replies - 1 through 6 (of 6 total)
  • Plugin Support Andreas W.

    (@aweissinpsyde)

    Hallo @bennol

    kannst du bitte die Datei im Anhang https://gist.github.com/vendidero/284cbe7e1bc56008fcebdbb755c01dd0 mit der bestehenden ersetzen. Bitte die Bestehende umbenennen und bitte dann erneut testen.

    Das sollte das Problem beheben.

    Thread Starter bennol

    (@bennol)

    Die verlinkte Datei rundet nur die Versandkosten auf die im Shop angezeigten stellen. Wurde getestet und wie erwartet: Keine ?nderung der Problematik.

    Das Problem bleibt, dass die vom PayPal Plugin verwendete OrderData Klasse die einzelnen Produktpreise rundet (unabh?ngig vom Format, das für die Kunden im Shop angezeigt wird). Damit kommt sie auf andere Summen als die WC_Order Klasse nach der sich das Plugin richten sollte.

    Sehr einfach zu sehen im Kontext von PatchProvider::get_payment_amount_patch:

    
    // Korrekte Summe der Bestellung
    // Aus WooCommerce Klasse WC_Order
    $this->order->get_total()
    // -> "1199.98"
    
    // Falsche Summe der Bestellung
    // Aus Plugin Klasse
    // WCPayPalPlus\WC\Payment\OrderData bzw. OrderDataCommon
    $this->order_data->get_total() 
    // -> "1200.04"
    

    Das PayPal Plugin verwendet die letztere, falsch gerundete Summe, w?hrend doch die Werte der WooCommerce Klasse WC_Order für die Zahlung benutzt werden sollten und nicht irgendwelche selbst rekonstruierten und gerundeten Werte.

    • This reply was modified 6 years ago by bennol.
    • This reply was modified 6 years ago by bennol.
    • This reply was modified 6 years ago by bennol.
    Plugin Support Andreas W.

    (@aweissinpsyde)

    Hallo @bennol

    gerne gebe ich das so an unswere Entwickler weiter. Die Entwicklung des Plugin ist nach den Vorgaben von PayPal entstanden und jegliche ?nderungen müssen auch mit diesen Abgesprochen werden. Warum hier andere Klassen benutzt werden, kann ich zum jetzigen Zeitpunkt sagen, werde dem aber nachgehen.

    Thread Starter bennol

    (@bennol)

    Update

    Okay, es scheint so, als ob die PayPal API zwangsl?ufig die einzelnen Produktpreise auf zwei Dezimalstellen rundet und sich deshalb die Plugin Klassen auch daran halten und den Preis erneut berechnen.
    Da WooCommerce aber Preise mit mehreren Dezimalstellen unterstützt führt das dann zu unterschiedlichen Summen.

    Wenn die gerundeten Summen der einzelnen Produkte einer Zahlung nicht mit dem Gesamtbetrag übereinstimmen lehnt die PayPal API die Zahlung ab.
    In diesem Fall l?sst sich das auch nicht durch euer Plugin beheben und Preise mit mehr als zwei Dezimalstellen werden von PayPal nicht unterstützt und sind daher auch mit diesem Plugin unm?glich.

    Trotzdem vielen Dank für die Hilfe und viele Grü?e
    Benno L.

    • This reply was modified 6 years ago by bennol.
    Plugin Support Andreas W.

    (@aweissinpsyde)

    Hallo @bennol

    Hast du das Runden in WooCommerce aktiviert? PayPal l?sst 2 Dezimalstellen zu, drei leider nicht mehr. Z.B. kann es passieren, das bei Versandkosten 3 Stellen nach dem Komma gerechnet werden.

    Vielen Dank für deine Bemühungen

    Thread Starter bennol

    (@bennol)

    Unsere eingetragenen Netto-Preise haben teilweise mehr als zwei Dezimalstellen (intern, im Shop werden Preise mit zwei Dezimalstellen ausgegeben), um bei Mehrwertsteuer-Berechnung ?sch?ne” glatte Brutto-Preise zu erm?glichen, auch wenn z.B. 10 Stück auf einmal gekauft werden.

    Das führt aber hin und wieder zu dem beschriebenen Fehler bei der Bezahlung mit PayPal – es sieht also so aus, als ob wir wieder auf zweistellige Netto-Preise umsteigen und Preise mit XX,99 / XX,01 in Kauf nehmen müssen.

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Rundungsfehler Produktpreis’ is closed to new replies.