Как программно авторизоваться в административной части?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.08.2012 14:27

Задача: импорт продуктов из csv файла. Для небольшого количества продуктов решается легко из админки. Но если количество продуктов переваливает за тысячу, импортить их через браузер есть моветон :)
Первое что пришло в голову - посмотреть в гугле :)
и вот один из вариантов:
http://www.premasolutions.com/content/magento-dataflow-exportimport-form-command-line

//THIS SCRIPT JUST INITIALS THE PROFILE TO BE RUN VIA MAGENTO ADMIN "RUN PROFILE IN POPUP". Its the same thing as click just via this file that you can run via cron
$profileId = 8; // SYSTEM - IMPORT/EXPORT - ADVANCED PROFILES <-- you need to go into your magento admin and grab the exact profile ID
 
require_once 'app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
 
$profile = Mage::getModel('dataflow/profile');
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(0);
Mage::getSingleton('admin/session')->setUser($userModel);
$profile->load($profileId);
if (!$profile->getId()) {
    Mage::getSingleton('adminhtml/session')->addError('ERROR: Incorrect profile id');
}
 
Mage::register('current_convert_profile', $profile);
$profile->run();
$recordCount = 0;
$batchModel = Mage::getSingleton('dataflow/batch');
echo "EXPORT COMPLETE. BATCHID: " . $batchModel->getId();

Он прекрасно справляется из експортом но импорт почему-то не хочет делать.
Немного подумав, пришел к выводу, что еще импорт можно запустить, залогинившись в админку через curl и передав curl-у ссылку вида
http://mydomain/index.php/admin/system_convert_gui/run/id/3/files/export_all_products.csv/

айдишник и имя файла соответственно изменяю на нужные.
И тут возникла проблема. Как залогиниться в админку. Все попытки выдают только страницу входа. Например:
require_once 'app/Mage.php';
umask(0);
$app = Mage::app('default');

 
Mage::getSingleton("admin/session", array("name"=>"adminhtml"));
$session = Mage::getSingleton("admin/session");
$session->login('admin', 'mypassword');

$sessionId = $session->getSessionId();   

$formKey =  Mage::getSingleton('core/session')->getFormKey();

$http = new Varien_Http_Adapter_Curl();
$options = array( 'sessionId' => $sessionId, 'form_key' => $formKey ); 

$http->setOptions($options);

## make a POST call
$http->write(Zend_Http_Client::POST, "http://mydomain/index.php/admin/dashboard");

## Get Response
$response = $http->read();
var_dump($response);

# Close Call
$http->close();

никак не хочет выдававать страницу с админки. Собственно вопрос, что я делаю не так и как правильно получить страницу в админке через curl.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

02.08.2012 15:40

Программы не должны авторизоваться в административной части.
Для программного доступа к Magento надо настроить специальную учётную запись для внешнего доступа.

#3 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.08.2012 15:54

Как же тогда провести импорт на 100 тысяч продуктов? Запускать из браузера кнопкой "Run Profile in Popup" ? Это действительно единственное предлагаемое маджентой решение? (написание собственного парсера не рассматриваем)

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

02.08.2012 15:55

Обратиться к квалифицированному программисту.
Он посмотрит, какой программный код выполняется при вызове кнопки "Run Profile" и качественно запрограммирует вызов этого кода из своего модуля.

#5 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.08.2012 16:00

:D Собственно именно это я и пытаюсь сделать уже второй день подряд, симитировать запуск кнопки. Но спасибо за ответ. Буду искать дальше.

Поделиться темой: