Kundenkonto wird über 1.300mal angelegt bei manchen Kunden nach Update auf 5.2.6

Nachdem Update auf 5.2.8 ist der Fehler nicht mehr vorhanden. Jedenfalls bis jetzt noch nicht :wink:

Hallo,

leider ist es in 5.2.9 bei einem Kunden von uns wieder vorgekommen. An zwei Tagen, jeweils über 4000 gleiche Konten erstellt worden. PayPal Schnellbestellungen…

Hier auch mit deutlicher Regelmäßigkeit alle paar Tage mal ein paar tausend Neukunden.

Bei uns tritt das Problem aktuell auf, eingestzte Version 5.2.9.

Gestern wurden 2 Kunden je ca. 1.000 mal angelegt; einzige Gemeinsamkeit Paypal & Schnellbesteller

Sollte das Problem mit 5.2.7 nicht eigentlich behoben sein?

Das Problem ist nicht in Shopware 5.2.7, sondern im Paypal-Plugin 3.4.3 behoben. Schau mal, ob du dort das aktuellste Update drauf hast.

Der Fehler trat mit Shopware 5.2.9 und Paypal 3.4.4 auf.

Ich konnte da auch nachstellen. Durch einen initialen Kundendatenimport aus der Warenwirtschaft vor 3 Jahren wurden einige Kunden ohne Anrede und/oder ohne Passwort angelegt.
Wenn dieser Kunde nun in den Shop kommt und mit seiner bereits gespeicherten Email Adresse eine Bestellung mit PayPal Express tätigt, läuft Paypal bei Abschluss der Zahlung in eine Endlosschleife und legt den Kunden solange mehrfach an, bis das timeout erreicht ist. Also ca. 1000mal.

Seit Udate auf PayPal Ver. 3.4.5 kann bei o.g. Fall zwar immer noch keine korrekte Zahlung durchgeführt werden, aber das mehrfache anlegen von Kundenaccounts passiert nicht mehr. Die Zahlung bricht einfach ab.

Nun bleibt noch die immense Menge an Kundendaten in der Datenbank.
Hierfür habe ich netterweise einen SQL Query des Shopware Entwicklersupports bekommen; funktioniert fast perfekt (alle mehrfach angelegten bleiben als doppelte übrig; immerhin lieber doppelt als tausendfach Thumb-Up )

DELETE FROM s_user WHERE id IN (SELECT * FROM(SELECT sUser.id
FROM s_user sUser
LEFT JOIN s_order sOrder ON sOrder.userID = sUser.id
WHERE sUser.id IN (
    SELECT sUser2.id
    FROM s_user sUser2
    WHERE sUser2.id NOT IN (
        SELECT MIN(sUser3.id)
        FROM s_user sUser3
        GROUP BY sUser3.email
    )
)
AND sUser.paymentID = (SELECT `id` FROM s_core_paymentmeans WHERE `name` = 'paypal')
AND sOrder.id IS NULL) AS dummyAlias)

Aber Vorsicht; zuerst ein Backup anlegen und die Abfrage an Eure Bedürfnisse anpassen.

Viel Erfolg,
beste Grüße