View Issue Details

IDProjectCategoryView StatusLast Update
0007883module PayPal Checkoutmodule PayPal checkout - subpublic2026-02-03 09:28
ReporterFATCHIP Assigned To 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionfixed 
Product Version2.6.4 / 3.5.2 
Target Version2.6.5 / 3.5.3Fixed in Version2.6.5 / 3.5.3 
Summary0007883: Fehler bei Bestellungen in multiplen Tabs
DescriptionWenn man im 1. Tab eine Bestellung mit einer PayPal-OSC Zahlungsart z.B. PayPal oder GooglePay anfängt und den Checkout im Step des Zahlungspopups nicht weiter führt. So ist bereits eine Bestellung als intern Not Finished angelegt.
Öffnet man nun den Shop in einem 2. Tag, ohne das Popup zu schließen und geht erneut durch den Checkout mit einer anderen Zahlungsart, so gelangt man zu der Thank-You Page ohne dass die vorherige Temp-Order mit der neuen ausgewählten Zahlungsart aktualisiert wird.
-> siehe Reproduktion

Wenn man z.B. mit Klarna oder Amazon oder ähnlichem Zahlt, hat der Kunde eine Zahlung geleistet, die Order wird aber nicht korrekt mit der Zahlungsart angelegt und bleibt als not finished PayPal-Order hängen.

Das kommt dadurch zu Stande, dass in der Order.php des Oxid Cores die finalizeOrder funktion aufgerufen wird :
```
public function finalizeOrder(\OxidEsales\Eshop\Application\Model\Basket $oBasket, $oUser, $blRecalculatingOrder = false)
    {
        // check if this order is already stored
        $orderId = \OxidEsales\Eshop\Core\Registry::getSession()->getVariable('sess_challenge');
        if ($this->_checkOrderExist($orderId)) {
            \OxidEsales\Eshop\Core\Registry::getLogger()->debug('finalizeOrder: Order already exists: ' . $orderId, [$oBasket, $oUser]);
            // we might use this later, this means that somebody clicked like mad on order button
            return self::ORDER_STATE_ORDEREXISTS;
        }
```
und im Fall des ORDER_STATE_ORDEREXISTS Errors, wird in der _getNextStep($iSuccess) Funktion in der OrderController.php des Oxid Cores nur der
```
            case ($iSuccess === \OxidEsales\Eshop\Application\Model\Order::ORDER_STATE_ORDEREXISTS):
                break; // reload blocker activ
```
ausgeführt, ohne die `$sNextStep = 'thankyou';` Variable zu verändern.
Damit wird die Order nicht mehr aktualisiert und bleibt so, wie sie vom PayPal-Modul zuvor angelegt wurde. Der Kunde wird auf die ThankYou Page weitergeleitet.

### Lösungen:
1. (Die von uns präferierte Lösung): Das PayPal OSC Modul legt nur eine tmp Bestellung außerhalb der Oxorder Tabelle an.
2. (nicht ganz so schön da hier wieder neue Edgecases kommen können): Die finalizeOrder() oder _getNextStep($iSuccess) Funktion wird vom Modul überschrieben und prüft,
ob die aktuelle Bestellung im Warenkorb die selbe Zahlungsart und die selben Daten in wie in der bereits angelegten PayPal Bestellung enthält.
**Falls nicht:** PayPal-Order stornieren und neue Order anlegen.
Steps To Reproduce### Reproduktion:

* Artikel in den Warenkorb legen
* Checkout starten
* PayPal auswählen und bis zum Login Pop-up durchklicken -> Order wird erstellt
* den Tab ignorieren und im neuen Tab einen erneuten Checkout starten
* Als Zahlungsart z.B. Nachnahme wählen und Checkout abschließen
-> Die vorherige PayPal Bestellung wird dann für den 2. Zahlungsversuch verwendet und die Zahlungsart bleibt weiterhin PayPal. Die Order bleibt im "Interner Status: NOT_FINISHED"
Additional InformationQA - ES
reproduced on EE6.5.5 with PPC v2.6.4 installed
TagsNo tags attached.

Activities

There are no notes attached to this issue.