Николай Савин

Николай Савин

Был в сети 37 минут назад
Заказы принимаю
Вообще при выгрузке нужно указывать идентификатор товара в поле ExternalID
Если Вы этого не делали, тогда отдельного специального поля для связи товаров в различных системах нет.

В таком случае, можно перед передачей заказа в RetailCRM, получить идентификаторы товара, используя поиск по товарам в CRM

Для этого в плагине, там где начинается перебор товаров заказа, можно добавить дополнительный поисковый запрос в RetailCRM
$store_response = $modRetailCrm->request->storeProducts(array('name' => $product['article']), 1, 20);  
if($store_response->getStatusCode() == 200){
        $product_id = $store_response['products'][0]['offers'][0]['id'];
  }
$orderData['items'][$key]['offer']['id'] = $product_id;
Здесь вы ищите на складе RetailCRM товар, у которого наименование совпадает с артикулом в minishop2. Если такой товар найден получаем его id.
Разумеется фокус сработает, если указанные данные у товаров в разных системах один и тот же.
Никто не мешает искать по другим общим параметрам.

Важно также понимать, что эти дополнительные запросы занимают время и заказ передается дольше, а клиент в этот момент сидит и смотрит на экран корзины.
Да, почему бы и нет. Правильнее было бы не TV использовать, а добавить новое свойство товара. Это уменьшит время оформления заказа. Ну и подставляйте новый идентификатор в массив товаров, поле externalID, в плагине
Нет не правильно.
Если товар в CRM не создан, то заказ все равно создается на основе присылаемых данных (название, цена, опции)
Если товары в базе CRM уже есть, то достаточно послать идентификатор товара, а все данные подтянутся из базы
Я что то упустил?
Разве на данный момент, метод getCustomerId() не регистрирует пользователя в обязательном порядке? Если да, регистрирует — то по идее уведомление пользователю обязательно должно быть. Это как минимум хороший тон, а местами и соответствие законодательству.

Если нет, не обязательна регистрация — то КОГДА ЭТО СЛУЧИЛОСЬ черт побери?
Твой вариант может и проще и правильнее. Но уж точно это не то решение, которое будет работать из коробки при минимуме затрат.
А вообще я же не претендую на максимальную точность. Просто рассказал о том, как я сделал, показал возможное решение вопроса, и примерно дал понять в какую сторону думать, при кастомизации.
// Вызываем класс 
$modsendpulse = $modx->getService('modsendpulse');
// Получаем email любым удобным способом, по вкусу проводим валидацию
$email = 'test@text.ru';
//Опционально добавляем Имя адресата любым удобным для Вас способом
$name = 'Петя Иванов';
//Получаем номера адресной книги из параметров сниппета или указываем вручную
$books = '201xxx2,2017xxx1';
//Делаем из строки массив
$books = explode(',', $books);
//В цикле отправляем в каждую книгу отдельно
foreach($books as $book){
// Вызываем метод добавления email в адресную книгу
$params['emails'] = array(
    array(
        'email' => $email,  
        'variables' => array(
            'name' => $name  
        )
    )
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
}
//Если книг много, и ждать перебора с отправкой долго - пишем параметры в промежуточную таблицу задач, потом по крону вызываем таблицу и по порядку отправляем данные в книги