retailcrm / opencart-module

OpenCart integration plugin
http://www.retailcrm.pro
MIT License
22 stars 43 forks source link

Передача полей Simple в RetailCRM #256

Closed nashyvan closed 1 year ago

nashyvan commented 1 year ago

Была подобная тема https://github.com/retailcrm/opencart-module/issues/95, но с тех пор модуль RetailCRM был полностью переписан.

Нашел в документации Simple данный код, немного модифицировал и добавил его в файле catalog/model/extension/retailcrm/order.php после 282 строки:

$objectOrder = 'order';
$queryGetSimpleOrderFields = $this->db->query('SELECT * FROM `' . DB_PREFIX . $objectOrder . '_simple_fields` WHERE `'.$objectOrder.'_id` = \'' . $order_id . '\' LIMIT 1');
$deliveryDateField = $queryGetSimpleOrderFields->row['deliveryDate'];

Как можно посмотреть что находится в самом $order при отправке заказа в RetailCRM и как правильно добавить в $order["customFields"] значение из $deliveryDateField?

klaos27 commented 1 year ago

Разве не получается взять $deliveryDateField из вашего же примера и сделать что-то подобное $order["customFields"]['ТУТ ПОЛЕ ИЗ CRM'] = $deliveryDateField;

nashyvan commented 1 year ago

Не получается, в catalog/model/extension/retailcrm/order.php, в функции processOrder после 310 строки, перед return $order; добавил этот код:

$simpleObjectOrder = 'order'; // может быть 'customer', 'address' или 'order'
$simpleObjectOrderId = $order_id; // $order_id получаем на 93 строке, записываем его в $simpleObjectOrderId для удобства
$queryGetSimpleOrderFields = $this->db->query('SELECT * FROM `' . DB_PREFIX . $simpleObjectOrder . '_simple_fields` WHERE `'.$simpleObjectOrder.'_id` = \'' . $simpleObjectOrderId . '\' LIMIT 1'); // возвращаем набор данных из заказа (order_id) в таблице oc_order_simple_fields

$deliveryDateField = $queryGetSimpleOrderFields->row['deliverydate']; // получаем значение из поля deliverydate
$deliveryTimeField = $queryGetSimpleOrderFields->row['deliverytime']; // получаем значение из поля deliverytime

$order['customFields']['deliverydate'] = $deliveryDateField; // добавляем deliverydate в order
$order['customFields']['deliverytime'] = $deliveryTimeField; // добавляем deliverytime в order

В $order['customFields'] нужно указывать же символьный код поля из RetailCRM?

image

Структура таблицы oc_order_simple_fields

image
uryvskiy-dima commented 1 year ago

Добрый день. Заказ создается в CRM ? В переменных $deliveryDateField и $deliveryTimeField точно есть значение ? Что бы посмотреть данные в $order, их можно записать в файл

Да, в приведенном примере установка значений кастомных полей происходит корректно.

В $order['customFields'] нужно указывать же символьный код поля из RetailCRM?

nashyvan commented 1 year ago

Да, заказ создается в CRM. Данные из кастомных полей записываются в базу данных, но, возможно, функция proccessOrder выполняется первее, чем модуль Simple сохраняет данные.

Я пытался записать через file_put_contents, но файл почему-то не сохраняется. Перед return $order; в proccessOrder() я добавил:

file_put_contents("/home/hestia/web/domain.com/private/storage/logs/retailcrmProcessOrder.txt", print_r($order, true));

Где domain.com - доменное имя. Права на запись в /home/hestia/web/domain.com/private/storage/logs/ есть (775, пробовал еще с 777)

Есть ли другой способ посмотреть, что сохраняется в $order при оформлении заказа?

uryvskiy-dima commented 1 year ago

В таком случае рекомендуется использовать Xdebug для отладки метода proccessOrder.