Migration Webs (xtc Fork) nach Shopware

Shopsysteme - Online Shop erstellen - Jimdo Shopify Shopware Gambio Magento etc
Antworten
Kopernikus
Beiträge: 11
Registriert: 10. Okt 2010 10:01
Land: Schweiz
Firmenname: Engeli's NaturShop
Branche: Naturwaren

Migration Webs (xtc Fork) nach Shopware

Hallo zusammen

Nach etlichen Jahren webs (www.webs.de) möchte ich meinen Shop nun gerne modernisieren. Als geeignetes Shopsystem habe ich mir deshalb Shopware ausgesucht. Die Migration der Produkte und Kategorien, Benutzerbewertungen oder auch Preisinformationen ging alles ohne Probleme. Nur beim Kundenimport streikt das Migrationsprogramm und spuckt dabei folgende Fehlermeldung aus:

Code: Alles auswählen

Beim Importieren der Kunden ist ein Fehler aufgetreten

Code : 23000
Line : 224
File : /home/www/web282/html/shopware/engine/Library/Zend/Db/Statement/Pdo.php

Error : SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shopware`.`s_user_addresses`, CONSTRAINT `s_user_addresses_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `s_core_countries` (`id`) ON UPDATE CASCADE)
Trace : #0 /home/www/web282/html/shopware/engine/Library/Zend/Db/Statement.php(297): Zend_Db_Statement_Pdo->_execute(Array) #1 /home/www/web282/html/shopware/engine/Library/Zend/Db/Adapter/Abstract.php(470): Zend_Db_Statement->execute(Array) #2 /home/www/web282/html/shopware/engine/Library/Zend/Db/Adapter/Pdo/Abstract.php(232): Zend_Db_Adapter_Abstract->query('INSERT INTO s_u...', Array) #3 /home/www/web282/html/shopware/engine/Library/Enlight/Components/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO s_u...', Array) #4 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/CustomerImporter.php(641): Enlight_Components_Db_Adapter_Pdo_Mysql->query('INSERT INTO s_u...') #5 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/CustomerImporter.php(312): Shopware\SwagMigration\Components\DbServices\Import\CustomerImporter->createOrUpdate(Array, 's_user_addresse...', 'address_id', Array) #6 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/DbServices/Import/Import.php(176): Shopware\SwagMigration\Components\DbServices\Import\CustomerImporter->import(Array) #7 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/Migration/Import/Resource/Customer.php(207): Shopware\SwagMigration\Components\DbServices\Import\Import->customer(Array) #8 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Components/Migration/Import/Resource/Customer.php(82): Shopware\SwagMigration\Components\Migration\Import\Resource\Customer->migrateCustomer(Array, Object(Shopware\SwagMigration\Components\DbServices\Import\Import), '') #9 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Controllers/Backend/SwagMigration.php(444): Shopware\SwagMigration\Components\Migration\Import\Resource\Customer->run() #10 /home/www/web282/html/shopware/engine/Shopware/Plugins/Community/Backend/SwagMigration/Controllers/Backend/SwagMigration.php(479): Shopware_Controllers_Backend_SwagMigration->runImport('import_customer...') #11 /home/www/web282/html/shopware/engine/Library/Enlight/Controller/Action.php(193): Shopware_Controllers_Backend_SwagMigration->importAction() #12 /home/www/web282/html/shopware/engine/Library/Enlight/Con
Im Kundenforum von Shopware habe ich den Fehler bereits im Juni publiziert, leider bis jetzt jedoch kein Lösungsansatz gefunden. Vielleicht kann mir hier ja jemand auf die Sprünge helfen?

Besten Dank im Voraus


3 Monate gratis Händlerbund
xMerchant
Beiträge: 3472
Registriert: 24. Mär 2010 19:57
Land: Deutschland

Re: Migration Webs (xtc Fork) nach Shopware

Rein vom Stacktrace her, kenne weder Webs noch Shopware:

Das System versucht eine Kundenadresse anzulegen, deren address_id in der Datenbank schon vorkommt. Der Fehler wird durch folgenden Befehl ausgelöst: createOrUpdate(Array, 's_user_addresse...', 'address_id', Array)

Schau mal in den Adressen nach, ob dort mehrfach die gleiche AdressID vorkommt.

Edit: Es scheint wohl eher bei den Ländern ein Problem mit doppelten IDs zu geben. Schau mal nach, ob er ein Land doppelt eintragen will.
costumes
Beiträge: 905
Registriert: 1. Jan 2013 13:48
Land: Deutschland
Wohnort: Berlin

Re: Migration Webs (xtc Fork) nach Shopware

