Публичное пространство

Решение вопросов по интеграции после перехода на версию 10.4.0.0

Что изменилось?

Начиная с версии 10.4.0.0, SetRetail10 перешел на новую версию сервера приложений WildFly 26.1.3.

Подробнее в статье https://crystals.atlassian.net/wiki/spaces/SR10SUPPORT/pages/4085940254

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

Чтобы избежать проблемы, при интеграции с SetRetail10 используйте только актуальные схемы https://crystals.atlassian.net/wiki/spaces/INT/pages/2065678 согласно следующим правилам:

  • методы должны быть сгенерированы только на основе WSDL;

  • сообщения должны проверяться на соответствие XSD-схемам.

 

Важно

Клиентам, использующим 1С в качестве ERP-системы важно обратите внимание на информацию в главах ниже!

Риски при обмене данными

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

  • Остановка импорта переоценок на кассы.

  • Остановка получения чеков с SetRetail10.

Что делать?

Перед обновлением на версию 10.4.0.0 и выше, обязательно проверьте все потоки обмена данными с Set Retail 10 на тестовом окружении. Это позволит заранее удостовериться, что более строгие критерии по соблюдению протоколов обмена выдерживаются и после обновления не возникнет проблем с обменом. Это позволит своевременно решить проблемы, так как они были обнаружены на тестовом окружении.

Проблемные кейсы

Далее описываются проблемные кейсы, которые уже встретились у клиентов после обновления и пути их решения.

Кейс 1. Некорректно указан namespace

В XML-сообщениях, которые отправляются в SetRetail10, некорректно указан namespace (пространство имен). Это означает, что указанное в XML-сообщении пространство имен не соответствует тому, что указано в XSD-схеме на странице https://crystals.atlassian.net/wiki/spaces/INT/pages/2065678 для этого типа данных.

Разбор на примере импорта цен:

Пример неправильного XML-сообщения с namespace

Пример проблемного XML-сообщения с импортом цены:

<?xml version="1.0" encoding="UTF-8"?> <goods-catalog xmlns="http://bestRetailer.ru/SetRetail_10/goods" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <price-entry marking-of-the-good="12345" price="70" price-type="PRICE"> <shop-indices>290</shop-indices> <begin-date>2021-03-23T02:00:00</begin-date> <number>1</number> <department> <name>Продовольственный</name> </department> </price-entry> </goods-catalog>

Некорректно заполнен атрибут xmlns="http://bestRetailer.ru/SetRetail_10/goods", так как в XSD-схеме импорта товарного справочника (goods-catalog-schema.xsd) из раздела такого пространства имен нет, поэтому XML-сообщение считается некорректным и отклоняется сервером:

image-20240403-204341.png

Пример правильного указания namespace

Вариант 1. Без указания namespace

В XML-сообщении не производится указания пространство имен namespace (в теге <goods-catalog> не указывается атрибут xmlns ни в каком виде ).

Пример корректного сообщения:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <goods-catalog> <price-entry marking-of-the-good="00007" price="120" price-type="PRICE"> <shop-indices>7212</shop-indices> <begin-date>2021-03-23T02:00:00</begin-date> <number>1</number> <department> <name>Продовольственный</name> </department> </price-entry> </goods-catalog>

 

Вариант 2. Указание объявленного namespace согласно XSD-схеме

В сообщении указывается только, то пространство имен, которое объявлено в XSD-схеме для этого типа сообщений (с учетом префиксов после двоеточих).

В XSD-схеме товарного справочника используется xmlns:xs="http://www.w3.org/2001/XMLSchema". Это будет означать, что при импорте любых сущностей товарного справочника можно указывать только это пространство имен <goods-catalog xmlns:xs="http://www.w3.org/2001/XMLSchema">.

Проверяйте актуальность XSD-схемы в статье

Пример корректного сообщения:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <goods-catalog xmlns:xs="http://www.w3.org/2001/XMLSchema"> <price-entry marking-of-the-good="00007" price="120" price-type="PRICE"> <shop-indices>7212</shop-indices> <begin-date>2021-03-23T02:00:00</begin-date> <number>1</number> <department> <name>Продовольственный</name> </department> </price-entry> </goods-catalog>

Кейс 2. Некорректно указан SOAPAction

При отправке SOAP-запросов на сервер некорректно указан заголовок запроса SOAPAction.

Пример разбора при импорте товарного справочника в SetRetail10 ниже.

Неправильный импорт c указанием SOAPAction

Пример списка HTTP-заголовков при отправке запроса:

Некорректное значение: SOAPAction: getGoodsCatalog

image-20240403-210411.png
  • POST http://172.29.17.212:8090/SET-ERPIntegration/SET/WSGoodsCatalogImport HTTP/1.1

  • Accept-Encoding: gzip,deflate

  • Content-Type: text/xml;charset=UTF-8

  • SOAPaction: getGoodsCatalog

  • Content-Length: 882

  • Host: 172.29.17.212:8090

  • Connection: Keep-Alive

  • User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)

 

В ответ неверный SOAP-запрос сервер вернет ошибку:

Правильный импорт без указания и с указанием SOAPAction

В wsdl операции SOAPAction не указаны.

SOAPAction должен быть либо указан пустым (тогда он будет вычислен по правилам ниже), либо сразу указан по следующим правилам:

В данном примере это:

  • target namespace: http://plugins.products.ERPIntegration.crystals.ru/

  • port type: WSGoodsCatalogImport

  • input name: getGoodsCatalog

Корректный SOAPAction будет:

Валидация теперь проходит в соответствии со спецификацией. А спецификация требует, чтобы SOAPAction в заголовках и в wsdl совпадали.

Корректный пример с пустым заголовком

SOAPAction: ""

Корректный пример с заполненным заголовком

SOAPaction: http://plugins.products.ERPIntegration.crystals.ru/WSGoodsCatalogImport/getGoodsCatalog

 

© 1994-2023, ООО «Кристалл Сервис Интеграция».
Все права защищены..

Политика обработки персональных данных