Paypal Schnittstelle - Kritik an Fehlerbehebung

Guten Abend, Ich muss jetzt mal das alte Thema Paypal-Schnittstelle aufgreifen. In der Vergangenheit heißt diskutiert. z.B. hier: installation-einstieg-f9/paypal-checkout-fehler-api-fehlercode-10413-t429.html Alte Paypalschnittstelle hatte die Bestellpostionen mit Namen etc. an Paypal übermittelt. So wie es auch korrekt ist und für den Kunden optisch gut dargestellt ist. Eine sOrderID etc. ist dort einfach Quatsch. Dann kam es zu sporatischen Fehler / API Error welche man nicht nachvollziehen konnte. Dann wurde diese Funktion einfach entfernt. Der Fehler kommt nicht von Paypal, sonder weil Shopware die Netto-Summe falsch berechnet! Die einfachste Lösung ist natürlich dies direkt auszukommentieren, was eig. sehr schwach ist, da man dies ja nicht Lösung nenne kann. Nach langen Support Tickets und eigenen Mitschitten wurde einiges klar. Hier die relevanten Variablen: ====================== AMT=148.40 SHIPPINGAMT=14.00 HANDLINGAMT=0 TAXAMT=21.46 ITEMAMT=112.94 L_NAME0=ARTIKEL1 L_NUMBER0=SW0001 L_AMT0=63.03 L_TAXAMT0=11.97 L_NAME1=ARTIKEL2 L_NUMBER1=SW0002 L_AMT1=49.92 L_TAXAMT1=9.48 ====================== TaxAMT und ItemAMT müssen dabei der Summe der Line Items - also L_AMT0 + L_AMT1 sowie L_TAXAMT0 und L_TAXAMT1 entsprechen. In unserem Beispiel haben wir: L_AMT0 = 63.03 L_AMT1 = 49.92 ============= Erwartet: 112.95 Vom Shopware Shop übertragen: 112.94 L_TAXAMT0 = 11.97 L_TAXAMT1 = 9.48 ============= Erwartet: 21.45 Von Shopware Shop übertragen: 21.46 Wie man sieht, stimmen die Werte nicht Überein! Und dies für dann zu den Paypal API Abbrüchen. Da ich dem Fehler auf den Grund gehen wollt und es auch aktiv einen Kunden betrifft, der durch diesen Fehler mehrere Tausend Euro Umsatz durch die Lappen gegangen sind, habe ich mir die Sache im Detail angeschaut. Im Warenkorb liegen 2 Artikel. Artikel1: Brutto: 75,00 € Netto: 63,025210084 Gerundet: 63,03 € Dieser gerundete Nettowert wird an Paypal gesendet. Artikel2: Brutto: 59,40 € Netto: 49,9159663866 Gerundet: 49,92 € Dieser gerundete Nettowert wird an Paypal gesendet. Dann gibt es noch die Summe als Nettowert im Warenkorb / Variablen. Welcher natürlich als Summe und Referenz auch an Paypal gesendet wird. Diese ist: 112,94 € Jeder der Rechnen kann sollte auffallen, dass 1 Cent fehlt. 63,03 + 49,92 = 112,95 € !! Genau aus diesem Grund nimmt Paypal die Transaktion nicht an und es kommt zu diesem APIError. Dies passiert immer in bestimmten Konstellationen, wenn die Nachkommastellen ungünstig stehen. Shopware rechnet die Summe mit allen Nachkommastellen: 63,025210084 + 49,9159663866 = 112,9411764706 Gerundet: 112,94 € Das ist also ganz klar ein SW Fehler. Ich kann nur allen raten, welche das alte SW 3.5 nutzen, und die Artikelpositionen wieder reaktivert haben dies zu fixen! Sonst kann es doch einen erheblichen Umsatzschaden geben

[quote=„ottscho“]Ich kann nur allen raten, welche das alte SW 3.5 nutzen, und die Artikelpositionen wieder reaktivert haben dies zu fixen! Sonst kann es doch einen erheblichen Umsatzschaden geben[/quote] Danke für die Info. Wie ist das gemeint „alte SW 3.5“ Um welche PayPal-Version geht es denn, oder hat das damit nicht s zu tun? Wir haben relativ häufig Abbrüche mit PayPal und wissen nicht warum.

Hallo Frank, wenn du den Bereich in folgenden Dateien unter “engine/connectors/paypalexpress/” auskommentiert hast, kann dir nichts passieren : doPaymentSUser.php: Zeile 76-93 DoExpressCheckoutPayment.php: Zeile 100-117 [quote] if(!empty($item_tax_amount)) { $params[‘SHIPPINGAMT’] = number_format($shipping,2,’.’,’,’); $params[‘HANDLINGAMT’] = 0; $params[‘TAXAMT’] = number_format($item_tax_amount,2,’.’,’,’); $params[‘ITEMAMT’] = number_format($item_amount,2,’.’,’,’); $basket = $payment->getBasket(); foreach ($basket[‘content’] as $key => $item) { $item[‘tax’] = str_replace(’,’, ‘.’, $item[‘tax’]); $item[‘amount’] = str_replace(’,’, ‘.’, $item[‘amount’]); $params[‘L_NAME’.$key] = $item[‘articlename’]; $params[‘L_NUMBER’.$key] = $item[‘ordernumber’]; $params[‘L_AMT’.$key] = number_format($item[‘amount’]-$item[‘tax’],2,’.’,’,’); $params[‘L_TAXAMT’.$key] = number_format($item[‘tax’],2,’.’,’,’); } } [/quote] Sobal der Code aktiv ist, kann es zu Probleme kommen. Daher wurde der Code komplett entfernt und keine Einzelpositionen mehr übermittelt. Was natürlich aus Kundensicht nicht optimal ist.

Okay, danke für die Erklärung. Ist bei uns auskommentiert.

auch bei uns stellt sich dieses Problem: sorderID ist an dieser Stelle einfach nicht ausreichend. Da das Problem jetzt doch schon einige Zeit besteht, sollte man annehmen, dass hierfür auch eine Lösung kommt. Wie sieht es damit aus?

Den auskommentierten Bereich wieder aktivieren und mit eigenem Code sicherstellen, dass die Beträge (Cent Bereich) 100%ig passen. Dann sollte es gehen.