Problem bei Shop-Update 6.1.6 auf 6.2.0 mit Paypal Checkout

Hallo Community,

ich möchte gerne unseren Shop schrittweise auf die letzte 6.4 updaten.
Als erstes wollte ich den Shop von der Version 6.1.6 auf 6.2.0 updaten,
da die Modulkonfiguration dort ja von der Datenbank in die .yaml wandert.

Danach dann Update von Composer 1 auf Composer 2, und Shopupdate auf 6.2.5.

Soweit der Plan.

Leider komme ich nicht einmal auf die Version 6.2.0, da das OXID Paypal Checkout Modul Probleme beim Update macht.
Das Update wurde nach der Anleitung hier gemacht:
https://docs.oxid-esales.com/eshop/de/6.2/installation/update/von-6.1.x-auf-6.2.0-aktualisieren.html

Alles läuft soweite sauber durch, nur beim letzten Schritt “vendor/bin/oe-console oe:module:apply-configuration” gibt mir die Konsole eine Fehlermeldung:

Applying configuration for module with id osc_paypal Module configuration wasn't applied. An exception occurred: Symfony\Component\DependencyInjection\Exception\RuntimeException Cannot autowire service "OxidSolutionCatalysts\PayPal\Service\ModuleSettings": argument "$db" of method "__construct()" references class "OxidEsales\Eshop\Core\Database\Adapter\Doctrine\Database" but no such service exists. It cannot be auto-registered because it is from a different root namespace.

Ausgangslage ist ein Shop CE 6.1.6, PHP Version 7.2, Composer 1.10.20, Paypal Checkout Version 1.2.2

Probiert habe ich ebenfalls das Update direkt auf 6.2.4, gleiche Fehlermeldung.
Überschreiben des Paketes wurde auch mit ja oder nein probiert, keine Änderung.

Ich habe den Shop auch Testweise auf PHP 7.1 zurückgesetzt, mit composer die requirements neu
eingelesen und die Pakete mit composer update installieren lassen.
Der Paypal Checkout wurde dabei auf die Version 1.1.6 zurückgesetzt.

Wenn man dann noch einmal das Update versucht kommt im letzten Schritt eine andere Fehlermeldung:

Module configuration wasn't applied. An exception occurred: Symfony\Component\Config\Exception\FileLoaderLoadException Expected to find class "OxidSolutionCatalysts\PayPal\Service\SCAValidator" in file "/xxxx/xxxx/xxxx/source/modules/osc/paypal/src/Service/SCAValidator.php" while importing services from resource "src/Service/*", but it was not found! Check the namespace prefix used with the resource in /xxxx/xxxx/xxxx/source/modules/osc/paypal/services.yaml (which is being imported from "/xxxx/xxxx/xxxx/var/generated/generated_services.yaml").

Es liegt definitiv am Paypal Checkout. Deinstalliere ich das Modul und mache danach das Update, läuft alles einwandfrei durch.

Hat noch jemand eine Idee, was ich probieren kann, damit der Checkout auf im Update-Prozess funktioniert?

Den Checkout 1.2.2 nachher neu installieren und die Daten einfach eintragen funktioniert irgendwie nicht,
beim Abspeichern geht das Hauptfenster der Modulkonfiguration in den Maintnance Mode und übernimmt
die Daten nicht. Trage ich die Daten von Hand in die .yaml ein, deaktiviere und aktiviere das Modul einmal steht der Modulstatus zwar auf grün und aktiv, er zeigt mir dann unter Freischaltung aber nicht mehr Rechnungskauf und Kreditkarte mit “ja” an und zum anderen habe ich auf der Startseite und im Warenkorb dann einen Paypal-Banner, den ich nicht wegbekomme, obwohl alle Banner in den Moduleinstellungen deaktiviert sind.

Vielleicht hat ja jemand noch eine Idee, mir gehen die Ideen leider langsam aus…

Viele Grüße,
Michael

Warum nimmst du nicht das integrierte PayPal-Modul von OXID?

Die Lösung ist

  • Paypal Checkout 1.1.x Modul entfernen
  • Shop Update >= 6.2 machen
  • Paypal Checkout 2.2.x installieren
  • neues Onboarding oder Config über die YAML Files im var Verzeichnis eintragen

Weil das von OXID integrierte Modul nicht den Paypal Checkout mit der neuen API unterstützt. Wer weiß wie lange Paypal die alte API noch bereitstellt. Hauptgrund für den Umstieg auf die neue API war aber das Angebot von PayPal noch ein Jahr die alten Gebührenkonditionen zu behalten, bevor es teurer wird.

Hallo naladre,

