Zahlungsarten / Zahlungsmethoden werden gecached

Hallo zusammen,

Bei einem unserer Kunden wird die Zahlungsart „Bar bei Abholung“ nur dann angezeigt, wenn auch „Abholung“ als Versandart ausgewählt ist.
Das Problem ist, dass die verfügbaren Zahlungsmethoden scheinbar gecached werden durch die „CachedPaymentMethodRoute“, was zu folgenden Problem führt:

  • Nachdem der Cache geleert wurde, wird die Regel (beim ersten Aufruf) korrekt ausgewertet.

Beispiel 1:

Kunde hat Abholung als Versandart ausgewählt
→ Bar bei Abholung wird angezeigt

Es wird nun aber allen Nutzern, immer, diese Zahlungsart angezeigt, auch wenn Abholung nicht ausgewählt ist!

Wenn man in einem solchen Fall versucht diese auszuwählen, wird der Fehler Alert angezeigt, dass diese Zahlungsart aktuell nicht verfügbar ist und die Standardzahlungsart wird ausgewählt.

Beispiel 2:
Der erste Kunde hat die Versandart „Abholung“ nicht ausgewählt.
Nun wird die Zahlungsart „Bar bei Abholung“ keinem Kunden angezeigt. Also wird niemals auch nur ein Kunde die Zahlungsart auswählen können!

Das gleiche passiert übrigens auch mit Versandarten die Beispielsweise abhängig vom Warenkorbwert sind etc.!

Wir haben jetzt für diesen Kunden ein Plugin geschrieben der den Cache der Route invalidiert, sobald sich der Warenkorb oder die Zahlungs-/Versandart ändert.
Dabei entsteht aber das Problem, dass der Checkout oder der Warenkorb manchmal extrem langsam lädt…

Komischerweise passiert es bei uns auch nur bei diesem einen Kunden. In anderen Shops tritt das Problem nicht auf. Uns interessiert trotzdem die Frage, warum die Zahlungsarten gecached in der „CachedPaymentMethodRoute“ gecached und wann diese im Standard invalidiert werden?
Eventuell hatte schon einmal jemand ein ähnliches Problem?

Mit freundlichen Grüßen,
Nicolas Schäfer

Hallo Nicolas,

Es scheint als hätten wir ein ähnlich gelagertes Problem.
Ich versuche das gerade zu analysieren, gibt es bei euch inzwischen mehr Erkenntnisse dazu?
Wir haben hier gerade das Problem, dass Zahlungsarten nach Cache leeren regelmässig komplett verschwinden.
Freundliche Grüße,
Leo

Ich wäre auch interessiert, wie ihr das spezielle Plugin gemacht habt. Für besagten Kunden, ich nehme an über event subscription?
Könntest du eure Lösung grob umreissen und welches event ihr da subscribed?
Viele Grüße und Danke :slight_smile:

Hey @leo.haerdle

Also ich konnte das Problem mittlerweile auf ein Plugin zurückführen und stehe da aktuell noch mit dem Pluginanbieter in Kontakt, da er das Problem scheinbar nur auf unserer Kundenumgebung reproduzieren kann.

Unser Plugin läuft mit einem Eventsubscriber:

return [CartChangedEvent::class => 'invalidatePaymentMethodRoute',
            DefaultShippingMethodChangedEvent::class => 'invalidatePaymentMethodRoute'];

und die Invalidierung sieht so aus:


public function invalidatePaymentMethodRoute(
       DefaultShippingMethodChangedEvent | CartChangedEvent $event
    ): void {
        if ($event instanceof CartChangedEvent) {
            $this->cacheInvalidator->invalidate([
                CachedPaymentMethodRoute::buildName($event->getContext()->getSalesChannel()->getId()),
                CachedShippingMethodRoute::buildName($event->getContext()->getSalesChannel()->getId())
            ]);
        } else {
            $this->cacheInvalidator->invalidate([
                CachedPaymentMethodRoute::buildName($event->getSalesChannel()->getId()),
                CachedShippingMethodRoute::buildName($event->getSalesChannel()->getId())
            ]);
        }
    }
}

unter Umständen kann es auch nützlich sein sich hier ein Event zu greifen, welches getriggert wird wenn die Versandart geändert wird oder so.

:exclamation: Bitte beachte dass dies die Geschwindigkeit in der Storefront, v.a. im Checkout, negativ beeinträchtigen wird.

Hey @NacScha

Danke für die schnelle Antwort. Ggf. kann das für uns einen kurzfristige Lösung sein.
Spannend, welches Plugin ist das? Wäre interessant zu wissen, ob wir das gleiche nutzen. Ggf. auch gerne als private Nachricht.

Wenn es bei euch Neuigkeiten dazu gibt, gerne hier Bescheid geben, wäre für mich sicherlich auch spannend.
Danke dir für die schnelle Antwort :slight_smile: