Итак, настроил выгрузку заказов и каталога из Cs Cart в RetailCRM через штатный модуль, но печалька в то, что СРМ должна прокидывать полученый заказ в Мой склад.
Ситуация такая, что и в cs cart и в СРМ каталог выгружается из МОЙ склад… Внешние коды (externalID) совпадают, но сам модуль YML-экспорт не включает в итоговый файл данное поле из товаров. Пытался разобраться сам в модуле, но не хватает знаний по проектированию. Не могу толком разобраться, что и откуда растет)))Кто-то может помочь или подсказать, как заставить модуль на программном уровне включать в оферы параметр товара external_id ?
Пример файла выгрузки:
Ровно с тем же столкнулся, как раз сидел составлял ТЗ на правку этой особенности штатного модуля.
Может и так сами решим, посмотрю сейчас.
@ecomlabs, не подскажете, есть тут какое-то несложное решение?
Если я правильно понял, вам нужно в файле
app/addons/yml_export/Tygh/Ym/Offers/Base.php
поправить функцию build и в $offer[‘attr’] добавить элемент productId
ДА, я тоже сижу над этим файлом, но не могу током понять, как движуться данные и есть ли какие-то зависимости далее. Пробывал в модуле RetailCRM принудительно делать выборку из базы, но не сработало
Кручу-верчу и никак не могу в параметр передать external_id. Товарищи, помогайте младшеньким) Позялюсьта)
ХЕ, я это сделал. Дайте на печеньку и расскажу всем как )))
Да чего там, держи сразу печеньку )))
Может откроете тайну. Как Вы это сделали?
- Я сгенерировал каталог для retailCRM с помощью этого костыля https://github.com/retailcrm/moysklad-catalog
- В MySQL ной базе поправил у одного товара external_id сделал его таким же как и product_id
- В Моем складе у этого же товара прописал такой же внешний код
Теперь проходит заказ только по этому товару. Вывод: нужно ковырять модуль обмена c RetailCRM, что бы товар в заказе был вязался по external_id. Либо каким-то образом первоначальной выгрузке товара из Моего склада в Cs-Cart присваивать external_id = product_id
Разработчики, подскажите в каком направлении двигаться?
Дайте кусок кода Ваш, который на скрине моем чуть выше. Бэк ап слетел. И потом выложу решение
public function build($product)
{
$category_id = $product[‘category_id’];
$available = 'true';
if ($product['tracking'] == 'B' && $product['amount'] <= 0) {
$available = 'false';
}
$offer = array(
'attr' => array(
'id' => $product['product_id'],
'available' => $available
),
'items' => array(
'url' => $this->escapeUrl($product['product_url']),
'price' => !empty($product['price']) ? fn_format_price($product['price']) : '0',
'currencyId' => !empty($currency) ? $currency['currency_code'] : CART_PRIMARY_CURRENCY,
'categoryId' => $category_id
)
);
Вы это хотели?
Да. Сейчас поправлю код и будет всем счастье. Ждите
Класс.
Тогда этого действия по правке внешнего кода недостаточно. Нужно еще и передачу заказа править
Я про это и говорю. Я в PHP не силен, но похоже где то в файле app\addons\retailcrm\Tygh\Addons\Retailcrm\Converters\OrderConverter.php собака зарыта Обратите внимание на строки 137 - 139.
И еще, пока не знаю как в RetaiCRM логи API посмотреть. Поэтому правильность прохода товара в заказе можно проверить путем его отрытия в заказе. Если товар не открывается значит в заказе товар не идетифицированный, то есть его нет в каталоге CRM. Пробовал менять в строке 139 наобум на external_id. В журнале личного кабинета обмена RetailCRM - мой склад написано
Обычно
Заказ №55 не выгружен. Товар id=163 (externalId=40413) не связан с системой МойСклад
При моем кривом изменении
Заказ №58 не выгружен. Товар id=166 (внутренний id=269698) не связан с системой МойСклад
Кто-то знает из какого идентификатора retailcrm берет значение в свою переменную externalid?
А у всех вообще YML для ритейла генерируется без ошибок?
У меня огромная простыня ошибок PHP вместо лога. Пробегаюсь по итоговому YML и вижу кучу задубливаний офферов, которые наполнены с ошибками.
Стоит PHP 7.1
Ну, логи бы посмотреть, а так, это отдельную тему делать надо. Что в логах написано?
Решение оказалось полурабочим т.к. id конфликтует где-то с кодом другим и не дает парсеру отработать. Запустил спайдера на эту ночь. Посмотрим, что накопает и завтра выясним. Рабочий кусок кода выложу только после успешного результата