das werde ich einmal ausprobieren, installation von Paypal Checkout 1er Version (wie auch in der Anleitung Installation — PayPal Checkout | Moduldokumentation beschrieben) wollte es nicht tun.
Laut der Anleitung ist die 2er Version erst ab OXID 6.3 geeignet.

Ich melde dann npch einmal zurüc, ob es geklappt hat.

Viele Grüße,
Michael

Oh, du hast recht. Hab ich vlt falsch im Kopf gehabt. Wenn gleiche Version wäre, wäre es noch unschöner. Muss ich nochmal prüfen.

Ansonsten ginge das auch mit dem 1er Branch von PayPal Checkout.

Hallo naledre,

also grundsätzlich funktioniert das deinstallieren unter 6.1 und installieren unter 6.2.

Allerdings ist da irgendwo der Wurm drin:
Deinstallation 1.2.2 unter 6.1.6, danch update auf Shop 6.2.0

Danach installiere ich wieder die Version 1.2.2 unter dem 6.2.0er Shop.
Beim aktivieren des Moduls kommt ein Fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'capture\'' at line 2

Allerdings scheint das Modul zu funktionieren, es erscheint im linken Frame der Menü Eintrag für Paypal.
Wenn ich dort allerdings die Zugangsdaten für Paypal eintrage und dort auf speichern drücke, geht der Shop im Hauptfenster in den Maintnance Mode.
Ruft man die Konfigurationsseite neu auf, sind die zugehörigen Daten dort nicht gespeichert.

Trage ich die Konfigurationswerte in die Yaml ein, deaktiviere und aktiviere ich das Modul dann noch einmal, dann sind die Konfigurationswerte drin und das Modul steht auf grün.

Was merkwürdig ist:

 Freischaltung für besondere Zahlarten erfolgt:
Rechnungskauf: Nein
Kreditkarte: Nein (Alternativ zur fehlenden Zahlart wird ein zusätzlicher Button "Kreditkarte" unter den Paypal-Buttons angezeigt.)

Im alten Shop stand dort jeweils Ja, weil das über das Onboarding freigeschaltet war.

Was für mich nicht zu erklären ist:
Ich habe testweise einmal die Datenbanktabellen aus oxconfig und oxconfigdisplay in den Shop 6.2.0 importiert, dann ist der Modulstatus grün und auch Rechnungskauf und Kreditkarte wird mit Ja angezeigt.

Theoritisch könnte ich natürlich dann einfach alle Daten aus der alten Datenbank nehmen und das Modul hat dann den Status grün.
Dann bleibt nur noch das blöde Banner auf der Startseite, welche ich nicht wegbekomme.
Es scheint so, als ob das Modul die Konfiguration sowohl aus der Datenbank als auch aus der YAML “zusammenbastelt”. Stelle ich im Shop oder in der Yaml ein, das ich ein Startseitenbanner möchte, bekomme ich zwei angezeigt, deaktiviere ich das dort wieder wird mir immer noch ein Banner angezeigt.
Das Banner wird über die Datei views/tpl/shared/installment_banners.tpl generiert.

Selbst wenn ich diese Datei im Vendor und Modulordner lösche, tmp und cache lösche bleibt dieses hartnäckige Banner.

Ich hoffe irgendjemand kann mir folgen :wink:

Viele Grüße,
Michael

Das ist noch ein aktueller Bug vom Modul. Hätte dir allerdings auch nicht viel weitergeholfen, da Paypal da keine Prüfung auf Freischaltung macht und Rechnungskauf und Kreditkarte dann nicht freigeschaltet ist. Daher meine Empfehlung Onboarding oder YAML Files heranzuziehen.

Das ist der Default in den YAML Files. Dort kannst die Prüfung auf true stellen. Wenn es vorher bereits bestätigt war, sollte das keine Probleme machen.

Er zieht die Config aus den YAML Files in die Datenbank. Daher besser Daten nicht aus der Datenbank nehmen bzw. in die Datenbank importieren.

Das ist schräg. Am besten auch in der YAML nach der Config dafür suchen.

Hallo naledre,

ok, also ist die YAML definitiv maßgeblich und überschreibt die Einträge in der Datenbank unter oxconfig.
Das erklärt dann auch, dass die Einstellungen für das Banner / Warenkorbbuttons berücksichtigt werden,
wenn man die Konfiguration ändert und dann speichert.

Einzig allein das Banner auf der Startseite und im Warenkorb lässt sich nicht über die Konfiguration / YAML rausschmeißen, es bleibt immer da.
Wenn ich die Verkettung richtig verstehe wird in der Datei installment_banner.tpl in der ersten Zeile die Konfiguration der Bannereinstellung sowie auch das vorhandensein einer Paypal Client ID geprüft, erst wenn beides positiv ist, soll das Banner geschaltet werden.

Dafür zuständig in der YAML müsste folgender Eintrag sein:

oscPayPalBannersShowAll:
        type: bool
        value: false

Aber egal ob ich da false oder 0 eintrage, das Banner wird angezeigt.

Die Einstellungen für Rechnungskauf und Kreditkarte habe ich in der Yaml gefunden, das funktioniert mit der Anpassung. Danke für den Hinweis. Ich dachte das wird irgendwo abgeprüft, wenn man das Modul aktiviert. Mit PayPalPuiEligibility konnte ich erst einmal nichts anfangen, dehaer hatte ich den Wert auf false gelassen.

Viele Grüße,
Michael

Vielleicht blöde Frage, aber hast du das Banner auch in den PayPal Checkout Moduleinstellungen im Backend deaktiviert?

Banner der Startseite ist übrigens: oscPayPalBannersStartPage

PayPalPuiEligibility ist Rechnungskauf.

Sowohl oscPayPalBannersShowAll als auch oscPayPalBannersStartPage beides in der YAML mal auf 0 oder false gesetzt. Banner kommt trotzdem.

Unter Paypal->Konfiguration->Bannereinstellungen ist alle deaktiviert, nirgendwo ein Haken gesetzt.

Unter Module->Paypal-Checkout->Einstellungen wird nichts angezeigt, das soll aber vermutlich so sein,
unter dem Shop 6.1.6 ist dort auch nichts.

Ich habe auch schon Browsercache komplett geleert, Banner bleibt ganz hartnäckig.

Klingt als wäre Datenbank und YAML asynchron.

Hattest das schon gemacht?:
vendor/bin/oe-console oe:module:apply-configuration

Wenn ich das in der Konsole mache bekomme ich den gleichen SQL Error wie bei der Modulaktivierung nach der Installation:

Applying configuration for module with id osc_paypal
Module configuration wasn't applied. An exception occurred: OxidEsales\Eshop\Core\Exception\DatabaseErrorException You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'capture\'' at line 2

Was ich gerade bemerkt habe:
Wenn ich im Backend Änderungen vornehme, dann ändert sich die YAML nicht. Anscheinend hast Du recht, YAML und DB scheinen asynchron zu sein, vermutlich wegen dem SQL Fehler.

MySql ist Version 5, wir haben unseren Speicherplatz bei Profihost, sonst läuft alles immer prima da.

Wenn du nur 5.0 hast, wäre die zu alt. Es muss entweder 5.5 oder 5.7 sein.

Nur so ne Idee, versuch mal in der Datei:
vendor/oxid-solution-catalysts/paypal-module/src/Core/Events/Events.php

die Zeile in 229:

ADD `OSCPAYPALTRANSACTIONTYPE` char(32) collate latin1_general_ci DEFAULT \'capture\'";

so zu ändern

ADD `OSCPAYPALTRANSACTIONTYPE` char(32) collate latin1_general_ci DEFAULT 'capture'";

EDIT:
Pfad war vom PayPal Checkout 2er Branch. Hab ich korrigiert.

Hallo naledre,

So, heute noch einmal bei null angefangen, frischer Shop 6.2.0, ohne Paypal Checkout.
Dann Paypal Checkout 1.2.2 installiert.

MySQL ist 5.7
Die Datei habe ich gefunden und das capture sowohl im Vendor als auch im Modulverzeichnis angepasst.

Dann alle Konfigurationswerte in diw YAML eingetragen und das Modul aktiviert.
Aktivierung war dann ohne den SQL Fehler möglich.

Modulstatus ist auf grün, alle Werte in der Konfiguration so, wie ich es in der YAML vorgegeben habe.
Alle Banner dort deaktiviert, trotzdem habe ich ein tolles blaues Paypal Banner auf der Startseite und im Warenkorb.
Was komisch ist:
Wenn ich im Backend in den Moduleinstellungen etwas anpasse, z.B. Banner aktivieren und Banner auf Startseite anzeigen, dann übernimmt er das und zeigt mir 2 Banner auf der Startseite.
Deaktiviere ich das Banner, wird mir nur ein Banner angezeigt.

Die YAML Datei wird bei Änderungen im Backend nicht angefasst, Änderungen dort werden anscheinend nur direkt in der Datenbank vorgenommen und die YAML nur bei deaktivieren und neu aktivieren des Moduls eingelesen.

Ich habe keine Ahnung wo dieses eine Banner herkommt, ansonsten läuft alles. Vor allem ist es ja merkwürdig, das bei setzen der Option Banner anzeigen 2 Banner kommen und bei deaktivieren eins stehen bleibt.

Achja, vendor/bin/oe-console oe:module:apply-configuration geht nach der capture Änderung auch ohne Fehler, bewirkt aber nur das die YAML einmal neu in die Datenbank geschrieben wird, Banner ist immer noch da.

Hallo naledre,

kurze Rückmeldung, Fehler gefunden.
Der Fehler saß quasi zwischen Lehne und Monitor :wink:
Wobei die Umstände aber auch recht merkwürdig sind.

Shop wurde ja ohne Paypal Checkout Modul auf Version 6.2 geupdated.
Dabei wurden alle OXID eigenen Module mit aktualisiert, also Abfrage ob Dateien überschrieben werden sollen mit Ja beantwortet.
Eigene Module und Fremdmodule wurden natürlich mit nein bestätigt.

Da wir bei Umstieg auf das Paypal Checkout Modul noch paralleel das alte Paypal Modul
für eventuelle Erstattungen aktiviert hatten (nur Zahlungsart deaktiviert) wurde dieses Modul
von Version 5.2.5 auf Version 6.1.0 aktualisiert.
In der alten Version gab es keine Einstellungen zu Banner aktivieren / anzeigen, in der Version 6.1.0 existiert unter Einstellungen auch plötzlich ein Untermenü für Banner.
Dort ist ein Haken bei Banner auf Startseite anzeigen gesetzt, hat aber komischerweise so erst einmal keinen Einfluss.
Wird auch nach leeren des tmp nicht angezeigt.

Wenn man dann das Paypal Checkout Modul 1.2.2 installiert, alle Daten in die Yaml einpflegt und das Modul aktiviert, zeigt das alte Paypal Modul plötzlich das Banner an.

Auch die Auswahl der Bannerfarbe über das neue Paypal Checkout Modul ist nicht möglich, das bleibt blau anstatt z.B. weiß ohne Rand.

Also irgendwas kommt sich da in den Moduleinstellungen oder Klassen mit dem Paypal Checkout 1.2.2 und dem alten Paypalmodul 6.1.0 gegenseitig in die Quere, daher das merkwürdige Verhalten.
Mir der alten Paypal-Version war das nie aufgefallen, weil es dort noch keine Bannerfunktion gab.

Also Fazit:
Der von dir beschriebene Weg 1.2.2 deinstallieren, Shop updaten und 1.2.2 neu installieren, Daten über die Yaml konfigurieren funktioniert.

Ich danke dir für deine unendliche Geduld des Lesens und zurückschreibens!
OXID hat mich (mal wieder) etliche graue Haare mehr gekostet :wink:

Viele Grüße,
Michael

Freut mich. Sowas gehört bei komplexer Software wohl irgendwie dazu :smiley:

Dafür hat dein Gehirn bei der Aktion graue Zellen gewonnen :wink:

Kann das mit den Bannern reproduzieren. Gern den Bug kurz hier eintragen:
https://bugs.oxid-esales.com/view_all_bug_page.php

Ist ja relativ schnell erklärt.

Hallo naledre,

hab ich mal eingetragen. Vielleicht hilft es ja einem anderen, der auch auf die Version 6.2.x updated,
damit nicht jeder graue Haare bekommt :wink:

Ich habe übrigens gerade nochmal geschaut. Ich glaube, es ist kein Bug. Das Problem ist nur, dass die Optionen unterschiedlich funktionieren. Bei PayPal Checkout aktiviert man die Banner, beim alten Paypal deaktiviert man die Banner mit aktivierter Checkbox. Kannst du da nochmal schauen, ob du im alten Paypal die Einstellung richtig gesetzt hast? Denn bei mir sind jetzt alle Banner aus.

Hallo naledre,

naja, was heißt Bug. Sagen wir mal so:
Im alten Paypal Modul Version 5.2.5 unter Paypal 6.1.6 gibt es die Funktion der Banneranzeige nicht.
Updatet man dann den Shop auf 6.2.0 und auch das alte Paypal Modul mit, bekommt man von diesem die
Version 6.1.0, die dann auch die Funktion der Banneranzeige mit an Board hat und wo die Banner
in der Grundkonfiguration auch per Checkbox aktiviert sind.
Allerdings hat das komischerweise keine Auswirkung auf das Frontend.
Nach einem frischen Update und leeren des tmp und anschliessendem Reload der Seite wird kein Banner angezeigt.

Das passiert dann erst nach Installation und Aktivierung des neuen Checkout Moduls, vorher ist da definitiv kein Banner zu sehen.

Da das letzte was man gemacht hat die Installation des Checkout war fängt man dann natürlich dort an zu suchen.

Also irgendwie schon ein Bug, normalerweise müsste er das Banner ja schon anzeigen, nachdem man das Update gemacht hat und bevor das Checkout installiert ist.