Hematek-Solutions
Gut bekanntes Mitglied
Hallo zusammen,
ich habe einen Fall, der dem bereits bekannten Fehlerbild aus diesem Thread sehr ähnlich ist:
Den Ablauf konnten wir inzwischen ziemlich genau nachvollziehen.
Auch der Webhook kommt im Shop korrekt an:
Trotzdem wurde im Shop kein Zahlungseingang angelegt, und die Bestellung blieb intern unbezahlt.
Nach unserem Verständnis wurde nach der bezahlten Order
Der Capture-Webhook sucht in
Der Webhook kommt für
Das passiert, obwohl die Shopbestellung selbst vorhanden ist.
Unser aktueller Verdacht:
Das Fehlerbild ähnelt damit dem bekannten „capture failed“-Problem. Die Ursache scheint bei uns aber nicht ein zu früher Webhook zu sein, sondern eine mehrfach neu erzeugte PayPal-Order während eines EPS-/
Viele Grüße
Ayhan
ich habe einen Fall, der dem bereits bekannten Fehlerbild aus diesem Thread sehr ähnlich ist:
Webhook::handleCall - capture failed for method PayPal Checkout
Den Ablauf konnten wir inzwischen ziemlich genau nachvollziehen.
Umgebung
| Komponente | Wert |
|---|---|
| JTL-Shop | 5.8.1 |
| PayPal Checkout Plugin | 2.3.1 |
| Zahlungsart | PayPal Checkout |
| Funding Source | eps |
| Bestellsumme | 66,90 € |
Zahlung und Webhook
Die Zahlung wurde bei PayPal erfolgreich abgeschlossen:
Code:
Capture-ID: 8NY36945FA930384W
PayPal Order-ID: 7V873957XX307563P
Status: COMPLETED
Betrag: 66,90 €
Auch der Webhook kommt im Shop korrekt an:
Code:
Event: PAYMENT.CAPTURE.COMPLETED
custom_id: 6ac13c44483292.70394816
order_id: 7V873957XX307563P
Trotzdem wurde im Shop kein Zahlungseingang angelegt, und die Bestellung blieb intern unbezahlt.
Auffälliger Ablauf
Im Zahlungslog tauchen innerhalb desselben Zahlungsprozesses mehrere PayPal-Orders auf:
Code:
3KJ314719B213241C → recreatePPOrder()
7V873957XX307563P → recreatePPOrder() ← tatsächlich bezahlte Order
4Y81660578823735K
Nach unserem Verständnis wurde nach der bezahlten Order
7V873957XX307563P bereits eine weitere PayPal-Order erzeugt und die in tzahlungsid hinterlegte txn_id entsprechend überschrieben.Der Capture-Webhook sucht in
WebhookHandler.php anschließend explizit nach der PayPal-Order-ID:
SQL:
LEFT JOIN tzahlungsid
ON tbestellung.kBestellung = tzahlungsid.kBestellung
AND tzahlungsid.txn_id = :txnId
Der Webhook kommt für
7V873957XX307563P, in tzahlungsid war zu diesem Zeitpunkt aber offenbar bereits eine andere PayPal-Order-ID hinterlegt. Der Join liefert dadurch keine passende txn_id mehr, und im Log folgt:
Code:
handleCaptureWebhook: shop order does not exists
Das passiert, obwohl die Shopbestellung selbst vorhanden ist.
Möglicher Zusammenhang mit PAYER_ACTION_REQUIRED
InCheckoutPage::finishOrder() wird bei Status OrderStatus::STATUS_PAYER_ACTION_REQUIRED erneut $payment->recreatePPOrder(...) aufgerufen. EPS gehört im Plugin zu den automatisch gecaptureten APM-Zahlungsarten.Unser aktueller Verdacht:
- EPS-Zahlung läuft
PAYER_ACTION_REQUIRED→ PayPal-Order wird neu erzeugt- Kunde befindet sich noch im vorherigen Zahlungsflow
- Erneut
PAYER_ACTION_REQUIRED→ noch eine PayPal-Order wird erzeugt txn_idintzahlungsidwird überschrieben- Die vorherige PayPal-Order wird erfolgreich bezahlt
- Der Capture-Webhook kann nicht mehr zugeordnet werden
Das Fehlerbild ähnelt damit dem bekannten „capture failed“-Problem. Die Ursache scheint bei uns aber nicht ein zu früher Webhook zu sein, sondern eine mehrfach neu erzeugte PayPal-Order während eines EPS-/
PAYER_ACTION_REQUIRED-Flows.Fragen
- Ist dieser konkrete Ablauf bereits bekannt?
- Gibt es dafür schon ein Issue, einen Fix oder einen empfohlenen Workaround?
Viele Grüße
Ayhan