[PayPal Express Integration] PayPal rechnet/rundet falsch

hurga_gonzales

Captain
Registriert
Aug. 2004
Beiträge
3.263
Hallo,

ich sitze hier an einem doofen Problem. Ich integriere gerade PayPal Express
in einen Shop.

Das würde gut funktionieren, wenn PayPal richtig rechnen würde.

Beispiel:

Nettopreis eines Artikels im Cart 57.983 EUR, was bei einer Menge von 2 Stk.
115.966 EUR ergibt.

Mit 19% Mwst. sind das 137.999 EUR was gerundet logischerweise 138.00 EUR
gibt.

Aber PayPal rechnet generell nur mit zwei Stellen, was kaufmännisch schon
mal komplett falsch ist, da man mindestens 3 Stellen braucht, um
Rundungsfehler bei mehreren Stück pro Artikelposition auszuschließen:

2 x 57.98 EUR = 115.96 EUR

Mit Mwst. 19% = 137.99 EUR

Also 1 Cent Verlust gemacht.

Blöd nur, dass wir Bruttopreise angeben und somit überhaupt nur eine
Rechnung mit drei Stellen nach dem Komma Sinn macht.

Es kommen praktisch bei jedem Warenkorb falsche Beträge bei PayPal heraus.

Beispiel 2:

1 Stk. zu 59 EUR brutto

2 Stk. zu á 69 EUR brutto = 138 EUR

Summe brutto 197 EUR.

Laut PayPal ist die Summe aber 196,99 EUR, da diese den Nettowert der Preise
mit nur zwei Stellen berechnen, obwohl das nicht sein darf, da ja durch
mehrere Stück einer Position durchaus respektable Differenzen entstehen
würden.

Wie löst Ihr das?

Das sieht nicht gut aus, wenn ich dem Kunden erst die richtigen Bruttopreise
anzeige, er aber im Warenkorb dann eine nach PayPal falsch errechnete Summe
sieht.

hurga
 
Ich kenn mich in dem Bereich gar nicht aus, aber kann man die Berechnung und Summierung nicht vorher machen, bevor man das ganze an PayPal übergibt?
 
Ja klar, das ist durchaus möglich und wird ja auch so gemacht, aber PayPal rechnet selbst Menge*Nettopreis pro Artikel und Position, leider mit nur 2 Nachkommastellen, wo 3 oder gar 4 richtig sind (kaufmännisch, bzw. im Hinblick auf Währungen).

Das ist ja das Problem. Ich muss Beträge mit 2 Nachkommastellen übergeben, da PayPal nicht mehr unterstützt und von daher schon falsch rechnet, denn der Bruttobetrag der rauskommt, ist nicht der, für den die Produkte verkauft werden (druch die Rundung immer 1-2 Cent niedriger).
 
Mich würde gerne deine konkrekte Implementierung von PayPal Express interessieren. An welcher Stelle und vor allem wie übergibst du den Gesamtbetrag? Schließlich solltest du PayPal 197 EUR übergeben. Mir ist fraglich, woher PayPal den Wert 196.99 EUR nimmt.
 
Nein, man kann PayPal nicht 197 EUR übergeben.
Denn PayPal errechnet die Beträge selbst und das leider auf Basis von Zahlen mit nur zwei Stellen hinter dem Komma.

Hier mal ein Dump der Variable, wobei "ITEMTOTAL" eine Kontrollvariable mit 3 Nachkommastellen von mir ist.

ITEMTOTAL 165.546
L_PAYMENTREQUEST_0_AMT0 57.98
L_PAYMENTREQUEST_0_AMT1 49.58
L_PAYMENTREQUEST_0_DESC0 [empty string]
L_PAYMENTREQUEST_0_DESC1 [empty string]
L_PAYMENTREQUEST_0_NAME0 Behncke Comfort
L_PAYMENTREQUEST_0_NAME1 Behncke Smart
L_PAYMENTREQUEST_0_NUMBER0 3
L_PAYMENTREQUEST_0_NUMBER1 2
L_PAYMENTREQUEST_0_QTY0 2.00
L_PAYMENTREQUEST_0_QTY1 1.00
PAYMENTREQUEST_0_AMT 197.00
PAYMENTREQUEST_0_HANDLINGAMT 0.00
PAYMENTREQUEST_0_INSURANCEAMT 0.00
PAYMENTREQUEST_0_ITEMAMT 165.55
PAYMENTREQUEST_0_SHIPDISCAMT 0.00
PAYMENTREQUEST_0_SHIPPINGAMT 0.00
PAYMENTREQUEST_0_TAXAMT 31.45

Wie gesagt, ich kann nur Beträge mit 2 Stellen an PayPal übergeben und das ist das Problem, denn

2 * 57.98 + 1 * 49.58 = 165.54 EUR und nicht 165.55 EUR, wenn man mit 3 Stellen rechnen würde, was richtig ist.

Mwst. dazu rechnen, kommt man NICHT auf 197 EUR, sondern auf 196.99 EUR.

Wenn ich also 197.00 EUR in "PAYMENTREQUEST_0_AMT" schreibe wie oben gezeigt, gibt es einen Fehler der PayPal API, dass AMT und ITEMAMT nicht übereinstimmen.
 
Zuletzt bearbeitet:
Ich habe mir schon fast gedacht, dass mit "Item Fields" gearbeitet wird. An deiner Stelle würde ich auf die Ust.-Angaben komplett verzichten, d.h.:

L_PAYMENTREQUEST_0_AMT0 69.00
L_PAYMENTREQUEST_0_AMT1 59.00
PAYMENTREQUEST_0_AMT 197.00
PAYMENTREQUEST_0_ITEMAMT 197.00

