Меню

Ошибка проверки источника запроса обновите модуль обмена bitrix

Некоторые пользователи видят ошибки вида:

При выгрузке товаров
Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента

При обмене заказами

Ошибка проверки источника запроса. Обновите модуль обмена

В версии Битрикса 14.5 появился новый режим контроля сессий при обмене с 1С. Это необходимо для безопасности и работает только с новыми дополнениями Битрикса (4.0.0.0 и выше) для 1С.

Ошибка возникает, когда на сайте включены проверки для новых версий обмена в 1С, а 1С старая.

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

Модуль позволяет администратору отключить проверку для стандартного обмена с 1С.

Модуль позволяет отключить проверку постоянно, так, чтобы она не включалась обратно.

Магазин → Продвинутый обмен с 1С → Проверка источника запроса

Проверка источника запроса

Попробуйте отключить проверку источника запроса при обмене.

Проверка источника запроса Товары и заказы

Для выгрузки заказов в разные 1С (или в Битрикс24) мы рекомендуем использовать разные пути файлов. Так удобнее и не происходит путаницы при экспорте заказов.


0
 

 Отказоустойчивость |

Описание курса

| Ускорение сайта. Отложенный сброс управляемого кеша инфоблоков 

Для ее ликвидации во время синхронизации
надо
1. в init засунуть

COption::SetOptionString(«catalog», «DEFAULT_SKIP_SOURCE_CHECK», «Y»);

COption::SetOptionString(«sale», «secure_1c_exchange», «N»);

2. надо правильно передать сессию. Ее брать вот от сюда ссылка для примера

Request URL: https://test.test/bitrix/tools/public_session.php?k=4aacafaf96864df0cc0f844462bad041.d218e58fd17c62b6717dcf32e73e045f342b7885555d162ac42c59a8832c5a6
правильное значение 4aacafaf96864df0cc0f844462bad041

нас интересует вот эта строка

elseif (!check_bitrix_sessid())

{  

echo «failuren»,GetMessage(«CC_BCIH_ERROR_SOURCE_CHECK»);

}

Ошибка исходит от этой функции check_bitrix_sessid

Надо ее рассмотреть https://bxapi.ru/src/?module_id=main&name=check_bitrix_sessid

function check_bitrix_sessid($varname=‘sessid’)

{

    $request = MainContext::getCurrent()->getRequest();

    return (

        $request[$varname] === bitrix_sessid() ||

        $request->getHeader(‘X-Bitrix-Csrf-Token’) === bitrix_sessid()

    );

}

Как работает. сначала получаем гет запрос. И далее 2 проверки. Если что то не так работает- то выскочит ошибка.

Неопытным разработчикам кажется, что это процесс обмена Битрикса и 1С это очень сложный процесс, но с опытом понимаешь, что это не просто сложно: это вообще полная жесть. Попробую описать словами этот процесс. Добро пожаловать в ад описание обмена с 1с.

Инициатором любого обмена является 1С, сайт не загружает ничего в 1С, сайт только принимает запросы и отдаёт результат. По умолчанию, 1С обращается к скрипту /bitrix/admin/1c_exchange.php. Этот путь указывается в настройках обмена в самой 1С. Из коробки в этом файле включается файл /bitrix/modules/sale/admin/1c_exchange.php. Если открыть файл, то видим там подключение нескольких компонентов в зависимости от $_GET[«type»]. В общем случае интересуют два из них:

bitrix:catalog.import.1c – импорт каталога.

bitrix:sale.export.1c – экспорт заказов.

Импорт товаров из 1С

Импорт начинается с авторизации, посылается запрос на /bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth с передачей логина и пароля пользователя сайта, которые указали в настройках обмена. После авторизации сайт выдает ID сессии.

Далее идёт инициализация обмена, URL /bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=ID_Сессии. На этом этапе в сессии инициализируется массив данных обмена $_SESSION[«BX_CML2_IMPORT»] и сайт отдаёт параметры обмена: возможность использования zip, лимит размера файла и т.д. Также на этом этапе очищается папка для файлов выгрузки. Скорее всего, это будет папка /upload/1c_catalog/. Для отладки можно включить сохранение старых файлов обмена, тогда при новом обмене старые данные будут перемещаться в отдельные папки: 1c_catalog0, 1c_catalog1 и т.д.. Для сохранения данных нужно объявить константу в dbconn.php:

// Не забудьте убрать эту строку после отладки во избежание переполнения сервера
define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

После этого 1С начинает подготовку данных и далее посылает их POST-запросом на сайт частями, URL: /bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=ИМЯ_ФАЙЛА.zip&sessid=ID_Сессии. Запрос продолжается, пока файлы не будут переданы полностью.

1С передает на сайт xml-файлы с данными товаров и предложений, а также картинки. В случае если сайт разрешил использовать zip, то 1С передает все файлы одним архивом. Тогда следующий шаг начинается с его распаковки.

В выгрузке могут участвовать xml-файлы:

  • import.xml — товары, разделы, типы цен, склады, свойства товаров и единицы измерения;
  • offers.xml — торговые предложения товаров и их свойства;
  • prices.xml — цены торговых предложений(в новых версиях);
  • rests.xml — остатки торговых предложений(в новых версиях);
  • references.xml — пользовательские справочники (highload-инфоблоки, в новых версиях).

Узнать подробнее о файлах обмена

Картинки загружаются в папку /upload/1c_catalog/import_files/.

Далее начинаются обработка файла и сам импорт данных, 1С раз за разом обращается к URL /bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=ИМЯ_ФАЙЛА_ВЫГРУЗКИ.xml, где ИМЯ_ФАЙЛА_ВЫГРУЗКИ — import.xml, offers.xml и т.д. Импорт завершается, когда сайт отдаёт слово «success». За обработку файла выгрузки отвечают классы CIBlockXMLFile (/bitrix/modules/iblock/classes/mysql/cml2.php) и CIBlockCMLImport (/bitrix/modules/iblock/classes/general/cml2.php).

Импорт состоит из нескольких шагов:

  1. Очистка временной таблицы (таблица b_xml_tree)

    Метод CIBlockXMLFile::DropTemporaryTables(). Обычный drop таблицы b_xml_tree.

  2. Создание временной таблицы

    Метод CIBlockXMLFile::CreateTemporaryTables(). Здесь создается таблица b_xml_tree. Можно, кстати, задать storage engine этой таблицы, равно как и всех создаваемые битриксом, с помощью определения константы MYSQL_TABLE_TYPE.

  3. Чтение файла во временную таблицу

    Метод CIBlockXMLFile::ReadXMLToDatabase().

  4. Индексация временной таблицы

    Метод CIBlockXMLFile::IndexTemporaryTables().

  5. Импорт метаданных

    Метод CIBlockCMLImport::ImportMetaData.

  6. Импорт разделов

    Метод CIBlockCMLImport::ImportSections.

  7. Деактивация разделов и пересчёт левой и правой границ для разделов

    Методы CIBlockCMLImport::DeactivateSections и CIBlockCMLImport::SectionsResort.

  8. Импорт элементов

    Самый длительный процесс, на этом этапе добавляются и обновляются новые товары (если загружается import.xml) или обновляются цены и остатки (если загружаетс offers.xml). Здесь задействован метод CIBlockCMLImport::ImportElements, который вызывает CIBlockCMLImport::ImportElement для товаров или CIBlockCMLImport::ImportElementPrices для остатков/цен.

  9. Деактивация элементов

    Методы CIBlockCMLImport::DeactivateSections и CIBlockCMLImport::SectionsResort.

  10. success

    Импорт файла завершен, сайт отвечат словом «success», 1С считает обмен успешным. При необходимости начинается импорт следующего файла.

Некоторые шаги могут выполняться за несколько запросов, порциями по несколько секунд (это время настраивается параметров «Интервал одного шага в секундах» в настройках интеграции с 1С в админке Битрикса).

Модификация

На шаге 9, т.е. по окончании обработки файла выгрузки (NB: одного файла, например, товаров или предложений) вызывается событие OnSuccessCatalogImport1C модуля catalog. Аргументы обработчика — параметры компонента обмена и путь к файлу выгрузки.

Также для изменения процесса обмена можно использовать обычные события, например, OnBeforeIBlockElementUpdate или OnBeforeProductAdd. В обработчике, чтобы определить, что событие вызвано именно во время обмена с 1С, я использую такое костыльное условие:

if (isset($_GET['type'], $_GET['mode']) && $_GET['type'] === 'catalog' && $_GET['mode'] === 'import') {
    // ...
}

Ну и, если ничего нельзя решить событиями, всегда можно полностью изменить процесс обмена, скопировав и изменив файл /bitrix/admin/1c_exchange.php, компонент bitrix:catalog.import.1c и класс CIBlockCMLImport.

Отключение проверки источника запроса

Как и в случае с выгрузкой товаров, при импорте товаров есть проверка источника запроса. Можно отключить её следующим кодом:

// old school:
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y"); 
// d7 style:
BitrixMainConfigOption::set("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");

Экспорт заказов в 1С

Обмен заказами начинается с авторизации с помощью логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth.

После получения ID сессии идёт инициализация обмена, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid=ID_Сессии. На этом этапе сайт отдаёт настройки обмена со стороны сайта.

Для получения списка заказов запрашивается URL /bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ID_Сессии. Выгружаются заказы с полями EXTERNAL_ORDER = «N», UPDATED_1C = «N» и обновившиеся после последней успешной выгрузки в 1С (это проверяется по времени из свойства «last_export_time_committed_/bitrix/admin/1c_excha» модуля sale).


Флаг EXTERNAL_ORDER указывает, что заказ создан в 1С и его выгрузка в 1С не требуется.

Флаг UPDATED_1C после успешного импорта из 1С на сайте устанавливается в «Y» и такие заказы не участвуют в дальнейших экспортах до их обновления на сайте. Во время обновлений заказов на сайте UPDATED_1C устанавливается в «N».

После обработки заказов 1С для завершения обмена запрашивает URL /bitrix/admin/1c_exchange.php?type=sale&mode=success&sessid=ID_Сессии. При этом в свойство «last_export_time_committed_/bitrix/admin/1c_excha» модуля sale записывается время запроса списка заказов (НЕ текущее время, т.к. с момента запроса заказов до их обработки могли добавиться заказы и они попадут в следующую выгрузку с сайта).

Модификация

В экспорте заказов участвуют файл /bitrix/admin/1c_exchange.php, компонент bitrix:sale.export.1c и класс CSaleExport. Какие-либо события здесь отсутствуют, поэтому для модификации этого процесса нужно заменить компонент на свой, создать класс-наследник CSaleExport и заменить вызовы в компоненте на него. В последних версиях Битрикс этот класс стал относительно читабельным, в старых там была просто простыня из php и «xml».

Отключение проверки источника запроса

С версии 15.5 добавлена дополнительная проверка и если вызвать просто /bitrix/admin/1c_exchange.php?type=sale&mode=query, то получим ошибку «failure Ошибка проверки источника запроса. Обновите модуль обмена». Если нет желания возиться с sessid, то можно отключить проверку источника запроса, для этого нужно выполнить:

// old school:
COption::SetOptionString("sale", "secure_1c_exchange", "N");
// d7 style:
BitrixMainConfigOption::set("sale", "secure_1c_exchange", "N");

Статья будет дополняться по мере появления новой информации и вдохновения.


Также полезно почитать:

  • Алгоритм выгрузки данных на сайт
  • Протокол обмена между системой «1С:Предприятие» и сайтом
  • Подробнейшая документация класса CIBlockCMLImport

Эта статья предназначена для тех, кто уже представляет себе механизм обмена заказами между 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 на корректность и на присутствие в нем необходимых данных.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка проверки индикатора биос gigabyte
  • Ошибка проверки индикатора bios при обновлении