Выгрузка пользователей

05 мая 2019, 07:00

Выгрузка пользователей из интернет-магазина в RetailCRM

Описание

Для чего нужно. Если вы подключаете RetailCRM к уже действующему магазину - наверняка там уже есть зарегистрированные пользователи и ряд заказов. Выгружая эти данные мы позволяем RetailCRM просчитывать более точную аналитику, и как минимум, показывать сколько учтенных покупок у того или иного пользователя.

Пошаговая инструкция.

  1. К этому моменту у Вас уже должен быть куплен, подключен к магазину и настроен компонент modRetailCRM. Под настройкой я подразумеваю заполнение ключа АПИ, символьльного кода сайта и адреса вашей CRM, так как здесь мы уже используем компонент. Если это не сделано - вернитесь к предварительной настройке компонента.

  2. Если пользователей у вас в базе немного (понятие относительное, скажем меньше сотни) - мы можем запустить в админке MODX компонент console и выполнить в нем следующий код
//Запуск и первоначальная настройка компонента
if (!$modx->getService('modretailcrm','modRetailCrm', MODX_CORE_PATH.'components/modretailcrm/model/modretailcrm/')) {
    $modx->log(1, '[ModRetailCrm] - Not found class RetailCrm');
    return;
}

$pdo = $modx->getService('pdoFetch');

$site = $modx->getOption('modretailcrm_siteCode');
$apiKey = $modx->getOption('modretailcrm_apiKey');
$crmUrl = $modx->getOption('modretailcrm_url');

if(!empty($site)  && !empty($apiKey) && !empty($crmUrl)){
    $modRetailCrm = new modRetailCrm($modx, $apiKey, $crmUrl, $site);
}else{
    return;
}

//Получаем из базы всех пользователей
$users = $pdo->getCollection('modUser', array(), array(
    'leftJoin' => array(
        'Profile' => array(
            'class' => 'modUserProfile',
            'on' => 'modUser.id = Profile.internalKey'
        )
    ),
    'select' => array(
        'modUser' => '*',
        'Profile' => '*'
    ),
));

//Перебираем всех пользователей по очереди и передаем в RetailCRM
foreach($users as $user){
    $customer = array();
    $customer['externalId'] =  $user['id'];
    $customer['firstName'] = $user['fullname'];
    $customer['email'] = $user['email'];
    if(!empty($user['phone'])){
        $customer['phones'][]['number'] = $user['phone'];
    }
    $response = $modRetailCrm->request->customersCreate($customer, $site);

    //Если сервер слабенький можем после каждой операции даваем ему время на передышку, своеобразный timeout
    //sleep(0.5)  //Спать 0.5 секунд

}

По сути на этом все. Могу только добавить, что при большой базе эффективнее будет вынести код в отдельный php файл и запустить его через консоль сервера. Только не забудьте в этом случае в начале файла подключить MODX. Если не знаете как это сделать - читаем это

Возможные ошибки

Если что то пошло не так, и выгрузка пользователй не удалась, в первую очередь проверяем что вы заполнили системные настройки modRetailCRM, затем - дебажим ответ RetailCRM. Для этого после строки запроса к RetailCRM

$response = $modRetailCrm->request->customersCreate($customer, $site);

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

 $modx->log(1, '[modRetailCRM] users_upload '.print_r($response, 1));


Предыдущий документ
Выгрузка товаров
Следующий документ
Выгрузка заказов