Vor allem ein wenig Geschichte und Theorie, da ich denke, dass es wichtig ist, um alles zu verstehen.
In letzter Zeit migrieren viele Kunden des Plugins von modulosdepago.es in seiner PRO-Version, die die Tokenisierung von Karten und wiederkehrende Zahlungen mit WooCommerce Subscriptions akzeptiert, zu meinem Plugin von WooCommerce.com
Das Problem, das sie im Grunde haben, ist, dass die zuvor erstellten Abonnements nicht geladen werden, das heißt, sie können nicht abgerechnet werden. Bis hierhin ist alles normal, da WooCommerce die tokenisierten Karten für eine bestimmte Gateway-ID speichert, und mein Gateway-Plugin sollte keinen Zugriff auf diese Tokens haben, wenn die ID unterschiedlich ist.
Im Grunde genommen speichert WooCommerce die Karten über seine API in zwei Tabellen
In der Tabelle woocommerce_payment_tokens

Hier speichert es die Tokens selbst.
und die Tabelle woocommerce_payments_tokensmeta

ist, wo alle Daten zu diesen Karten gespeichert werden.
Nun, ihr könnt sehen, dass in der Tabelle woocommerce_payment_tokens eine Spalte mit der Bezeichnung gateway_id vorhanden ist. In dieser Spalte speichert WooCommerce die ID des Gateways. Wenn das Plugin von modulosdepago.es mit der WooCommerce-API entwickelt worden wäre, würden hier alle Tokens der Benutzer zu finden sein, und es wäre nichts weiter zu tun, da glücklicherweise sowohl die gateway_id von modulosdepago.es als auch die von WooCommerce.com gleich sind. Es wäre also eine völlig transparente Migration.
Wie ich bereits erwähnte, wurde die Erweiterung von modulosdepago.es nicht nach den Standards von WooCommerce entwickelt und hat die Tokenisierungs-API nicht verwendet. Das hat mich gezwungen, ein Skript zu erstellen, damit alle Benutzer, die die Vorteile des offiziellen Plugins von WooCommerce.com für Redsys nutzen möchten, dies problemlos tun können.
Was macht die Erweiterung von modulosdepago.es? Es ist ganz einfach, anstatt die Tokenisierungs-API zu verwenden, speichert es das Token mit den Metadaten der Benutzer.
Genau das, was es tut, ist, es in den Metadaten _ds_merchant_identifier und redsys_card der Benutzer in der Tabelle {prefijo_}usermeta zu speichern

Diese Methode „funktioniert“, hat aber Konsequenzen, wie dass die Benutzer die Karten nicht von ihrem WooCommerce-Konto aus verwalten können oder dass WooCommerce nicht so grundlegende Dinge wie das Ablaufdatum kennt. Wie ihr sehen werdet, ist das nicht die ideale Art, dies zu tun, insbesondere wenn es eine spezifische API dafür gibt.
Worin besteht mein Skript? Es sucht einfach alle Benutzer nach diesen beiden Daten und fügt sie korrekt in WooCommerce über die Tokenisierungs-API ein. Auf diese Weise können die Benutzer beispielsweise ihre Karten von ihren Konten aus verwalten.

In diesem Fall muss das Skript falsche Daten hinzufügen, wie zum Beispiel das Ablaufdatum, das es auf Dezember 2022 festlegt, oder den Kartentyp, den es als unbekannt angibt, nur weil diese Daten nicht vom Plugin von modulosdepago.es gespeichert werden und daher nicht in die WooCommerce-API eingefügt werden können (das von WooCommerce.com speichert sie alle).
Sobald der Prozess abgeschlossen ist, funktioniert alles normal, alle Benutzer haben Zugriff auf ihre Karten, und WooCommerce kann sie verwalten (was logisch sehr wichtig ist).
Bevor ihr fortfahrt, verwendet dieses Skript NICHT, wenn ihr mit dem Plugin von modulosdepago.es weitermachen wollt. Es wird euch nichts nützen, da das Plugin weiterhin die Daten speichert und sie auf seine Weise verwendet. Dieses Skript lohnt sich nur, wenn ihr das offizielle Plugin von WooCommerce.com für Redsys verwenden möchtet, das die WooCommerce-API nutzt.
Wie wird das Skript verwendet?
Es ist ganz einfach, ihr müsst nur eine Datei mit dem gewünschten Namen hochladen, zum Beispiel update-tokens.php in das Stammverzeichnis eurer Installation. Sobald sie hochgeladen ist, müsst ihr nur die Adresse https://tusitio.tld/update-tokens.php besuchen, und das Skript wird gestartet. Wenn am Ende nicht die Nachricht „Herzlichen Glückwunsch! Alle Tokens der Benutzer migriert“ erscheint, aktualisiert die Seite, bis sie erscheint. Dies kann daran liegen, dass ihr beispielsweise viele Benutzer habt und Timeouts auftreten.
Bitte macht ein Backup, bevor ihr mit dem Skript fortfahrt. Aufgrund der Funktionsweise sollte absolut nichts passieren, aber wenn man mit der Datenbank arbeitet, ist es immer gut, vorher ein Backup zu machen.
Der Code, den die hochzuladende Datei haben sollte, ist:
Denkt daran, dass wenn ihr diese Migration durchführt und ein Problem habt, könnt ihr ein Ticket eröffnen, um Hilfe bei WooCommerce.com zu erhalten.
Denkt auch daran, dass mein Plugin ständig von Automattic (Entwickler von WooCommerce) geprüft wird und strikt alle Standards von WordPress, WooCommerce einhält und immer die WooCommerce-API verwendet. Ihr werdet niemals Kompatibilitätsprobleme haben, und der gesamte Code folgt den Coding Standards von WordPress VIP, die die anspruchsvollsten in Bezug auf Codequalität in der Welt von WordPress sind.







