Paypal Checkout 1.1.4 Transaktions-ID in Datenbank nicht identisch mit PayPal Transaktions-ID

Hallo OXID-Forum,

ich habe letzte Woche vom mit OXID mitgelieferten Paypal Modul auf das neue Paypal Checkout
gewechselt. Ich meine dieses Modul hier:

Wir benutzen Version 1.1.4 in einem OXID-Shop 6.1.5 / PHP 6.2.
Das Modul an sich läuft auch fehlerfrei, hatte ich ja vorher in der Sandbox getestet, auch mit den
Live Zahlungen gibt es soweit kein Problem.

Eine Sache ist mir aufgefallen:
Die in der OXID Datenbank benutzte ID in der Tabelle oscpaypal_order Spalte OXPAYPALORDERID und
Tabelle oxorder Spalte OXTRANSID ist nicht identisch mit der bei Paypal verwendeten ID für die Zahlung.

Im Backend unter Bestellungen wird im Reiter “Paypal Checkout” die richtige Paypal ID angezeigt,
Erstattungen, Teilrückzahlungen funktioniert auch alles problemlos.
Ich vermute, dass das Modul für alle Vorgänge eine interne ID vergibt und dieses dann irgendwie mit der echten ID koppelt? Die zugehörigen “echten” ID´s sind nirgendwo mehr in der Datenbank zu finden.

Mit dem alten PayPal Modul wurden in der Tabelle oxorder auch immer die “echten” PayPal Id´s gespeichert, so dass diese dann weiterverarbeitet werden konnten.

Hier einmal ein paar Screenshots, die die ID in der Shop Datenbank, sowie die zugehörigen ID´s
bei Paypal und im Backend unter “Paypal Checkout” zeigen.

Im Normalfall ist so etwas vielleicht nicht auffällig, aber da wir die ID weiterverarbeiten haben wir teilweise keine Zuordnung mehr.
Hintergrund: Wir haben als WaWi Lexware Professional und benutzen das Portal “Payjoe” sowie die Software “OSC Ware” um Bestellungen automatisiert zu verarbeiten.
OSC Ware überträgt die Bestellungen sowie die Paypal ID aus der Tabelle oxorder in Lexware,
Payjoe macht dann über die Transaktions-ID den Abgleich zu den fakturierten Rechnungen,
damit unsere Buchhaltung es durch einen automatischen Abgleich zwischen den Paypal Zahlungen
zu den Rechnungen leichter hat.

Solange die verwendeten E-Mail Adressen im Shop und bei Paypal identisch sind, bekommt Payjoe das auch über die E-Mail Adresse zugeordnet, bei Bestellungen wo dies nicht übereinstimmt, funktioniert das dann nicht mehr. Zum Glück sind das nicht viele Buchungen, aber der Abgleich über die ID ist natürlich eindeutiger als über die E-Mail Adresse, da einige Kunden auch mehrfach hintereinander bestellen,
wenn etwas vergessen wurde.

Ist es irgendwie möglich, dass über das Paypal Checkout die “echte” ID in der Tabelle oxorder hinterlegt wird?

