Перейти к содержимому


Синхронизация КБ+сайт


Сообщений в теме: 9

#1 mak

    Активный участник

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 02 Июль 2015 - 22:40

подскажите алгоритм работы синхронизации. посмотрел пример, не понятно. в доках довольно скудно.

у меня задача сделать двухсторонний обмен данными.
для теста указал несколько полей таблицы контрагенты (двухсторонняя), создаю нового, ни чего не происходит, папки пусты, в логах тоже.

- при каких условиях запускается в разных режимах?
- обязательно указывать фильтр и зачем?
- в файлах содержатся только измененные и еще не обработанные данные?
- удаляет записи каждая сторона только из своего файла, если там что то есть дописывает?


настройки:
Прикрепленное изображение: 1.PNG
Прикрепленное изображение: 2.PNG

#2 mak

    Активный участник

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 03 Июль 2015 - 17:30

разобрался.
систему поставил а крон не настроил)))
файлы создает, вопросы отпали сами.

но почему, когда я копирую файл из папки выгрузки в папку загрузки, при этом изменив только название записи
было:
435;^5;новый
912;^5;5
441;^5;апрва
442;^5;првап
552;^5;Холодный

стало:

435;^5;изменил поле 435 в log
912;^5;5
441;^5;апрва
442;^5;првап
552;^5;Холодный

почему синхронизация вместо изменения названия контрагента, создала новую запись?
а при повторном копировании того же файла с еще раз измененным названием уже внес изменения в созданную ранее?

Прикрепленные изображения

  • Прикрепленное изображение: 1.PNG


#3 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 04 Сентябрь 2015 - 22:54

Доброго дня. Вам удалось синхронизировать сайт и КБ?

#4 mak

    Активный участник

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 05 Сентябрь 2015 - 15:54

да. только не по схеме кб. там неудобно реализовано - криво.
синхронизация кб-кб нормуль, а кб-сайт можно использовать только для загрузки инфы в кб.

мы пошли другим путем:
- на стороне кб скрипт по крону работает, все изменения номенклатуры отправляются на сайт.
- на сайте скрипт, который загружает их в систему через api bitrix (битрикс у нас магазин).
это для товаров. работает все через post запросы.

для заказов по другому сделано:
- на сайте, по событию создания заказа скрипт создает файл с данными о заказе
- на стороне кб, по крону ежеминутно, скрипт забирает эти файлы и добавляет пользователя и счет с позициями.

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

#5 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 11 Ноябрь 2015 - 17:40

Серьезная схема получилась...думал всё проще конечно. Спасибо что поделились опытом.

#6 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 17 Ноябрь 2015 - 22:38

Тоже реализуем синхронизацию с Битрикс и проблемы аналогичные решаем. А как такой синхронизацией вы справились с синхронизацией изображений товарной номенклатуры? Если дошли до этого уже...
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#7 mak

    Активный участник

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 17 Ноябрь 2015 - 23:14

все также. через post запрос передаются.


объем теоретически не ограничен.
битрикс нормально хавает по нескольку файлов за раз, объемом по 3-5 метров.
больше не проверял.

отправляется как то так:
        //////////////////////////////////////////////////////////////////////
        //функции для sync_post_tfb_query отправки запроса
                   // получить миме тип файла
                      function getMimeType($filename) {
                        if(function_exists('finfo_open')) {
                          $finfo = finfo_open(FILEINFO_MIME_TYPE);
                          $mime = finfo_file($finfo, $filename);
                          finfo_close($finfo);
                          return $mime;
                        }
                        return 'application/octet-stream';
                      }
                   // получить контент для запроса
                      function getContent($postData) {
                        $boundary = md5(rand(0,32000));
                        $content = '';
                        foreach($postData as $key => $val) { 
                          $content .= '--' . $boundary . "\n";
                          $content .= 'Content-Disposition: form-data; name="' . $key . '"' . "\n\n" . base64_encode(serialize($val)) . "\n";
                        }
                        // файлы для отправки
                        foreach($postData['data']['files'] as $file1) { 
                          if(count($file1['VOLUME'])>0){
                            foreach($file1['VOLUME'] as $file2) { 
                              $content .= '--' . $boundary . "\n"; 
                              $content .= 'Content-Disposition: form-data; name="' . basename($file2['path']) . '"; filename="' . basename($file2['path']) . '"' . "\n"; 
                              $content .= 'Content-Type: ' . getMimeType($file2['path']) . "\n"; 
                              $content .= 'Content-Transfer-Encoding: binary' . "\n\n"; 
                              $content .= file_get_contents($file2['path']) . "\n"; 
                            }
                          }
                        }
                        $content .= "--$boundary--\n";
                        return array($boundary, $content);
                    }
        //////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
// отправка массива в битрикс и получение результата экспорта
function sync_post_tfb_query($data, $token){
  $postdata = array('token' => $token, 'data' => $data);
  list($boundary, $content) = getContent($postdata);
  $opts = array('http' =>
	  array(
		  'method'  => 'POST',
		  'header'  => 'Content-Type: multipart/form-data; boundary=' . $boundary,
		  'content' => $content
	  )
  );
  $context = stream_context_create($opts);
  return unserialize(base64_decode(file_get_contents('http://toysforbaby.ru/servise/cb_sync/cb_sync_post.php', false, $context)));
}


#8 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 17 Ноябрь 2015 - 23:42

Т.е. примерно так из КБ можно передать содержимое поля типа "Изображение" в Битрикс?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#9 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 17 Ноябрь 2015 - 23:47

Просто у нас стандартной описанной схемой передаются только названия изображений.
Или post-запросы - это как раз реализация,выбранная вами взамен стандартной?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#10 mak

    Активный участник

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 18 Ноябрь 2015 - 11:30

Цитата

Т.е. примерно так из КБ можно передать содержимое поля типа "Изображение" в Битрикс?
да в общем откуда угодно и куда угодно. я привел просто код подфункции, которая отправляет запрос и получает результат.
post это http протокол, позволяет передавать разную информацию. погуглите...

Цитата

Просто у нас стандартной описанной схемой передаются только названия изображений.
Или post-запросы - это как раз реализация,выбранная вами взамен стандартной?
стандартную схему сразу отбросил, ей можно получить новые заказы с сайта, и то условно - связать товары и пользователей между сайтом и Кб проблематично.
но обновить существующие или создать новый на сайте точно не получится.

поэтому реализовали через post запросы.
смысл простой:
1. на стороне кб делаем массив с нужной инфой + файлы, отправляем его на сайт.
2. принимающий скрипт на сайте разбирает полученный массив и в зависимости от параметров делает что нужно: добавляет товар, меняет его, меняет стоимость, наличие... создает/меняет заказ, юзера и т.д.... пишем любой нужный нам алгоритм.
3. после отработки скрипт выводит кодированный результат как обычную html страницу, КБ его получает, раскодирует и записывает результат обмена.

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





Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных