Публичное пространство
Решение вопросов по интеграции после перехода на версию 10.4.0.0
Что изменилось?
Начиная с версии 10.4.0.0, SetRetail10 перешел на новую версию сервера приложений WildFly 26.1.3.
Подробнее в статье WildFly (ex. JBoss) в SetRetail10 версия 10.4.0.0
Новая версия сервера более строго следует спецификации SOAP, что может повлиять на интеграционные потоки и обмен данными с учетными системами.
Чтобы избежать проблемы, при интеграции с SetRetail10 используйте только актуальные схемы XSD и WSDL согласно следующим правилам:
методы должны быть сгенерированы только на основе WSDL;
сообщения должны проверяться на соответствие XSD-схемам.
Важно
Клиентам, использующим 1С в качестве ERP-системы важно обратите внимание на информацию в главах ниже!
Риски при обмене данными
Если при интеграции были отклонения от указанных рекомендаций, то после обновления на версию 10.4.0.0 есть вероятность возникновения проблем с обменом данными. Эти проблемы могут оказать критичное влияние на бизнес:
Остановка импорта переоценок на кассы.
Остановка получения чеков с SetRetail10.
Что делать?
Перед обновлением на версию 10.4.0.0 и выше, обязательно проверьте все потоки обмена данными с Set Retail 10 на тестовом окружении. Это позволит заранее удостовериться, что более строгие критерии по соблюдению протоколов обмена выдерживаются и после обновления не возникнет проблем с обменом. Это позволит своевременно решить проблемы, так как они были обнаружены на тестовом окружении.
Проблемные кейсы
Далее описываются проблемные кейсы, которые уже встретились у клиентов после обновления и пути их решения.
Кейс 1. Некорректно указан namespace
В XML-сообщениях, которые отправляются в SetRetail10, некорректно указан namespace
(пространство имен). Это означает, что указанное в XML-сообщении пространство имен не соответствует тому, что указано в XSD-схеме на странице XSD и WSDL для этого типа данных.
Разбор на примере импорта цен:
Пример неправильного 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-сообщение считается некорректным и отклоняется сервером:
Пример правильного указания 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
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, ООО «Кристалл Сервис Интеграция».
Все права защищены..