Bin ich hier damit überhaupt richtig damit oder muss ich so etwas bei GitHub direkt einstellen?
(wobei ich da keine Ahnung hab wie, das ist nicht mein "Steckenpferd ;-))

Viele Grüße,
Michael Brümmer

Das würde mich stark wundern. PayPal verwaltet zwei verschiedene IDs, die auf dieselbe abgeschlossene Transaktion verweisen. Einer wird für den Verkäufer/Händler verwendet und der andere wird für den Zahler verwendet und angezeigt. PayPal stellt die Transaktions-ID des Zahlers nicht für den Händler zur Verfügung.

Hallo Rubbercut,

dann sagen wir mal so:
In dem alten Paypal Modul hat die Paypal Transaktions-ID in der Tabelle oxorder mit der Transaktions-ID übereingestimmt, die wir als Händler für die Zahlung auch sehen, wenn wir uns bei Paypal einloggen
und die entsprechende Transaktion aufrufen.

Mit dem Paypal Checkout Modul haben wir diese Übereinstimmung nicht mehr. Die Transaktions-ID in der Tabelle oxorder weicht von der Transaktions-ID der Zahlung bei Paypal ab.

Vielleicht is es die ID die Paypal für den Käufer verwendet, aber die Zuordnung über die ID ist so jedenfalls nicht mehr möglich.

Viele Grüße,
Michael

Wie geschrieben, gibt es zwei IDs. Einmal eine für den Käufer, die man im Konto sieht und einmal eine für den Verkäufer über die API. Beide verweisen auf die gleiche Transaktion. Eine Nummer zur Verifikation könnte die Rechnungsnummer sein.

Die Rechnungsnummer existiert ja bei Paypal sowie im Shop nicht, diese wird ja durch die WaWi generiert. Payjoe macht dann die Zuordung Rechnungsnummer zu Paypal Zahlung über die ID, die aus der Tabelle oxorder ausgelesen und dann als Datenfeld im dem Datensatz der Rechnung gespeichert wurde.

Payjoe liest bei Paypal die Transaktionen aus, vergleicht dann die bei Paypal hinterlegte ID mit der ID die bei den Aufträgen in Lexware gespeichert sind und bekommt logischerweise keinen Match mehr, weil diese in der OXID Datenbank gespeicherten ID´s dann die anderen ID´s sind.

Leider ist die Feldanzahl / Art, die über Payjoe auf beiden Seiten eindeutig zugeordnet werden können begrenzt. Paypal bietet beim Auslesen z.B. leider keine Bestellnummer vom OXID-Shop an, sonst könnte man ja diese zur eindeutigen Identifikation der Zahlung nutzen.

Im Moment läuft es wie gesagt über die E-Mail Adresse, von daher erst einmal nicht so dramatisch, weil das nicht viele Fälle sind, aber dadurch ist es halt aufgefallen, das sich da etwas geändert hat.

Ergänzung:
Hatte gerade noch einmal geschaut, ob man noch einen Match über die Bestellnummer hinbekommen kann, da diese ja auch eindeutig ist, aber nein, geht nicht.

Mit dem bei OXID mitgelieferten Modul wird in dem Feld “Bestelldetails” bei Paypal die Bestellnummer übermittelt.
Mit dem Modul “Paypal Checkout” wird keine Bestellnummer mehr übermittelt, statt dessen steht dort
nur noch “Zahlung bei Metropolis Drachen”
Lässt sich bei uns im Paypal Konto einwandfrei nachvollziehen. Bis zur Umstellung auf Paypal Checkout
wurde immer eine Bestellnummer an Paypal übermittelt, danach nicht mehr.
Also ein echter Rückschritt für automatische Zuweisung von Buchungen Paypal → WaWi

Die vom Checkout übermittelte ID (welche das auch immer ist) nützt eben nichts, da diese nicht im Paypal Konto unter den Transaktionen auftaucht, folglich über von Paypal generierte Kontoauszüge auch nicht auftaucht.

evtl steht jetzt die ID in der Tabelle oscpaypal_order

Leider nicht, die Transaktions-ID in oscpaypal_order ist die gleiche wie in oxorder, also auch nicht verwendbar. Ich habe mich mal in Paypal eingeloggt und eine aktuelle Transaktions-ID, die dort bei den Zahlungen aufgeführt ist in der kompletten Datenbank suchen lassen, leider ist die nirgendwo zu finden.

Diese ID kannst nur über die API zum Suchen verwenden.

Das heisst dann im Umkehrschluss, dass das Modul dann über die API die Transaktions-ID abruft, die in der Tabelle oscpaypal_order bzw. oxorder abgelegt ist und daraus dann bei Bestellungen im Reiter “Paypal Checkout” die ID abruft und anzeigt, welche ich dann bei Paypal bzw. in den Mails von PayPal als Transaktionscode auch sehen kann?
Wäre es dann möglich, diesen Transaktionscode, der über die API ausgelesen wird irgendwo in der Tabelle oxorder zu speichern? Dann hätte man wieder eine eindeutige Zuordnung.
Wie Payjoe das ganze verarbeitet kann ich leider nicht sagen, aber Payjoe kann nur die Transaktionscodes anzeigen, wie sie auch bei Paypal im Backend stehen und in den Mails übermittelt werden.

Alternativ wäre es schön, wenn vielleicht irgendwo auch wieder die Bestellnummer des Shops an Paypal übergeben wird, das wäre ja genau so eindeutig.

Nein. Der Transaktionscode des Kunden (der im PayPal Konto angezeigt wird ) ist dem Verkäufer bzw. der API nicht zugänglich.

Hmm… Also wenn ich mich in unser Firmen Paypal Konto einlogge, sehe ich doch einen Transaktionscode, der wird uns ja auch per Mail in den Zahlungsbestätigungen von Paypal zugesendet.
Dann sollte die API doch auch diese Information abgreifen können?

Wie wurde das denn in dem alten Paypal Modul gelöst, dort wurde dieser Transaktionscode doch auch an den Shop übermittelt und dort in oxorder abgelegt.

Also entweder reden wir über unterschiedliche ID´s / Transaktionscodes oder ich habe da einfach ein Verständnisproblem das etwas nicht mehr funktioniert, was jahrelang problemlos funktionierte :smiley:

Grad noch eingefallen: Das Modul muss ja eigentlich Zugriff darauf haben, im Reiter “Paypal Checkout” wird ja exakt dieser Transaktionscode angezeigt, wie er auch im Verkäufer Konto bei Paypal angezeigt wird. Nur wird dieser nicht mehr irgendwo in der Datenbank abgelegt sondern wohl über die API Abfrage generiert?

Das ist mir neu: Transaction Search (paypal.com). Aber gut, dann gibt’s vielleicht doch nen Weg. Dann durchsuche mit phpMyAdmin alle Tabellen oder vielleicht steht’s auch in den Logs.

Genau das hatte ich ja gemacht, phpMyAdmin aufgemacht, dann zum Vergleich eine alte Transaktion
vor der Umstellung auf das Checkout im Paypal-Backend rausgesucht und diesen Transaktionscode gesucht.
2 Treffer in der Datenbank, einmal in der Tabelle des alten Paypal Moduls und einmal in oxorder.

Dann eine neue Transaktion nach der Umstellung rausgesucht und dort ebenfalls den Transaktionscode
der Zahlung gesucht, Ergebnis 0 Treffer.

Im Backend vom Shop wird aber im Reiter Paypal Checkout bei den Bestellungen genau diese ID angezeigt, die im Backend bei Paypal zu sehen ist abr nicht in der Datanbank auffindbar ist.

Vielleicht drücke ich mich einfach blöd aus, aber mit dem alten Paypal Modul war die Transaktions-ID, die in der Tabelle oxorder gespeichert wurde identisch mit dem Transaktionscode, der bei Paypal unter den Transaktionen angezeigt wird. Seit der Umstellung auf das Checkout steht dort eine völlig andere ID drin, so wie ich Dich verstanden haben, wohl eine ID, die nur über die API benutzt wird und dann die entsprechenden Transaktionen zuordnen kann (und damit dann natürlich auch wiederum die “richtige” Nummer im OXID-Shop Backend beim Paypal Checkout anzeigt)

Wie schon gesagt, das müsste nicht einmal sein, es würde ja auch ausreichen, wenn die Bestellnummer aus OXID wieder an Paypal übergeben wird, das wäre ja genauso eindeutig.

Auf jeden Fall möchte ich mich schon einmal für Deine Zeit bedanken, die Du bisher für das Antworten und ausführen gebraucht hast!

Dann ruft das Modul die Infos vielleicht “on the fly” ab. Mir ist das nicht bekannt, was aber nicht heißt, dass es da keine Möglichkeit gibt.

Nachtrag: gibt’s tatsächlich: Solved: [PayPal checkout] How to get Transaction ID after … - PayPal Community (paypal-community.com)

@djelo: In der oxorder->oxtransid und in der oscpaypal_order->oxpaypalorderid wird die PayPal-Order-ID gespeichert. Das ist faktisch das Gegenstück zur oxorder->OXID auf der PayPal Seite. Zu einer PayPal-Order kann es wiederum mehrere Transaktionen geben (Teilzahlungen, Rückbuchungen, Gutschriften etc.) Jede dieser Transaktionen hat eine eigene Transaction-ID. Im Idealfall hat eine PayPal-Order nur eine Transaction-ID, im worst-case N Transaktionen mit entsprechend vielen Transaction-IDs. Darum können wir eine Transaction-ID nicht auf dieser Datenbank-Ebene speichern.
Im Moment holen wir die Transactions on the fly, wie @rubbercut richtig gesehen hat. Hintergrund ist, das Transaktionen zur Order auch in anderen Systemen erzeugt werden können, die mit PayPal kommunizieren. So sind wir in dem Moment sicher, das wir alle Transaktionen zeigen, die zu der Order gehören.
Ich nehme das trotzdem mit, das wir diese Daten in Zukunft beim Abruf von PayPal in einer Extra-Tabelle persestieren. Damit WaWis (so wie Du es beschrieben hast) darauf zugreifen können.

die “erste” Transaction-ID wurde aber in den älteren Versionen in oxorder->oxtransid gespeichert!
Diesen gespeicherte Wert wurde bisher vielfach verwendet.

@Mario_Lorenz
Hallo Mario,

dann war es im alten Paypal Modul vermutlich die erste ID, die für die ursprüngliche Zahlung generiert wurde, die unter oxorder->oxtransid gespeichert wurde.
Diese haben wir über OSC Ware ausgelesen und in unsere WaWi übertragen.
Über OSC Ware haben wir auch nur Zugriff auf die Felder bzw. Spalten, die in der Tabell oxorder liegen, selbst wenn die ID woanders liegen würde, würde uns das nichts nützen.

Soll auch jetzt kein Meckern sein oder so, ich bin ja froh, das es so viele Entwickler gibt, die Module kostenlos für OXID Entwickeln, auch wenn das “Leben nach Composer” deutlich schwieriger geworden ist :wink: Also zumindest gefühlt für den Endanwender, aber das ist ein ganz anderes Thema :wink:

Ich bin einfach nur so neugierig und hake nach, weil genau diese Funktionalität im alten Paypal Modul immer da war, es wurde immer die ID der ursprünglichen Zahlung in die Datenbank eingetragen und auch die Bestellnummer als Beschreibung an Paypal übermittelt.
Wir hatten also mit dem alten Paypal Modul also insgesamt 3 Möglichkeiten der Zuordnung: ID, Bestellnummer und E-Mail. Jetzt gibt es nur noch E-Mail, was dann problematisch wird wenn Shop E-Mail und Paypal E-Mail nicht identisch sind.

Liegt das an verschiedenen Versionen der benutzen API?

Viele Grüße,
Michael

Hallo Mario,

Wie soll unsere Buchhaltung jetzt in der zwischenzeot die Paypal Zahlungen zu den Bestellungen zuordnen?
Wir hatten vorher ein Modul welches das gemacht hat. Da lädt man einfach paypal transaktions export.csv hoch und anhand der Transaktionsid hat er dann die Bestellnummer dahinter geschrieben und im fibu export format exportiert auf welche Bestellungen die Zahlungen sich beziehen.

Das war ein ganz einfacher Abgleich.
Wenn Ihr hier jetzt eine andere Struktur hinterlegt dann müsst ihr auch eine möglichkeit der Zuordnung geben. Ansonsten kann man das Modul nicht verwenden. Wir müssen unsere Umsätze monatlich melden und wir haben nicht das personal hier manuell irgendwas zu prüfen oder selbst eine API abfrage zu entwickeln. Diese zuordnung ist eine Core funktion des alten Paypal moduls gewesen. DAS MUSS AUCH IM NEUEN MODUL ENTHALTEN SEIN!. Ohne zuordnung kommen wir buchalterisch in teufels Küche und das muss auch bis zum Monatsabschluss da sein. Hinterlegt hier bitte wenigstens eine funktion die wir aufrufen können um die zuordnung zu machen.

  • Fügt ihr diese funktion zeitllich zum Monatabschluss hinzu?
  • Was ist der Zeitrahmen?
  • Was ist bis dahin der “Hotfix” prozess um das Problem zu lösen?

Einerseits ja, die API ist neu. Aber es gibt eher systemische Probleme:

  1. Die Transaction-ID auf oxorder-Ebene zu speichern, deckt 90% der Fälle ab. Das ist also nicht 100% zuverlässig.
  2. Erschwerend kommt hinzu, das viele Informationen erst zu verschiedenen Zeitpunkten zur Verfügung stehen. Wir könnten die Order-ID noch im Nachgang zu PayPal übertragen (Das wird sicher auch die beste Lösung sein), dadurch ergeben sich zwei Probleme. Jede Kommunikation mit der API kostet Zeit. Wir können nicht noch einen Call während des Checkout-Prozesses platzieren. Der Kunde wartet nicht gerne. Machen wir es später, dann müssen ggf. WaWi-Prozesse warten, bis alles zusammen ist.

Aber wenn ich es richtig verstehe, dann wäre das WaWi-Problem mit einer eindeutigen Bestellnummer bei PayPal lösbar. Dann könnten wir die Transactions zwar immer noch in einer separaten Tabelle speichern, aber sie verursachen nicht den 10%-Worst-Case (siehe oben…) wenn wir stattdessen die erste TransactionID, die mit PayPal erzeugt wird auf oxorder-Ebene speichern würden …