Des weiteren habe ich noch folgendes dazu gefunden, https://www.x.com/thread/48377?tstart=30, ebenfalls ungelöst.

PayPal ist, was die Integration und Support angeht, meiner Meinung nach der Horror. Teilweise sind noch viele veraltete Dokumentationen im Umlauf. Man weiß gar nicht, was aktuell ist und was nicht. Über die Gebühren für Verkäufer wollen wir mal gar nicht sprechen.

Mit PayPal solltest du dich so wenig wie möglich rumschlagen, hauptsache das Geld kommt an. Ob nun zusätzliche Angaben gemacht werden, wie etwa die einzelnen Steuern oder Produktangaben, ist reine Kosmetik. Schließlich musst du eine Rechnung erstellen und auf die kommt es an. Ich persönlich handhabe es so, nur den Endbetrag, ganz ohne einzelne Produktangaben, zu übermitteln. Die Angaben zur Bestellung übernimmt der Shop selbst, in dem im letzten Bestellschritt die Bestellung nochmals zusammengefasst wird. Die PayPal-Abwicklung erfolgt einen Schritt vorher.


P.S. Übrigens habe ich mich schon immer über den Sinn dieser zusätzlichen Angaben gewundert. Sie mögen zwar ganz nett sein, aber bei einer Überweisung gebe ich schließlich auch nur einen Betrag und evtl. Verwendungszweck an. Wozu also der Mehraufwand ;) (v.a. weil das eher dein Shop-System liefern sollte!)
 
Zuletzt bearbeitet:
Hi Trainmaster,


zunächst vielen Dank für Deine ausführliche Antwort. Deine Variante funktioniert auch, ist aber, auch kosmetisch gesehen, nicht ganz zufriedenstellend. Gut ist, dass die Beträge nun stimmen.

Eher schlecht ist:
- die Loginseite ist auf Englisch und die Beträge werden in USD angezeigt; nach Login wird die Währung auf immer noch als USD angezeigt, aber die Warenkorb-Felder sind zumindest in Deutsch
Nutze ich vielleicht die falsche Sandbox?
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=

Ich gebe aber den Parameter "currencyCode" beim Request in "EUR" mit.
 
hab ich das irgendwie falsch verstanden ? oder was ist an ,99 so falsch ? gibt doch 99 cent also muss man doch nciht auf voll 1€ beträge rechnen
kann mir nicht vorstellen das paypal falsch rechnet xD^^

sry falls ich das falsch verstanden hab ^^


EDIT:
ah kay xD
,999 sind gerundet 1€ ;P
habs verstanden^^
mein fehler

kann aber sein das kaufmänisch in diesem fall zu gunst des kunden gerundet werden muss
ist in mehreren fällen so also egal was is immer abrunden dann wär der betrag korrekt
 
Hallo Inevil,

ja, hast Du falsch verstanden. Es geht um die 1-Cent Stelle nach dem Komma, also die zweite Stelle. Bei Umrechnung von Brutto zu Netto und andersrum MUSS man 3, besser noch mehr Stellen verwenden, sonst kannst Du einen Betrag inkl. Mwst. nicht genau in Netto umrechnen.

PayPal nutzt aber nur zwei Stellen nach dem Komma, so dass immer eine Rundungsdifferenz von 1-x Cent entsteht.

Aber Trainmaster hat hier zumindest für ein Workaround gesorgt, mit dem man keinen Erklärungsbedarf bei seinen Kunden hat, warum der Rechnungsbetrag vom abgebuchten Betrag abweicht, nämlich indem man einfach nur Brutto-Beträge und vor allem OHNE Mehrwertsteuerbetrag an PayPal übergibt.

Bei tausenden von Umsätzen summiert sich das nicht nur, sondern muss auch buchhalterisch, sowie dem Finanzamt gegenüber erklärt werden.
 
dazu hab ich keine ahnung wie das geregelt is ^^
hab bis jetzt nicht viel auf dem gebiet gemacht
 
Es ist wirklich so, dass PayPal hauptsächlich den US-Markt bedient und alles Deutsche recht halbgar betreut.

Mal sehen, was die deutschen Community Betreuer dazu sagen. Antwort habe ich da allerdings erst eine und da wollte sich einer der Mods die Testumgebung von mir ansehen.
 
Ich nutze diesselbe Sandbox URL, daran kann es also nicht liegen. Die Sprache kannst du per LOCALECODE setzen, probiere das mal aus. Seltsamerweise ist das bei mir automatisch Deutsch. Eventuell hat es auch mit den Spracheinstellungen der Accounts zu tun, ich bin mir nicht sicher. Bezüglich der Währung solltest du PAYMENTREQUEST_n_CURRENCYCODE den Wert EUR mitgeben. Dann klappt's auch mit den Euros.

Hier noch eine Übersicht:
https://cms.paypal.com/us/cgi-bin/?...eveloper/e_howto_api_nvp_r_SetExpressCheckout

P.S. Ich nehme an, dass der folgende Beitrag von dir stammt: https://www.x.com/thread/51400?tstart=0 ? Die Antwort darauf ist ja wohl ein schlechter Witz. PayPal ist schon so ein Saftladen ...
 
Zuletzt bearbeitet:
Danke, funktioniert nun so in Deutsch und per

PAYMENTREQUEST_0_CURRENCYCODE = EUR

Bekomme ich auch EUR angezeigt. Etwas schwer, diese Informationen aus den leicht undurchsichtigen Docs rauszufischen. Daher vielen Dank!

HA, die Antwort habe ich bisher noch gar nicht gesehen. Die sind echt geil....und zwischen den Zeilen heißt das: "Das ist nicht godly USA, darum schert uns das einen Dreck." .....lustig sowas.
 
Zurück
Oben