Falscher Gesamtpreis bei VM PayPal standard

  • Zusammen,

    eben hat mich ein Kunde angerufen, dass von PayPal mehr abgebucht wurde, als im Warenkorb als Gesamtbetrag ausgewiesen wurde.

    Ich habe jetzt gesehen, dass das durch einen Artikel kam, bei dem der Endpreis (manuell) überschrieben ist, berechnet wurde aber der reguläre (Basis-)Preis abzüglich eines Rabatts für den betreffenden Hersteller.

    regulärer Preis 32,00 Euro, Preis mit 1% Rabatt 31,68 Euro (von PayPal verwendet), Endpreis überschrieben mit 19,00 Euro, demnach von PayPal zuviel berechnet 12,68 Euro pro Artikel.

    Wenn man den Endpreis überschreiben kann, sollte das auch von PayPal so berücksichtigt werden!

    Viele Grüße - Harald

  • Hallo Milbo,

    ich habe es so eingestellt, dass man in PayPal die einzelnen Positionen zu sehen bekommt und da wurde eben bei einer Position der (Basis-)Preis abzüglich Rabatt von PayPal berechnet, anstatt der überschriebene Endpreis, d.h. es war schon die Berechnung dieser einzelnen Position falsch und dadurch dann natürlich auch der Gesamtpreis.

    Viele Grüße - Harald

  • Alles klar. Das ganze ist aus Prinzip fehleranfälliger durch das Rundungsproblem, als wenn man die gesamtposition sendet. Ich gucks mir an. Ebenso anzumerken, das ganze "override price" ding ist eigentlich ein nicht todzukriegendes vm1 feature.


    Eventuell sollte man es verstecken und nur per hidden config zeigen.

  • Also wir nutzen dort (plugins/vmpayment/paypal/paypal/helpers/paypal.php Zeile 116)

    Code
    1. function getProductAmount ($productPricesUnformatted) {
    2. if ($productPricesUnformatted['salesPriceWithDiscount']) {
    3. return vmPSPlugin::getAmountValueInCurrency($productPricesUnformatted['salesPriceWithDiscount'], $this->_method->payment_currency);
    4. } else {
    5. return vmPSPlugin::getAmountValueInCurrency($productPricesUnformatted['salesPrice'], $this->_method->payment_currency);
    6. }
    7. }


    Man muß hier nach einem neuem "if" Fall suchen, wenn das Produkt nen überschriebenen Preis hat. Wäre cool, wenn du das testest mit

    Code
    1. function getProductAmount ($productPricesUnformatted) {
    2. if ($productPricesUnformatted['salesPriceWithDiscount']) {
    3. return vmPSPlugin::getAmountValueInCurrency( $productPricesUnformatted['salesPriceWithDiscount'], $this->_method->payment_currency );
    4. } else if (!empty($productPricesUnformatted['override']) and !empty($productPricesUnformatted['product_override_price'])) {
    5. return vmPSPlugin::getAmountValueInCurrency( $productPricesUnformatted['product_override_price'], $this->_method->payment_currency );
    6. } else {
    7. return vmPSPlugin::getAmountValueInCurrency($productPricesUnformatted['salesPrice'], $this->_method->payment_currency);
    8. }
    9. }
  • Hallo Milbo,

    muss ich dazu den Quelltext wie oben ändern?

    Wird die Datei dann bei späteren Updates wieder mit der neuesten Version überschrieben?

    Müsstest Du den benötigten Code nicht bei den Berechnungen des Warenkorbs finden? Dort war nämlich alles richtig, es wurde scheinbar also nur ein falscher Wert an PayPal übergeben.

    Viele Grüße - Harald

  • Nu genau. Die Datei wie oben händisch anpassen.


    "Wird die Datei dann bei späteren Updates wieder mit der neuesten Version überschrieben?"


    Ja natürlich. Aber wenn dein Test läuft, dann wäre es einfach im nächsten Core. Die Stelle ist ja überschaubar.


    "Dort war nämlich alles richtig, es wurde scheinbar also nur ein falscher Wert an PayPal übergeben."
    Ja eben und warum soll dann der Fehlerhafte Code in der Warenkorbberechnung sein, wenn es da richtig ist? Die Funktion da oben ist die, welche den Preis für das Produkt raussucht, welcher von Paypalplugin an Paypal übergeben wird.

  • Hallo Milbo,

    Ja eben und warum soll dann der Fehlerhafte Code in der Warenkorbberechnung sein, wenn es da richtig ist? Die Funktion da oben ist die, welche den Preis für das Produkt raussucht, welcher von Paypalplugin an Paypal übergeben wird.

    So war das von mir nicht gemeint! ;)

    Ich meinte, dass man im Code des Warenkorbs schauen könnte, wie der benötigte Wert richtig berechnet wird/wurde/werden müsste... ;)

    Ich werde den neuen Code testen!

    Viele Grüße - Harald

  • Hallo Milbo,

    ich habe den Code im TESTshop geändert und eine Bestellung mit dem betreffenden Artikel ausgeführt. Ich habe den Kauf zwar nicht bezahlt, aber die Summe stimmt jetzt bei PayPal.

    Viele Grüße - Harald

    P.S.: Bei der "Gegenprobe" im (noch unveränderten) Liveshop wird an dieser Stelle schon der falsche Preis angezeigt!

  • Na ob das auch mit normalen Produkten weiterhin richtig geht. Nach obiger Fall logik (im Code) gibts
    normaler Preis
    reduzierter Preis
    überschriebener Preis.

    Jetzt müssen wir alle Preise testen. Klar der Fokus lag erstmal auf dem überschriebenem Preis, aber geht der alte Kram noch?

  • Hallo Milbo,

    ich habe jetzt eine "Testbestellung" gemacht mit je einem Produkt mit Normalpreis, überschriebenem Preis, Preis beim Produkt mit Rabatt reduziert und Preis über eine Regel für den Hersteller mit Rabatt reduziert und die Gesamtsumme hat gestimmt.

    Viele Grüße - Harald

  • Hallo Milbo,

    ich habe den Shop gestern aktualisiert auf 3.6.2
    Heute kam eine Bestellung über PayPal und es wurde wieder der falsche Gesamtbetrag abgebucht.

    Ich hatte eine Datei nach Deinen Anweisungen geändert und nachgefragt, ob diese Änderung auch bei einem späteren Update erhalten bleibt. Du meintest, dass Du diese Änderung mit in die nächste Version übernehmen wirst.

    So wie es aussieht, ist diese manuelle Korrektur jetzt aber doch nicht in der aktuellen Version mit drin.

    Eigentlich müsste es fürs Erste reichen, wenn ich die geänderte Datei wieder per FTP hochlade (zusätzlicher if case), oder?

    Viele Grüße - Harald

  • Derweil hab ich eine neue Version gemacht und ein paar Committs http://dev.virtuemart.net/atta…50_package_or_extract.zip

    Nee, ich habe eine neue Version gemacht, natürlich mit den Änderungen und bin auch davon ausgegangen, daß du diese Version testest.

  • Getestet hatte ich die Änderungen in der paypal.php, die Du vorgeschlagen hattest...die hatten funktioniert. So wie es jetzt ist, funktioniert es leider nicht und es hat leider auch nix genützt die geänderte paypal.php wieder hochzuladen.

    Gleichzeitig gab es ja die Probleme mit den Child-Produkten...das hatte ich schon mit der jeweils neusten Version ausprobiert bis es geklappt hat.

    Da haben wir uns wohl, zumindest, was das Thema PayPal angeht, etwas missverstanden...

  • Nicht wirklich, weil ich habe ja in der Datei nur meine Änderungen eingebaut. Daher auch keine Änderung bei hochladen der "alten" datei, weil die ja programmatisch dasselbe sein sollte.


    War dein Test vorher eventuelle fehlerhaft? das passiert schnell.