古いサイトユーザーをMagento DBに移行します
-
12-10-2019 - |
質問
古いオンラインストアには30万人以上のユーザーがいます。クライアントはMagento Solutionに切り替えて、すべてのユーザーを移行する必要があります。アドレスはMagentoになります。そのため、ユーザーとそのアドレスをMagentoシステムにインポートするためのカスタムスクリプトを作成する必要があります。
すでに行ったチュートリアルや同様の種類の作業はありますか。私を助けてください。
ありがとう
解決
SOAPライブラリを使用して、ユーザーをOSCからMagentoに移行した方法の例を次に示します。このスクリプトは古いサーバーで実行され、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);
注意する必要があることの1つは、パスワードです。これが機能するためには、同じパスワードハッシュスキーマを使用するためにMagentoを設定する必要がありました。
他のヒント
私の提案は、顧客インポートAPIを調べ、コードベースからメソッドを使用してスクリプトを作成することです。APIを使用すると、サーバーでスクリプトを実行するため、実際のメソッドを使用してビルドできます。したがって、顧客APIクラスとメソッドのこのフォルダーを見ることができます
/app/code/core/mage/customer/model/customer
そして、アドレスAPIクラスとメソッドについて
/app/code/core/mage/customer/model/address/
おそらく、データをCSVにエクスポートし、適切な形式で取得してMagentoにインポートする必要があります。 30Kはそれほど多くはないので、デフォルトのMagentoである通常のインポートプロセスを試すこともできます。私たちはそれで幸運を持っていませんでしたが、私たちは数十万人の顧客を輸入しています。それでも、ファイルを一度に顧客の小さな塊に分割します。