Jump to content

Rundungsfehler PayPal beseitigen


Recommended Posts

Hallo,

scheinbar gibt es das Problem mit dem Rundungsfehler beim PayPal-Modul öfter.
Zumindest habe ich schon den einen oder anderen Beitrag dazu hier im Forum gesehen.
Irgendwie habe ich aber nicht die Lösung dafür gefunden :-(

Bei mir kommt bei jeder Bestellung mit PayPal-Zahlung eine Fehlermeldung:

1. ist der Status auf "Fehler bei der Bezahlung" und

2. Vorsicht xy,15 € bezahlt statt xy,14 € bezahlt

 

Dabei kommt es vor, dass es mal ein Cent zu viel aber auch ein Cent zu wenig ist.

Kann mir bitte jemand eine Lösung dafür geben?
Denn das geht ja garnicht!

 

VG
Tom

Edited by Tom1967 (see edit history)
Link to comment
Share on other sites

  • 2 years later...

Bei uns ist das Problem auch aufgetaucht. Gibt es inzwischen eine richtige Lösung dafür? Ich meine es kann doch nicht sein, dass PayPal da einfach rundet wie die wollen, sondern es sollte sich nach dem Shop gerichtet werden.

Wir hatten den Rundungsfehler nämlich vorher im Shop, weshalb sich der Kunde beschwerte, dass der Shop nicht richtig rundet, was dadurch gelöst werden konnte, dass wir auf "Runden der Gesamtsumme" umgestellt haben! Dementsprechend ist es hier keine Lösung einfach wieder auf "Runden der einzelnen Artikel" umzustellen, denn das hat genau den gleichen Rundungsfehler verursacht wie ihn PayPal jetzt macht. Klar im Endeffekt liegt das Problem in den krummen Preisen, die der Kunde vorgibt, aber die denkt der sich ja auch nicht einfach aus!

Prestshopversion ist die akutelle 1.7er und das PayPal Modul ist auch aktuell! Immerhin gibt PayPal im Modul den Hinweis auf den Rundungsfehler schon selbst, aber das kann es doch nicht sein, dass da nichts gemacht wird.
 

Link to comment
Share on other sites

Das Modul stammt übrigens nicht von Paypal selbst, sondern vom französischen Entwickler 202ecommerce, der für solche Bugs seit Jahren berüchtigt ist. Hier hat man wohl aus der Not, etwas ändern zu müssen, eine Tugend gemacht. Die User sollen lieber unsinnige Einstellungen wählen. Der Casus knacktus scheint die folgende Funktion in der paypal.php zu sein: 

public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown', $message = null, $transaction = array(), $currency_special = null, $dont_touch_amount = false, $secure_key = false, Shop $shop = null)
    {
        if ($this->needConvert()) {
            $amount_paid_curr = Tools::ps_round(Tools::convertPrice($amount_paid, new Currency($currency_special), true), 2);
        } else {
            $amount_paid_curr = Tools::ps_round($amount_paid, 2);
        }
        $amount_paid = Tools::ps_round($amount_paid, 2);
        $cart = new Cart((int) $id_cart);
        $total_ps = (float)$cart->getOrderTotal(true, Cart::BOTH);
        if ($amount_paid_curr > $total_ps+0.10 || $amount_paid_curr < $total_ps-0.10) {
            $total_ps = $amount_paid_curr;
        }

Hier wird gerundet, was das Zeug hält, und die Logik scheint dabei irgendwie auf der Strecke zu bleiben. 

Link to comment
Share on other sites

On 6/7/2019 at 3:20 PM, Wuschel said:

Das Modul stammt übrigens nicht von Paypal selbst, sondern vom französischen Entwickler 202ecommerce, der für solche Bugs seit Jahren berüchtigt ist. Hier hat man wohl aus der Not, etwas ändern zu müssen, eine Tugend gemacht. Die User sollen lieber unsinnige Einstellungen wählen. Der Casus knacktus scheint die folgende Funktion in der paypal.php zu sein

Naja, aber es wird immerhin mit "offiziell" betitelt ... 

Ansonsten schon Mal danke für die schnelle Antwort. Wenn ich das aber richtig sehe, geht es hier um die Verifikation der Zahlung, durch Vergleich des Preises, den der Shop errechnet hat und den Preis, der an PayPal gezahlt wurde. Sprich die ganze Funktion wird erst aufgerufen, wenn der Kunde von PayPal zurückkommt. Zwar ist das der Grund für die Fehlermeldung an den Kunden, dennoch entsteht der eigentliche Fehler ja schon früher bei der Übergabe der Zahlungsinformationen an PayPal.

Dabei muss, so wie ich das bisher in Erfahrung bringen konnte, entweder ein richtig gerundeter Preis übergeben werden, wenn das Rundungsproblem durch das Modul entsteht und/oder PayPal angewiesen werden, dass keine Einzelstückangaben ausgewertet werden sollen, wenn das Problem auf der Seite von PayPal liegt. Sprich die ganze Bestellung müsste als ein Produkt verarbeitet werden, so dass nur die Gesamtsumme gerundet wird. Bisher konnte ich noch nicht rausfinden, wo das gemacht wird, dabei bin ich aber auch schon über die von dir angesprochene Funktion gestoßen, wobei da jedoch bei mir der korrekte Rundungsmodus von Prestashop verwendet wird.

Link to comment
Share on other sites

Gerundet wird in diesem Modul leider ausgiebig. Vielleicht wirst du ja eher in der Klasse PaypalCapture.php fündig oder in der ApiPaypalPlus.php. Ich bin mir aber nicht mal sicher, ob das eigentliche Problem nicht Rundungsfehler in Presstashop selbst sind, denn Paypal rundet nicht mathematisch, sondern kaufmännisch - schau mal hier:

 

Edited by Wuschel (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...