Import Kunden in JTL Shop 5 aus JTL Shop 4

JtLerle

Aktives Mitglied
27. Juni 2019
4
0
Wir wollten unseren alten JTL Shop 4 auslaufen lassen, und paralell dazu haben wir einen neuen JTL Shop 5 angelegt. Dieser ist jetzt soweit fertig und soll live gehen. Wir dachten wir können die Kunden per WAWI in den neuen Shop übernehmen, das scheint aber nur einzeln zu gehen und ist für >2000 Kunden wenig angenehm. Die Datenbank tkunde zu exportieren geht auch nicht richtig, weil cNachnahme cFirma cStraße und Zusatz verschlüsselt sind. Welches Verfahren wird hier benutzt, kann man dies in einer Excel oder mit einem Decoder entschlüssen? (den alten Blowfish Key haben wir natürch noch und auch für den neuen Shop übernommen). Was wäre die Beste vorgehensweise?

Ideal wäre natürlich alle Kunden aus dem alten Shop mit deren Passwort zu übernommen, so dass sie sich direkt wieder einloggen können.

Vielen Dank für Eure Hilfe 🙂
 

JtLerle

Aktives Mitglied
27. Juni 2019
4
0
Ich hab jetzt einfach die Tabelle tkunde aus der alten DB genommen und in die neue imporitert auf SQL Ebene, das scheint geklappt zu haben, sehe keine Seiteneffekte. Oder spricht da etwas dagegen?
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
1.216
461
Danke, dass hatte ich zu Beginn versucht, das PW wird auch richtig importiert, Nachname etc leider nicht, da steht dann der verschlüsselte Hash als String in der Datenbank ... und die Person heisst mit Nachnamen und Straße xwqdqw76d782678d2d7821d2d21
Moin,
es liegt evtl. daran, dass der BLOWFISH_KEY vom alten Shop nicht übernommen wurde
(findest Du in config.JTL-Shop.ini.php), dann werden evtl. auch die Kunden falsch angezeigt.
 

DominikQB

Aktives Mitglied
2. Oktober 2019
2
0
Moin moin,
ich hab gerade das selbe Problem....
Der BLOWFISH_KEY ist aber angepasst. Trotzdem werden Nachname und Straße kryptisch angezeigt.
Vielleicht hat einer von euch eine Idee. Vielen Dank schonmal....
 

JtLerle

Aktives Mitglied
27. Juni 2019
4
0
Moin moin,
ich hab gerade das selbe Problem....
Der BLOWFISH_KEY ist aber angepasst. Trotzdem werden Nachname und Straße kryptisch angezeigt.
Vielleicht hat einer von euch eine Idee. Vielen Dank schonmal....
Genau, der Import über das CSV Tool im Backend klappte bei mir in keiner Konstellation, ich musste die Tabelle von Hand per SQL importieren, pass aber auf wenn du das machst weil die JTL 4 DB ist in latin codiert. Die neue hat ein anderes Format, wenn du das "automatisch" konvertierst zerhaut es dir alle Umlaute und Sonderzeichen wie "ß". Ich habe am Ende dann aus der WAWI doch alle Kunden mit Sonderzeichen nochmal an den Shop übertragen müssen 🙁
 

maxmuc

Aktives Mitglied
13. Dezember 2021
33
10
Gibt es hier seitens JTL inzwischen eine Lösung? Werden ja nicht die letzten sein, die versuchen die JTL-4 Kunden in JTL 5 zu importieren...
 

maxmuc

Aktives Mitglied
13. Dezember 2021
33
10
Der Updater des Shops muss es ja eigentlich können.... Vielleicht finde ich da etwas im Code.
 

css-umsetzung

Offizieller Service Partner
SPBanner
6. Juli 2011
8.648
2.699
Berlin
Firma
css-umsetzung
Der vernünftigste Weg ist, die Kundendaten mit einem Script, zu exportieren und dann auch über ein Script im neuem Shop zu Importieren,
Oder man updated den alten 4er Shop und übernimmt dann die Tabelle und den Blowfishkey aus diesem Shop.

Es sollte aber schon darauf geachtet werden was mit eventuellen kundengruppenpreisen oder Kupons bzw. Attributen ist.
 

maxmuc

Aktives Mitglied
13. Dezember 2021
33
10
Also ich habe jetzt mal etwas quick and dirty etwas gebastelt. Kommentare teilweise dt. und englisch, weil aus alten Skripten zusammenkopiert.
Die CSV-Datei kann so im JTL5 Shop eingelesen werden. Attribute aus anderen Tabellen als tkunde werden nicht betrachtet. KundenIDs werden mit der Methode neu vergeben. Ich weiß nicht, ob das Probleme mit der JTL-Wawi gibt, wenn der Kunde im alten Shop schon unter anderer ID vorhanden war.

Hoffe es hilft jemandem.
Script muss in einem Unterverzeichnis des JTL4! shops liegen, um unangepasst zu funktionieren. Verzeichnis htaccess protecten!

