Миграция старых пользователей сайта в базу данных Magento - PullRequest
4 голосов
/ 20 января 2011

У меня более 300 000 пользователей в старом интернет-магазине.Клиент перешел на решение Magento и теперь должен перенести всех пользователей, адреса на Magento.Поэтому мне нужно написать собственный скрипт для импорта пользователей и их адресов в систему Magento.

Существуют ли какие-либо учебные пособия или подобные работы, уже выполненные.Пожалуйста, помогите мне.

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 января 2011

Вот пример того, как я перенес пользователей из OSC в Magento с библиотекой SOAP. Этот скрипт был запущен на старом сервере и должен запускаться из командной строки ssh (время выполнения php через браузер не будет поддерживать это

    $proxy = new SoapClient('http://[your magento url]/api/soap/?wsdl=1');
    $sessionId = $proxy->login('admin', '[your password]');

    // connect to local db

    $link = mysql_connect('localhost', '[old ecommerce db]', '[old db pw]');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db('sbc_osc', $link);

    $sql = "SELECT * FROM customers";

    $customers = mysql_query($sql);

    // loop thyrough customers
    while ($customer = mysql_fetch_assoc($customers)) {

        set_time_limit(600);

        $newCustomer = array(
            'firstname'  => $customer['customers_firstname'],
            'lastname'   => $customer['customers_lastname'],
            'email'      => $customer['customers_email_address'],
            'password_hash' => $customer['customers_password'],
            'store_id'   => 2, // set the store you want to send to
            'website_id' => 2
        );

        $telephone = $customer['customers_telephone'];
        $fax = $customer['customers_fax'];

        try{
            $newCustomerId = $proxy->call($sessionId, 'customer.create', array($newCustomer));
        }
        catch (Exception $e) {
            echo "failed to create customer for: " . $customer['customers_firstname'] . " " . $customer['customers_lastname'] . "\n";
        }

        // grab the default address
        $sql = "SELECT ab.*, c.countries_iso_code_2, z.zone_name, z.zone_id
                FROM address_book ab 
                LEFT JOIN countries c ON ab.entry_country_id =  c.countries_id
                LEFT JOIN zones z ON ab.entry_zone_id = z.zone_id
                WHERE customers_id = {$customer['customers_id']} AND address_book_id = {$customer['customers_default_address_id']}";

        $addresses = mysql_query($sql);

        while ($address = mysql_fetch_assoc($addresses)) {

            $newCustomerAddress = array(
                'firstname'  => $address['entry_firstname'],
                'lastname'   => $address['entry_lastname'],
                'company'    => $address['entry_company'],
                'country_id' => $address['countries_iso_code_2'],
                'region_id'  => $address['zone_id'],
                'region'     => ($address['zone_name'] != "" ? $address['zone_name'] : $address['entry_state']),
                'city'       => $address['entry_city'],
                'street'     => array($address['entry_street_address']),
                'telephone'  => $telephone,
                'fax'        => $fax,
                'postcode'   => $address['entry_postcode'],
                'is_default_billing'  => true,
                'is_default_shipping' => true,
            );

            try{
                $newAddressId = $proxy->call($sessionId, 'customer_address.create', array($newCustomerId, $newCustomerAddress));
            }
            catch (Exception $e) {
                echo "failed to add address for: " . $address['entry_firstname'] . " " . $address['entry_lastname'] . "\n";
            }
        }

        echo "migrated: " . $customer['customers_firstname'] . " " . $customer['customers_lastname'] . "\n";

    }


    mysql_close($link);

Одна вещь, которую вам нужно остерегаться, это пароли ... чтобы это работало, мне пришлось настроить Magento на использование той же схемы хеширования паролей.

1 голос
/ 20 января 2011

Я бы посоветовал заглянуть в пользовательский api-файл импорта и создать сценарий, используя методы из базы кода. Использование API будет медленнее, поэтому, поскольку вы будете запускать сценарий на своем сервере, вы можете создать его с помощьюактуальные методы.Таким образом, вы можете просмотреть эту папку для классов и методов API клиента

/ app / code / core / Mage / Customer / Model / Customer

, а затем здесь для классов и методов API адреса.

/ app / code / core / Mage / Customer / Model / Address /

Возможно, вам потребуется экспортировать данные в CSV и получить их в нужном формате для импорта в Magento.30k не так много, так что вы даже можете попробовать нормальный процесс импорта, который по умолчанию Magento.Нам не повезло с этим, но мы импортировали сотни тысяч клиентов.Даже тогда мы разбиваем файл на небольшие куски клиентов за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...