Rose debug info
---------------

Как отлаживать обмен заказами между 1С и сайтом на Битрикс?

Эта статья предназначена для тех, кто уже представляет себе механизм обмена заказами между 1С и Битрикс. Задача: отладить В ней вы найдете этапы отладки обмена заказов, а также в удобном формате приведены запросы, которые можно использовать при отладке, подставляя в них свои значения имени файла и sessid. Если вам необходимо подробное описание механизм обмена, то он есть в другой статье.

Для отладки обмена заказами между 1С и сайтом на Битрикс необходимо удостоверится, что 1С может авторизоваться на сайте, 1С присылает правильные запросы, запросы корректно обрабатываются на стороне сайта, приходит корректный xml.

Проверка авторизации

Если 1С присылает запросы на сайт (для этого нужно посмотреть лог запросов), то этот этап можно пропустить.

Если запросов нет, то обычно причиной этого могут быть проблемы с авторизацией 1С на сайте.

В настройках обмена внутри 1С последовательно проверяем:

  1. адрес подключения к сайту. В большинстве случаев адрес будет вида:
https://<адрес_сайта>/bitrix/admin/1c_exchange.php
  1. логин и пароль пользователя битрикс, под которыми 1С подключается;
  2. правильность адреса прокси-сервера (если задан).

В настройках обмена внутри Битрикс проверяем:

  1. пользователь, под которым 1С осуществляет обмен принадлежит к группе, которая обладает правами на осуществление обмена заказами (для обмена каталогом и заказами права настраиваются отдельно).

Зачастую бывает, что внутри 1С указан пользователь, который является администратором сайта. Рекомендую завести отдельного пользователя и группу для выгрузки 1С, например, 1c_exchange. Во-первых, права группы «администраторы» избыточны для выгрузки. Во-вторых, при дальнейших отладках вы сразу будете видеть, что та или иная сущность (например, элемент инфоблока) была изменена пользователем, который отвечает за обмен. Это очень удобно.

Ошибка «failure Обновите модуль обмена»

Если на любой запрос, например, mode=checkauth, 1С получает ответ: «failure Обновите модуль обмена», то самыми распространенными причинами могут быть:

Старая 1С стучится по протоколу https

Самый простой вариант решения — выделить на сайте отдельный поддомен без https, на который и направить 1С. Что-то вроде подойдет:

https://1c.<адрес_сайта>/bitrix/admin/1c_exchange.php

В запросе от 1С указан неверный sessid или не указан вообще.

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

Блок запросов всегда начинается с mode=checkauth и заканчивается запросом перед следующим mode=checkauth.

Проверяем, что 1С присылает правильные запросы и что сайт их корректно обрабатывает

Чтобы проверить, какие запросы присылает 1С, нужно посмотреть лог запросов к сайту. Например, настроив access-логи на сервере. Для удобства можно 1С направить на отдельный поддомен, на который будет ходить только 1С. Так в файле логов будут только запросы от 1С. Далее открываем файл логов и смотрим. В нем должны быть запросы, которые приведены ниже. Порядок запросов также должен совпадать.

Для проверки корректности ответов на запросы нужно посмотреть лог выгрузки внутри 1С — там обычно собираются ответы. Либо, выполнить запросы вручную в браузере. Обычно это оказывается наиболее удобным способом. Ответы на любой запрос обычно будут содержать «success», «progress» или «failure» (кроме запроса mode=init — у него ответ выглядит примерно так: zip=yes file_limit=204800). Пустых ответов на запрос быть не должно.

Заказы из Битрикс в 1С

https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid=<id_сессии_из_первого_запроса>
https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=<id_сессии_из_первого_запроса>
https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=success&sessid=<id_сессии_из_первого_запроса>

В ответ на запрос 3 должна сформироваться xml со списком заказов, которые были созданы / изменены после последнего обмена (блока таких же запросов). Если новых / измененных заказов нет, то Битрикс отдаст пустую xml со строкой заголовка. Чтобы xml была не пустой нужно перед выполнением запросов изменить текущий заказ или создать новый. Если вы получаете xml в ответ, то сайт обрабатывает запросы корректно.

Заказы из 1С в Битрикс

https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid=<id_сессии_из_первого_запроса>

После этого запроса из папки /upload/1c_exchange/ удаляются файлы предыдущего обмена документами. Если вы проверяете запросы вручную, то после этого запроса вам нужно по указанному адресу положить свой файл (для этого предварительно можно на стороне 1С сделать выгрузку в файл).

https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=file&filename=<имя_файла>&sessid=<id_сессии>
https://<адрес_сайта>/bitrix/admin/1c_exchange.php?type=sale&mode=import&filename=<имя_файла>&sessid=<id_сессии>

Запросы mode=file и mode=import могут повторятся несколько раз до получения ответа от сайта «success», либо до ошибки. Как только на запрос mode=import получен ответ «success», то на сайте должны обновиться заказы, которые были в xml. Это будет говорить о том, что обработка выгрузки заказа на сайте прошла успешно.

Проверяем, что XML корректный

Если все запросы корректные и проходят без ошибок, но при этом нужных обновлений в 1С или в Битриксе не происходит, то необходимо проверить xml на корректность и на присутствие в нем необходимых данных.

Поделиться
Отправить