Ich denke mal das scheitert an den Passwörtern!
Falls Du nur die Kundendaten benötigst, dann probiere mal dies hier:
In neuen Shop einen Kunden mit allen benötigten Einträgen erstellen.
Dann die Kundendatenbank exportieren.
Die Datei in OpenOffice öffnen.
Beim alten Shop die Kundendatenbank exportieren und auch in OpenOffice öffnen.
Jetzt alle wichtigen Spalten in die Shopwaredatei reinkopieren (darauf achten, dass die oberste Zeile nicht überschrieben wird).

Danach das Ganze hochladen und Du hast alle Kunden in der Datenbank.
Benutzeravatar
Xantiva
PLUS-Mitglied
PLUS-Mitglied
Beiträge: 4047
Registriert: 22. Okt 2010 17:52
Land: Deutschland
Firmenname: Xantiva.de
Branche: Entwickler, aber auch selber Seller!
Kontaktdaten:

Re: Migration Webs (xtc Fork) nach Shopware

Hi Kopernikus, :winken:

bei Shopware kann ich Dir leider auch nicht helfen. Aber bgzl. Passwörter - die werden im Webs als salted hash gespeichert. Ich konnte die beim Wechsel nach JTL(-Shop) 1:1 importieren und die Kunden waren in der Lage sich sofort wieder einzuloggen.
Benutzeravatar
Templer
Beiträge: 448
Registriert: 28. Sep 2017 07:22

Re: Migration Webs (xtc Fork) nach Shopware

Das sieht danach aus, als würde der beim Adressimport auf ein Land referenzieren (country_id), welches in der Ländertabelle (s_core_countries) nicht existiert. Daher schlägt der Import bei MySQL fehl, weil MySQL die Fremdschlüssel bzw. die Beziehung zwischen den Schlüsseln checkt.
Kopernikus
Beiträge: 11
Registriert: 10. Okt 2010 10:01
Land: Schweiz
Firmenname: Engeli's NaturShop
Branche: Naturwaren

Re: Migration Webs (xtc Fork) nach Shopware

Hallo zusammen und ein freundliches :winken: an Xantiva