PHP:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once('../includes/libs/xtea/xtea.class.php');
require_once('../includes/config.JTL-Shop.ini.php');

//Encrypted Fields
//Info: Passwort ist MD5-Encrypted und wird nach erstem Login in JTL5 in anderen Hash konvertiert
$encryptedFields = array(
    "cNachname",
    "cFirma",
    "cZusatz",
    "cStrasse",
);

$csvFile = fopen("tkunden.csv","w+");
$csvDataArray = array();

/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
 
// Check connection
if($mysqli === false){
    die("ERROR: Could not connect. " . $mysqli->connect_error);
}
 
// Print host information
echo "Connect Successfully. Host info: " . $mysqli->host_info;

// Query (Abweichung bei Newsletterfeld sonst = CSV)
$sql = "SELECT `cPasswort`,`cAnrede`,`cTitel`,`cVorname`,`cNachname`,`cFirma`,`cStrasse`,`cHausnummer`,`cAdressZusatz`,`cPLZ`,`cOrt`,`cBundesland`,`cLand`,`cTel`,`cMobil`,`cFax`,`cMail`,`cUSTID`,`cWWW`,`fGuthaben`,`nRegistriert`,`dGeburtstag`,`fRabatt`,`cHerkunft`,`dErstellt`,`cAktiv`,`cKundenNr`,`cZusatz` FROM `tkunde`";
//$sql .= " WHERE kKunde = '307'"; //Optionale Einschränkung für Tests
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        //Ausgabe CSV Header
        $csvDataArray[] = array("cPasswort","cAnrede","cTitel","cVorname","cNachname","cFirma","cStrasse","cHausnummer","cAdressZusatz","cPLZ","cOrt","cBundesland","cLand","cTel","cMobil","cFax","cMail","cUSTID","cWWW","fGuthaben","cNewsletter","dGeburtstag","fRabatt","cHerkunft","dErstellt","cAktiv","cKundenNr","cZusatz");

        //Field Info
        $fieldInfo = $result->fetch_fields();
        //print_r($fieldInfo);

        while($row = $result->fetch_array()){
            //CSV-Ausgabe
            $tempArray = array();
            for($i=0; $i < $result->field_count; $i++)  {
                //Datum mit 0000-00-00 bereinigen
                if( $row[$i] == "0000-00-00" )   {
                    //Leeres Feld statt 0000..
                    array_push($tempArray, '');
                    continue;
                }

                if( in_array($fieldInfo[$i]->name, $encryptedFields) )
                    {
                        //Verschlüsseltes Feld
                        array_push($tempArray, Jtl4ToJtl5DB($row[$i], TRUE));
                    }
                else
                    {
                        //Unverschlüsseltes Feld
                        array_push($tempArray, Jtl4ToJtl5DB($row[$i]));
                    }
                
            }
            $csvDataArray[] = $tempArray;
        }

        // Free result set
        $result->free();
    } else{
        echo "No records matching your query were found.";
    }
} else{
    echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
 

//CSV erzeugen
print_r($csvDataArray);
foreach ($csvDataArray as $row) {
    fputcsv($csvFile, $row, ";","\"");
}
fclose($csvFile);

// Close connection
$mysqli->close();

function Jtl4ToJtl5DB($dbvalue, $enrcypted = 0) {
    if($enrcypted)   {
        return utf8_encode(entschluesselXTEA($dbvalue));
    }
    //return utf8_encode($dbvalue);
    return $dbvalue;
    
}


/**
 * @param string $cText
 * @return string
 */
function entschluesselXTEA($cText)
{
    if (strlen($cText) > 0) {
        $oXTEA = new XTEA(BLOWFISH_KEY);

        return $oXTEA->decrypt($cText);
    }

    return $cText;
}


/**
 * @param string $cText
 * @return string
 */
function verschluesselXTEA($cText)
{
    if (strlen($cText) > 0) {
        $oXTEA = new XTEA(BLOWFISH_KEY);

        return $oXTEA->encrypt($cText);
    }

    return $cText;
}
?>
 

Metwabe1

Aktives Mitglied
17. Januar 2022
25
0
Hi an Alle, bin sehr an dem Script interessiert. Sorry wenn ich dann so doof frage aber welche Anpassungen muss ich noch machen damit ich auch die gewünschte Entschlüsselung erhalte. Er gibt mir leider eine Fehlermeldung aus.

PHP:
Warning: require_once(w00ea1da/jtl-shop/includes/libs/xtea/xtea.class.php): failed to open stream: No such file or directory in /www/htdocs/w00ea1da/jtl-shop/run.php on line 7

Fatal error
: require_once(): Failed opening required 'w00ea1da/jtl-shop/includes/libs/xtea/xtea.class.php' (include_path='.:/usr/share/php:..') in /www/htdocs/w00ea1da/jtl-shop/run.php on line 7
 
Zuletzt bearbeitet:

Ähnliche Themen