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

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

С нами с 06 июня 2015; Место в рейтинге пользователей: #5
Николай Савин
01 ноября 2018, 18:46
0
Это кардинально неправильный подход.
Нужно использовать систему плагинов. Попробуй создать плагин на событие onUserSave (не уверен, что это событие сработает). Как вариант можно создать плагин на событие msOnCreateOrder, там тоже есть доступ к данным заказчика. И уже оттуда отправлять данные в адресную книгу
Николай Савин
31 октября 2018, 18:13
0
Выше посмотри. Здесь же в комментариях несколько раз писал уже
Николай Савин
31 октября 2018, 16:21
0
А где собственно запись ответа в лог? Нужно же после запроса еще ответ в лог записать, чтобы посмотреть ошибку
Николай Савин
26 октября 2018, 11:17
0
Верно заметил. Сообщество, а не детский сад. Здесь нянечек нет. Не нравится — не используй. Сделай сам.
Николай Савин
26 октября 2018, 10:34
0
Потому что ты просишь чтобы за тебя все сделали, разжевали и готовое на блюдечке вынесли.
Николай Савин
26 октября 2018, 10:30
0
на 130 с лишним скачиваний — он почему то у тебя одного не работает. Тебе не кажется, что проблема не в компоненте, а где то еще?
Николай Савин
26 октября 2018, 10:22
0
С какой задачей? Перебрать массив опций и проверить их на пустоту? Это основа PHP: циклы и условия. Если ты не знаешь как делать подобные вещи — то лучше обратись в раздел работа.
Николай Савин
26 октября 2018, 10:11
0
Ну как я и сказал. Если у свойства товара пустое значение — RetailCRM вернет ошибку.
Можно ли сделать какое-то условие, если модификация пустая не учитывать ее?
Ответить
Можно — разрешаю.
Николай Савин
26 октября 2018, 08:44
0
Насколько я понял, у тебя что то не то с модификациями. Может просто пустые.
Попробуй, распечатай перед отправкой массив с данными, может что-то будет более ясно.

$modx->log(1, print_r($orderData, 1));
Николай Савин
26 октября 2018, 07:55
0
Вот после этой строки в плагине
$response = $modRetailCrm->request->ordersCreate($orderData, $site);
можно включить логгирование
$modx->log(1, print_r($response, 1));
Мне очень нравится как API RetailCRM возвращает ошибки. Все предельно понятно
Николай Савин
22 октября 2018, 14:11
+1
Хотя бы плюсик к статье поставьте вместе со спасибо,
По существу Не уверен что такая доработка плагина нужна. Вы пока второй на 130 загрузок, кто такое спрашивает.
Николай Савин
22 октября 2018, 12:51
0
Вообще при выгрузке нужно указывать идентификатор товара в поле 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.
Разумеется фокус сработает, если указанные данные у товаров в разных системах один и тот же.
Никто не мешает искать по другим общим параметрам.

Важно также понимать, что эти дополнительные запросы занимают время и заказ передается дольше, а клиент в этот момент сидит и смотрит на экран корзины.
Николай Савин
19 октября 2018, 18:38
0
В конце плагина есть закомментированная строчка записи результата в лог. Нужно раскомментировать и посмотреть какая будет ошибка
Николай Савин
19 октября 2018, 12:55
0
Да, почему бы и нет. Правильнее было бы не TV использовать, а добавить новое свойство товара. Это уменьшит время оформления заказа. Ну и подставляйте новый идентификатор в массив товаров, поле externalID, в плагине
Николай Савин
17 октября 2018, 13:11
0
В плагине, в самом конце есть закомментированная строчка логгирования.
Достаточно ее раскомментировать и будет запись в журнал, с достаточно подробным описанием ошибки.
Николай Савин
17 октября 2018, 12:48
0
Нет не правильно.
Если товар в CRM не создан, то заказ все равно создается на основе присылаемых данных (название, цена, опции)
Если товары в базе CRM уже есть, то достаточно послать идентификатор товара, а все данные подтянутся из базы
Николай Савин
17 октября 2018, 08:55
+4
Видишь какую тему больную поднял. По любому нужно что то придумать в ядре
Николай Савин
17 октября 2018, 05:09
+3
Я что то упустил?
Разве на данный момент, метод getCustomerId() не регистрирует пользователя в обязательном порядке? Если да, регистрирует — то по идее уведомление пользователю обязательно должно быть. Это как минимум хороший тон, а местами и соответствие законодательству.

Если нет, не обязательна регистрация — то КОГДА ЭТО СЛУЧИЛОСЬ черт побери?
Николай Савин
16 октября 2018, 18:59
0
Твой вариант может и проще и правильнее. Но уж точно это не то решение, которое будет работать из коробки при минимуме затрат.
А вообще я же не претендую на максимальную точность. Просто рассказал о том, как я сделал, показал возможное решение вопроса, и примерно дал понять в какую сторону думать, при кастомизации.
Николай Савин
16 октября 2018, 18:56
0
Боюсь Володя не пропустит, вон ругаться уже начал