Nach langem gebastel und endlosen Versuchen, habe ich den Import meiner Kundendaten schliesslich hinbekommen. So weit so gut. Doch nun stecke ich exakt bei Xantivas Hinweis fest. Der Migrationsassistent von Shopware bietet ledliglich einen Import von xtCommerce 3.04 an. Dort sind die md5 Passworter natürlich noch ungesalzen. :( Folglich kann sich kein Kunde mit seinem alten Passwort einloggen.

Es gibt zwar eine ausführliche Dokumentation (https://developers.shopware.com/develop ... ch-results) wie man Kundenpasswörter aus anderen Systemen nach Shopware importiert, doch für mich als nicht coder leider absolut nicht nachvollziehbar. Vor allem weiss ich nicht, wie die Passwörter aus Webs genau verschlüsselt sind und was ich da wo genau anpassen müsste. Die erste Frage (wie genau in webs.de verschlüsselt) könnte mir vielleicht Xantiva beantworten. Die zweite Frage, wo und wie genau implementieren möglicherweise ein Shopware Spezi. Aktuell stehe ich absolut auf dem Schlauch und habe das Projekt Shopware nach über 100 Stunden Arbeit schon fast wieder beerdigt. :(

Ich würde mich deshalb über jeden Tipp/Hinweis sehr freuen.

LG
Kopernikus
Kopernikus
Beiträge: 11
Registriert: 10. Okt 2010 10:01
Land: Schweiz
Firmenname: Engeli's NaturShop
Branche: Naturwaren

Re: Migration Webs (xtc Fork) nach Shopware

Ich habe mal in webs nachgeschaut und vermute, dass hier das Passwort generiert wird. Doch weiter weiss ich dann auch nicht mehr. :gruebel:

Code: Alles auswählen

<?php
/** ----------------------------------------------------------------------------
 **
 *F xtc_encrypt_password.inc.php
 **
 ** WEB-Shop Software http://www.webs.de
 **
 ** Encode a given password. Give salt value to verify a stored password
 **
 ** ----------------------------------------------------------------------------
 ** based on:
 **  (c) 2000-2001 The Exchange Project (earlier name of osCommerce)
 **  (c) 2002-2003 osCommerce(password_funcs.php,v 1.10 2003/02/11); www.oscommerce.com 
 **  (c) 2003 nextcommerce (xtc_encrypt_password.inc.php,v 1.4 2003/08/13); www.nextcommerce.org
 **  (c) 2006 XT-Commerce
 **
 ** Released under the GNU General Public License
 **
 ** @version $Id: xtc_encrypt_password.inc.php 2458 2014-01-15 16:39:13Z joerg $
 ** @copyright 2014 WEB-Shop Software http://www.webs.de/
 **
 ** ------------------------------------------------------------------------- */
  
// This function makes a new password from a plaintext password. 
function xtc_encrypt_password($plain) {

  $password = NULL;

  $release = 0;
  // check the DB revision for siez of customers.customers_password column
  $sql = '-- inc/xtc_encrypt_password
    SELECT `release`
    FROM database_version
    WHERE version=\'V1.0\'';
  $query = xtc_db_query($sql);
  while ($row = xtc_db_fetch_array($query)) {
    $release = $row['release'];
  }

  if ($release >= 13) {
    $methods = array(
      'CRYPT_SHA512' => '$6$%16.16s$',
      'CRYPT_SHA256' => '$5$%16.16s$',
      'CRYPT_BLOWFISH' => '$2a$07$%22.22s$',
      'CRYPT_MD5' => '$1$%12.12s$',
      'CRYPT_EXT_DES' => '%9.9s',
      'CRYPT_STD_DES' => '%2.2s',
    );

    // this salt, generated by md5 from time and Pid is good enough for us:
    $salt = md5(time().getMyPid());

    foreach($methods as $method => $hash) {
      if (defined($method) and constant($method) == 1) {
        $hash = sprintf($hash, $salt);
        $password = NULL;
        // found a method to use:
        if (function_exists('pcntl_fork') && function_exists('posix_kill')) {
          $pid = pcntl_fork();

          if ($pid == -1) {
            $password = crypt($plain, $hash);
          } elseif ($pid) {
            pcntl_wait($status); // prevent from zombies

            // check if the child terminates by SIGUSR1 what we expect
            if (pcntl_wifsignaled($status) and pcntl_wtermsig($status) == SIGUSR1) {
              // we could process the crypt
              $password = crypt($plain, $hash);
            }
          } else {
            register_shutdown_function(create_function(NULL, 'posix_kill(getmypid(), SIGUSR1);'));
            $password = crypt($plain, $hash); // on error this cause a SIGSEGV
            exit(0);
          }
        } else {
          $password = crypt($plain, $hash);
        }

        // verify the encryption:
        if ($password !== NULL and crypt($plain, $password) == $password) {
          break;
        } else {
          $password = NULL;
        }
      }
    }
  }

  // fallback to old method
  if (empty($password)) {
    $password=md5($plain);
  }

  return $password;
}
 ?>
Benutzeravatar
Xantiva
PLUS-Mitglied
PLUS-Mitglied
Beiträge: 4047
Registriert: 22. Okt 2010 17:52
Land: Deutschland
Firmenname: Xantiva.de
Branche: Entwickler, aber auch selber Seller!
Kontaktdaten:

Re: Migration Webs (xtc Fork) nach Shopware

Wenn ich das richtig verstehe, speichert Shopware den Hash und den jeweiligen zu benutzenden Encoder:
Any customer's password data is stored in two fields in the s_user table: The hash of the password and the responsible encoder, which takes care of hashing / comparing the password.
Das Migrationstool geht dann vermutlich von einem MD5 Encoder (wegen XTC3.04) aus. Was steht da normalerweise für ein Encoder drin? Wenn Du einen neuen Kunden anlegst? Das müsste dann ein anderer Encoder sein. Wenn Du den mal bei einer der alten Kundenkonten einträgst - funktioniert es dann?
Kopernikus
Beiträge: 11
Registriert: 10. Okt 2010 10:01
Land: Schweiz
Firmenname: Engeli's NaturShop
Branche: Naturwaren

Re: Migration Webs (xtc Fork) nach Shopware

Hallo Xantiva

Freut mich von Dir zu hören. :-)
Also wenn ich ein neuer Kunde anlege, steht da bcrypt drin. Bei den migrierten Kunden steht überall md5 drin. Und ja tatsächlich. Wenn ich bei einem alten Kunden bcrypt eintrage, kann ich mich ohne Probleme einloggen. :-) Weisst Du gerade wie der Befehl heist, um über mySQL md5 durch bcrypt zu ersetzen?

LG
Benutzeravatar
Xantiva
PLUS-Mitglied
PLUS-Mitglied
Beiträge: 4047
Registriert: 22. Okt 2010 17:52
Land: Deutschland
Firmenname: Xantiva.de
Branche: Entwickler, aber auch selber Seller!
Kontaktdaten:

Re: Migration Webs (xtc Fork) nach Shopware

Da ich die Tabellen und Felder nicht kenne - Nein.

Das ist die Syntax:

Code: Alles auswählen

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value 
Und so in der Art muss der Befehl dann aussehen:

Code: Alles auswählen

UPDATE table_name
SET column1="bcrypt"
WHERE column1="MD5"
Kopernikus
Beiträge: 11
Registriert: 10. Okt 2010 10:01
Land: Schweiz
Firmenname: Engeli's NaturShop
Branche: Naturwaren

Re: Migration Webs (xtc Fork) nach Shopware

Hallo Xantiva

Das hat hervorragend funktioniert, Herzlichen Dank. Jetzt muss ich nur noch meine anderen 99 Probleme in den Griff bekommen. :-)
Antworten

Zurück zu „Shopsysteme“

  • Information