Закажите бесплатную презентацию продуктов РосБизнесСофт прямо сейчас!
Встроенное API позволяет обмениваться данными Системы с любым сторонним приложением в формате XML.
Например, с помощью API можно сделать интеграцию с:
Для того, чтобы пользователь имел доступ по API, в т.ч. для подключения через мобильное приложение, ему нужно поставить соответствующую галочку в «Настройках».
Обычно создается специальный пользователь для работы с API.
API интерфейс работает по адресу:
https://client__.rbs360.ru/api/xml/
Все запросы к API отправляются в POST.
Структура запроса отражает структуру данных объектов в «Конфигурации» кроме служебных объектов.
Для работы с API можно использовать вспомогательный класс на PHP. Подробное описание класса см. ниже.
Запросы системе передаются последовательно, один за другим. Команды должны быть обернуты в корневой тег.
Каждый запрос представлен тегом. Тег всегда должен иметь параметр type (list, edit и т. д.), в котором необходимо передать корректный тип запроса.
Также можно передать в качестве атрибута тега параметр «uid», несущий в себе уникальный идентификатор запроса. В это случае, при ответе системы этот идентификатор будет возвращен (это удобно для внутреннего различения запросов внутри системы). Если идентификатор не передан, он будет сгенерирован автоматически.
Пример запроса:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit" uid="80085"> … </action> </request>
Авторизация в системе производится запросом типа «auth». При этом, если указаны верные данные, система сгенерирует и вернет 64-символьный идентификатор сессии. Этот идентификатор необходимо в передавать системе в последующих запросах в заголовке в виде Cookie с названием «sess_id».
Запрос на авторизацию:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="auth" uid="80085"> <login>my_login</login> <password>my_password</password> </action> </request>
Ответ системы:
<?xml version="1.0" encoding="utf8" ?> <response> <action type="auth" uid="80085"> <sess_id> 646C57622DA4C91D027624F0426CC18478795291E1574F1A6C20BDC185D8B749 </sess_id> </action> </response>
Возможные ошибки авторизации:
Чтение данных имеет тип «list». Каждая запрашиваемая структура должна быть обернута в тег с параметрами:
Пример:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="references.companies"> ... </structure> </action> </request>
Ниже указано, как модифицировать запрос, чтобы получить только необходимые данные.
Чтобы выбрать определенные поля объекта, нужно добавить в запрос тег и оберните в него теги с названиями полей (в том количестве и порядке, в котором они вам необходимы).
Пример:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="references.companies"> <fields> <id /> <name /> <date /> </fields> </structure> </action> </request>
Ответ системы:
<?xml version="1.0" encoding="utf8" ?> <response> <action type="list" uid="80085"> <structure name="references.companies" id="1"> <fields> <id>1</id> <name>ООО "Apple"</name> <date>01.04.1976</date> </fields> </structure> ... </action> </response>
Для выборки вложенных структур, передайте тег внутри тега с названием поля-указателя, затем примените правила из этого раздела. Количество уровней вложенности не ограничено. Указывать тип структуры на вложенных уровнях не требуется.
Пример: выберем номер счета и его табличную часть (название номенклатуры и количество)
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="documents.orders"> <fields> <number /> <products> <structure> <fields> <name /> <number /> </fields> </structure> </products> </fields> </structure> </action> </request>
Для фильтрации (отбора) объекта используется тег «filters». Т.к. к выборке объектов можно применить сразу несколько фильтров (выполняется условие «И»), то используется вложенный тег «filter».
Состав тега:
Пример: вывести счета с суммой больше 10000
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="documents.orders"> <fields> <number /> </fields> <filters> <filter> <field>total</field> <operation>></operation> <value>10000</value> </filter> </filters> </structure> </action> </request>
Пример: вывести счета с суммой больше 10000 и с номерами больше 10
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="documents.orders"> <fields> <number /> </fields> <filters> <filter> <field>total</field> <operation>></operation> <value>10000</value> </filter> <filter> <field>number</field> <operation>></operation> <value>10</value> </filter> </filters> </structure> </action> </request>
При фильтрации по полю типа «указатель» (pointer), например по «Контрагенту», в поле value указывается значение id «Контрагента»:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="documents.orders"> <fields> <number /> </fields> <filters> <filter> <field>owner</field> <operation>=</operation> <value>777</value> </filter> </filters> </structure> </action> </request>
Условие «ИЛИ» применить между фильтрами нельзя.
Чтобы отсортировать вывод по определенному «полю» используйте тег «order».
Состав тега:
Типа упорядочивания:
Пример: вывести контрагентов, упорядоченных по дате добавления, начиная с самого позднего
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="references.companies"> <fields> <name /> </fields> <orders> <order> <field>date</field> <type>DESC</type> </order> </orders> </structure> </action> </request>
Для ограничения количества вывода записей используется тег «limits». Тег обычно используется для по страничного выводу данных.
Состав тега:
Пример: вывести не более 100 контрагентов, начиная с первого (нулевого) элемента
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="references.companies"> <fields> <name /> </fields> <limit> <first>0</first> <number>100</number> </limit> </structure> </action> </request>
Для редактирования объектов используется синтаксис чтения (описанный выше) и передавайте внутри наследников тега необходимые значения.
Пример: поменять поле «Должность» у «Сотрудника» с id=25 на «Генеральный директор»
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit" uid="80085"> <structure name="references.employees" id="25"> <fields> <position>Генеральный директор</position> </fields> </structure> </action> </request>
При успешном выполнении запроса система вернет:
<?xml version="1.0" encoding="utf8" ?> <response> <action type="edit" uid="80085"> <result>true</result> </action> </response>
В случае ошибки при выполнении запроса в ответе от Системы будет описание ошибки в теге «error».
В качестве значений полей можно использовать и другие структуры, рекурсивно.
Пример: в «Номенклатуре» с id=100 установим страну, найденную по имени. Важно, чтобы фильтр страны по имени вернул только 1 объект (нужно использовать тег «limit»)
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit"> <structure name="references.products" id="100"> <fields> <country> <structure name="references.countries"> <filters> <filter> <field>name</field> <operation>=</operation> <value>Китай</value> </filter> </filters> </structure> </country> </fields> </structure> </action> </request>
Если необходимо взять из справочника другое поле (не id), например поле «code» из справочника «Страна»:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit"> <structure name="references.products" id="100"> <fields> <country> <structure name="references.countries"> <field>code</field> <filters> <filter> <field>name</field> <operation>=</operation> <value>Китай</value> </filter> </filters> </structure> </country> </fields> </structure> </action> </request>
Пример: все «Номенклатуры» в табличной части «Счета» (с id=100) с названием «Молоко» изменят название на «Хлеб».
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit"> <structure name="documents.orders" id="100"> <fields> <products> <structure name="products"> <fields> <name>Хлеб</name> </fields> <filters> <filter> <field>name</field> <operation>=</operation> <value>Молоко</value> </filter> </filters> </structure> </products> </fields> </structure> </action> </request>
Пример: в табличную часть «Номенклатура» документа «Счет» добавить позицию «Морковь»
<?xml version="1.0" encoding="utf8" ?> <request> <action type="edit"> <structure name="documents.orders" id="100"> <fields> <products> <structure name="products" type="add"> <fields> <name>Морковь</name> </fields> </structure> </products> </fields> </structure> </action> </request>
(уточняется)
Для добавления используется метод «add».
Чтобы созданный объект бы не помечен на удаление (серым), поле visible надо присваивать значение «1».
Важно: для добавления по API объекта типа «Документ» (documents) необходимо в запросе в самом начале списка полей указывать поля «number» и «date», иначе возникнет ошибка.
Пример: добавить «Счет» с номером «2 » и одной позицией в табличной части «Номенклатура» с названием «Капуста»
<?xml version="1.0" encoding="utf8" ?> <request> <action type="add"> <structure name="documents.orders"> <fields> <number>2</number> <visible>1</visible> <products> <structure name="products"> <fields> <name>Капуста</name> </fields> </structure> </products> </fields> </structure> </action> </request>
Пример: добавить новую «папку» в справочнике «Номенклатура»
<?xml version="1.0" encoding="utf8" ?> <request> <action type="add"> <structure name="references.products"> <fields> <is_group>1</is_group> <name>Тестовая папка</name> <visible>1</visible> <parent>0</parent> </fields> </structure> </action> </request>
Для добавления сразу нескольких объектов в одном запрос необходимо использовать вложенность структуры (structure).
Пример: добавим 2 контрагента за один запрос
<?xml version="1.0" encoding="utf8"?> <request> <action type="add"> <structure name="references.companies"> <fields> <name>Петр</name> <visible>1</visible> </fields> </structure> <structure name="references.companies"> <fields> <name>Иван</name> <visible>1</visible> </fields> </structure> </action> </request>
Ответ системы:
<response> <action type="add" uid="64d75d54200ca"> <structure> <status>true</status> <id>1</id> </structure> <structure> <status>true</status> <id>2</id> </structure> </action> </response>
Где «id» = ID нового созданного объекта.
Для удаления объекта используйте синтаксис ниже. Обязательно нужно указывать ID объекта. Можно удалить сразу несколько объектов.
Пример: удалить сотрудника с id=25
<?xml version="1.0" encoding="utf8" ?> <request> <action type="del" uid="80085"> <structure name="references.companies" id="3"> </structure> <structure name="references.companies" id="25"> </structure> </action> </request>
Помеченный объект на удаление можно восстановить, поменяв у объекта поле visible на «1».
Важно:
Для стирания используйте синтаксис ниже. Обязательно нужно указывать ID объекта. Можно стереть сразу несколько объектов.
Пример: стереть (удалить) сотрудника с id=25
<?xml version="1.0" encoding="utf8" ?> <request> <action type="wipe" uid="80085"> <structure name="references.employees" id="25"> </structure> </action> </request>
Важно:
Пример:
<?xml version='1.0' encoding='utf8'?> <request> <action type='getAllStructures' uid='80085'> </action> </request>
Результат:
<?xml version='1.0' encoding='utf8' ?> <response> <action type='getAllStructures' uid='80085'> <structures> <structure name='documents.business_trip' en='' ru='Командировки'> </structure> <structure name='positions.table_43' type='set' en='' ru='Билеты'> </structure> ... </structures> </action> </response>
Вывод происходит с учетом вложенные табличных частей «Объекта».
Пример:
<?xml version='1.0' encoding='utf8'?> <request> <action type='getStructure' uid='80085'> <structures> <name>documents.orders</name> </structures> </action> </request>
Результат:
<?xml version='1.0' encoding='utf8' ?> <response> <action type='getStructure' uid='80085'> <structures> <structure name='documents.orders' en='' ru='Счета'> <fields> <date type='date' en='' ru='Дата'> </date> <id type='numeric' en='' ru='id'> </id> ... <products type='set'> <structure name='positions.table_1' en='Products' ru='Номенклатура'> <fields> <name type='varchar' en='' ru='Наименование'> </name> <id type='numeric' en='' ru=''> </id> <visible type='boolean' en='' ru=''> </visible> <owner type='delayed' object='documents.orders' en='' ru='Счет'> </owner> <product type='pointer' object='references.products' en='' ru='Номенклатура'> </product> ... </fields> </structure> </products> ... </fields> </structure> </structures> </action> </response>
Изображение возвращается в base64.
Для получения изображения поле в «Объекте» должно быть типа «Указатель» (Pointer) на объект «References.images».
Пример: получить имя и фотографию сотрудников
<?xml version="1.0" encoding="utf8" ?> <request> <action type="list" uid="80085"> <structure name="references.employees"> <fields> <name /> <photo/> </fields> </structure> </action> </request>
Результат:
<response> <action type="list" uid="80085"> <structure name="references.employees" key="2"> <fields> <name>Дмитрий И.</name> <photo>LzlqLzRBQVFTa1pKUmdBQkFRRUEzQURjQUFELzJ3QkRBQWdHQ...</photo> </fields> </structure> </action> </response>
Пример:
<?xml version='1.0' encoding='utf8' ?> <request> <action type='getDatetime' uid='80085'> <format>d.m.Y H:i:s</format> </action> </request>
Результат:
<?xml version='1.0' encoding='utf8' ?> <response> <action type='getDatetime' uid='80085'> <result>2022-09-02 14:03:15</result> </action> </response>
Прикрепление файла к определенному объекту.
Пример: прикрепить файл с именем «file.txt» c содержанием «Text file» в документ «Ремонт» с id=1
<?xml version='1.0' encoding='utf8' ?> <request> <action type='fileAdd' uid='80085'> <structure name='documents.repair' id='1'> <fields> <name>file.txt</name> <content>Text file</content> </fields> </structure> </action> </request>
Для добавления изображения к «Объекту» необходимо выбрать доступный «Тип изображения» (../settings/references/image_types), а также указать полное название объекта, его ID и поле с типом references.images (например: photo). Само изображение должно передаваться в base64.
Важно: При отправке запроса «imagesUploads» в header запроса необходимо передавать все cookies, получение при запросе авторизации в API.
Пример:
<?xml version='1.0' encoding='utf8' ?> <request> <action type='imagesUploads' uid='80085'> <structure name='references.products' id='7'> <field>photo</field> <type>products</type> <content>iVBORw0KGgoAAAANSUhEUgAAAIwAAAAvCAYAAAAxSCJ+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQzE4QzdBODdDNDRFODExOUI4N0Y0OTQzOTgyQTE0RiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGODE2MzZGMjQ0N0UxMUU4QTM0NEM2RUYzNzlBNEE4NCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGODE2MzZGMTQ0N0UxMUU4QTM0NEM2RUYzNzlBNEE4NCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjNDMThDN0E4N0M0NEU4MTE5Qjg3RjQ5NDM5ODJBMTRGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNDMThDN0E4N0M0NEU4MTE5Qjg3RjQ5NDM5ODJBMTRGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aXUgFgAADhJJREFUeNrsXQmYFMUVrtmZ3WU5Vy5BDgElaiQiqETwCDEuRsWgeEcRUCJJFI0H8UrAxAiiEjVyqYmggAgSRaNRY4jEi0MBBdTgwSXI5XIuyx7sTN7b+ZutfVvVXT0MuOq873vf0j3dNdVVf733v1evh9jyggL1XZW6kYQqSURU/8I89UF5VDXLSnxTun4w6fdJ25M2Ic0hrSDdTrqOdDk07RJTGfmmyEGkF5D2Jj0JQLFJKelHpHNI/0n67wxgvjtSj/RG0mtJmzvek0vaBXoD6WLSR6HxfelMVmY+arX0JV1G+scQYDEJA2c86VLSPhkL8+2U0bAsJmF3M5f0Q9K1pEWkdUhbkh5OejzpCTinC/OeWaTjSK/JAObbI8+Rnms4/zTpX0lnO7RxKOnZpJeSniw++zXp0aS9SMsyLumbIVHSxqQtOGDT5uMFA1gWkfbE5M92bH81LMkpIMsyavoRSHFWxsLUTmlLejoinI4IjRsjJPbCYQbOMeK+CXAf+0JW/076EukY0qu0891JZwBQGcDUEmlNOoz0ctI8yzUNSdsYzt9N+rs09aOEdBDpCrTryflwUeMyLqn2RDm/8AGLTR5II1h0GYGoS5exIMwZC/M1CluUyZbPNoJjbIerYTBxIq493NJ0nwgpHTIckdRZ2rmHXVxTBjD7R443gGUP6UPgE2x1dlrcVyOEy/tbmEBv0Cwfu6YjSf+XcUkHViKkz4hzDICupDcjf7LTcu/aAwQWlh2kI8W532Q4zIEXJpDttOMvkQdZWgv7+iDpbu34IlUz2ZcBzH62LreJcz8n3VZL+8uWbpZ2zBucP8kA5sDJT0lbace8S/zfWt7nWeL49AxgDpz0MYTGtV0Y0BXacZcMYA5sdOTJdpXGOpT9KBsF0e5Amp0BzP6XBhhsT95VITf2vkbRQ+mWwq1WEz0Pw6gqD/lFQfdEcE1ZmtsNe08q7elW4ziV3PvhXMoa0nmkn4nr2oI0evJ5QLst0SeuC81XyRKFjY59OkIl94Fa437u05ukq1J8xkKBiTw/wLRCfuAcldxvCCMcgi0k7W+5l1PbA0To5tou79AOJN3lcP0TKrmpZ+s/V6C9hfZchaMFTqH3MHzGwJmG51ujRRgSpDbh8b5TJUspE7BOxzsAhne2R6lkFll6B372JxGlbQk53kWufY9hcniH9LAU0XkYEM+1pmvFZ0cJMx22XS74+ZlKbpjZLMfLQaEg5HAsjt4OFu8KgNBv3PqpZL3JGaTvweIweYzimvct9x5Ceh/+XQ9/H3XI0/AcvQrQ2BbZ1ejP6QYL6CfNxPFUpAOWmjgM72UU76MP7IxBk6tx9z62y0U+C0hPtay2+Y5g8aQA7fmVO3YNAIsuXJ4wB385zc4JukdIb1HJvRmTPC6O15MODvge3md6wwcsuhyKyKdeiHGRC72TSmakO5kAk3BYcS7vX7CPfxvI9CQd7TbBAAwQAH3XEgImAtrvDKB14pWSQywrO1Kt2GSq4Z4ppL9UydT5fPEZT8w9+Pc8XHev5Vk8i6SLi5ucpJJ7TLq8CIvCYHvNYMUmhADMSAOQ62Ex1K9GSpcXFGSrqmIersL6i7jxdtKZmqlVsEpslv+gau5wxuHPd2BFNMfEThLXsVl+zNBuFN95ueHB6oPTcNHPheKzlRj8L7U2KzB4jxtc45P5WYn+q/dkqYGFeerLeJZqFEkMNgz0maSviHPMXy7RjksxhtsD3NhaXOfJ88pciqlLNwNImVsNF+d43oaIc+zSPw4BnH7gQbo8q5Ibk3sfohwPstZA3Fi44PhTyxdcCNLbVTu3UyNNG6CmarFPfdrthwnWXdwOLaqT5JYnjLOsn1i+h1f2MgHOshwyQFvjEbWJNJY0RiuwWr23+x4ygIXlUrjCZhqpPhEcw28VHywWx5UOk3iDOJ5rAAvLdaSnwY17wq+mhCn2ngx6MlM71xcR2VxTHqapxU/7yWrD5EmAmDhDfkC7MkQs09otN0QIX/i0tVmAhaXhZrIqPXL3qAvqlqst8cqhYLD0AlD/BjJqk3niuL3PtR0RGeky1CGaqQsLp8sIn+tHieNzkNoII1x+cb84d6cpD5Oq5Kn9I2FIWxQAtJHscqy0bITEXEe7mP0V85feeXvUtF05qiyR5DRYTXMDvrMiRBJ0ojh+h/TPDs/VTXCXbQa+osvLeFbPwrcBZ3s/5NjfglSJZ0F7Ic+0Jh2ASTUSCipqLjHkUrJ8yPN6n7bYnY0zMf7yRHDSxCLdxfEay3WXIEekg/dmx+/oKo4XwoLb5CvSJUg0etIlBcDw3PCLb8O0cxwBPuWyNbDO57MOqvr+iRfTRx3a3erzGT/kKeJcA1gHk4tj031Tqohn0IQsyZ8i+EgFEoOmPNF4cS4CYs3X3xWQ/+oojl1esP9IHH8vxWF5zmDtclwszK8AilzBJ3LxmeQ9y5RbdnYwVkKeyKByny6D29BN8ZVau7ORgNNd0v3gHhtV9SIgL9fEk/wfky/bTYApTkQqf83BIH3xjMVwe9JisNyqzDUvDxu4WkxVvUpyEsz/3Yg4g/jjBodx3ejAS13kQ3xfC83C1HMBzLkOoZ8nL8H3ubipbtAgmYVwWZ+QBwGoUYbJtclA5Ege0U8yUNpEE6pJVlwV0b/zCTSJmom2RpY2CwGK+y1Jx8EOz5cNUtnRkEpoZHCtQbIzoA1nw6uS2eIWmtVvms7d6vuw6gvTTH7LLKv3XpELcZEJWpIt6fQppO6eW6EurFeutlZETCGFn+tcY7EMLNMt55da0glsVf9k4G1h+WI8jUHJbmGpc9IBGB6080h/G/K+tQhNF2vK2wsfiOsugnnsZJmU01S4EshbEDru/X0VzsUMrl+mOhNwCuM1IBMJ4FqcGDvCkBM52sAJOsMdcXV+H0Mq4A6V3POySSSF+anYh7mtKyxXqYtLmqSSqfkozOc9hlBvVgqd4bDSVpHGhdSjNS7CGct/YTDlvtfrmLhjDZEVcyIuARgjwvS+yB/d6C3JaKRqn0TI+SDcpeADpyKZ5hH7I8Gp+G8Rzg819LGvsAL8DvUiWByd51yvqjK2xSmkGmTAtytFsOQK0s0LuswFMNMwWTrSpmjHx4C03ZHGsJpDYH7J6mxB3uoq80bpKuVfC7ICkxozEcpmxGFGb81Vi0ujqkN2XHZsoWjrH7BsDAJvn6UVLOwwgLe1uGeIj5W9VyTjzvBxh40dxjU/gNO4ylEiGuVwfZOLS5LVV1MNSa3bYQXCSE7I/M52lfoL6e+qmtnhXWxNmhNYlpRF1dO7slV+NKEcf+WOXad8jfVi/JUu5WPl/67RC+K4tQaMTQFz4TJf61Ics36GgKYkVQ7T33DuqTST3Rwff9wTpnsQQvuBAea6ucn/MzgOouhoCoGFNyEbZzkDxovedAC31cJmaUX8pFBV39XPU1UZVgm0Tg796hyQl3ER3rC9Voz7m6aHc5VPwWVuFR3lSXwoTYDZ5QOYm0QehmVmQJKwhnVqSgB5pySmpheTdYntBUszuIUmAc9SIihPzNLvoD2zumIeyjW3u8AABu7fZktbHQwWbmHIca8PCqIv2Ae855IWxtSRrywN36ZqbsA9AHQGJZOCwlWW9gaLk6URbZkz8Pv1gTaGxRFrEEmoT/ZE1fqKytIGckiVW/m8GCYj19M8oM2ogSusMliFhj7t/FDMwyYtQbdUVa82zA5IJcg8ziIVrs6Xo723RYTH8z9cXxW5ePjG6LyU4zDhzCG81PRBAAbXc5wowr6pIMCrsALbKnOhUyesmGxBhGOIXk4U1zfUrES2ITLgnxe9Bn2NaVESJ57GG1xcHTZXeQQazvDSv+OxZJpejwBHG3y5J3I/aLnmAoq1kDQP+ZXrLO1ILrRA8K1nkArQF+o4Q7jcSNUshXg6RPg8BMCQeZu+K99/rlgHzCHIVNp+XXE4lN+xKdA4xLMWt9ETKB2JVWfbjr8eGoaEecXKIwHudtrnPNmvOLb1haq5W5xAf14XK3YlokBv068OJvlicf/z+MvXTVTV61B4MtbDjSc0cjrWECzI0s6xAjAtsTj6aaSYF/wM4f6YFz3mMwY8995PflymzLXXl3ncRb8p4ZgQiojBDcoLpCuLvAW5kDnaOU7unYDV1zNkex8C+JW723XIumj5lzkAu75X9HtMzgewcF0EUL2IbpxYZINEpnYE2pmPvE4v/NXlRQFYD9x3oR+e9EL09Srm8EwlSikR5m+zgIDB/gPDc+gRaT+kEGqgLGr4MhsZcg2JPVNcuo9g8X5XdqWFW/1YJfd6XF8fmYvB3vtaRWE8q9L+a+i+BG5Fn8x2PoPLwpWHO0Tkw6T8NUNu4yhLG5/58JNhAPFpIidzqU8EZyLsZ4kcmklmIPG4xmaWmO0vg0kvNlibBHzcEjEgq1TVezWm61dgYlZb2g0C23tYDUGguxJE9Sr49bilvfkGN6LeK4uqonikMmLSwuAeWO2HOkRyVyNHIYVdOL/u8YRD/oS/64qArGwBIsHzAtqa4sO7bG8dlKMPY1XAr3RGtP+cIqaq6k1MwJKfRZV9n0K/3q9dFeL7XFxmIkx7raNxNXRbnhq3M0e1i9XAWUMQVe+XmepoRPpzJNzGKHvhlNICBN7quAB8xbPOO2DxJir7RqVJBmCRHKcR6yIkJ5mzTAtYiEyET0YkxoVVb8AS2t79UkR6a+QOVMAE7fHJiQRdH3biU70nkUp7PkRrB6IbLqc8FsFBFlIPS2FBXN4U3QrSPA+T7L0iy272LRX+h4YmwWX2UFW/vLkK/QzKuexGBNsdlnRJ2Ezw/wUYACbuV5qaGVQKAAAAAElFTkSuQmCC</content> </structure> </action> </request>
Результат:
<response> <action type="imagesUploads" uid="80085"> <structure> <status>1</status> </structure> </action> </response>
Пример:
<?xml version="1.0" encoding="utf8" ?> <request> <action type="getProductPriceStock" uid="80085"> <prod_id>777</prod_id> <prod_price_id>1</prod_price_id> <prod_stock_id>2</prod_stock_id> </action> </request>
Где:
Результат:
<action type="getProductPriceStock" uid="80085"> <price>100</price> <stock>10</stock> </action> </response>
Где:
Для экранирования специальных символов типа «<» и «>» необходимо обернуть вышеперечисленные символы в конструкцию:
<![CDATA[что-то]]>
Пример: Отобрать документы «Счета» с «Датой» больше (>) 01.01.2022
<request> <action type="list" uid="80085"> <structure name="documents.orders"> <fields> <number /> </fields> <filters> <filter> <field>date</field> <operation><![CDATA[>]]></operation> <value>2022-01-01</value> </filter> </filters> </structure> </action> </request>
Класс доступен по ссылке.
Для начала работы с классом необходимо создать подключение к Системе.
Пример:
$api = new Xml_api(string $url, string $login, string $password);
Где:
select(string $structure [array $fields = array()], [array $filters = array()]);
Где:
array("id", "name", "surname")
array(array("field"=>"id", "operation"=>"=", "value"=>"1"))
add(string $structure, [array $fields]);
Где:
array("name" => "Вася", "surname" => "Петров")
Важно: не рекомендуется задавать явно поле «id», поскольку это первичный ключ, система поддерживает работу с этим поле самостоятельно.
update(string $structure, [array $fields = array()], [array $filters = array()]);
Где:
array("name"=>"Вася"', "surname"=>"Петров")
array (array("field" => "id", "operation" => "=", "value" => "1"))
Остальные методы подробно описаны в самом классе.
В примере используется готовый PHP-класс, доступный по ссылке.
<?php // Подключаем класс (https://github.com/rbs360/API-XML) require_once("xrm_xml_api.php"); // Авторизация (Адрес системы, логин, пароль от пользователя системы у которого стоит флаг "Доступ по API") $xml_instance = new Xml_api("http://___URL___/api/xml", "___LOGIN___", "___PASSWORD___"); // cоздание нового контрагента $xrm_copmany = $xml_instance->add("references.companies", array( "date" => date("Y-m-d",time()), "email" => "info@rbs-crm.ru", "name" => "Рога и копыта", "phone" => "74997056975", "city" => "Москва", "visible" => 1, "responsible" => 2, "type" => 1) ); // Получаем ID нового контрагента $xrm_company_id = $xrm_copmany->action->id; if($xrm_company_id > 0){ // cоздание контакного лица $xrm_insert_contact = $xml_instance->add("references.contacts", array( "owner" => $xrm_company_id, "name" => "Иван Петров", "first_name" => "Иван", "surname" => "Петров", "position" => "Менеджер", "phone" => "74997056975", "email" => "info@rbs-crm.ru", "responsible" => 2, "visible" => 1) ); // Получаем ID нового контактного лица $xrm_contact_id = $xrm_insert_contact->action->id; // Создание нового юр лица $xrm_insert_details = $xml_instance->add("references.companies_details", array( "owner" => $xrm_company_id, "name" => "ООО Рога и копыта", "visible" => 1) ); // Создание новой сделки $xrm_insert_deal = $xml_instance->add( "documents.deals", array( "owner" => $xrm_company_id, "date" => date("Y-m-d H:i:s", time()), "expected_date_close" => date("Y-m-d H:i:s", time()), "name" => "Название сделки", "description" => "Описание сделки", "funnel_sales" => 1, "deals_result" => 3, "total" => 10000, "responsible" => 2, "currency" => 1, "stage" => 2, "contact" => $xrm_contact_id, "phone" => "74997056975", "mobile" => "79117056975", "email" => "info@rbs-crm.ru", // UTM "utm_source" => "yandex", "utm_campaign" => "my", "utm_medium" => "rbs1", "utm_term" => "crm", "visible" => 1) ); echo "Сделка успешно создана!"; } ?>
Результат:
При успешном выполнении кода в Системе создадутся «Контрагент», «Юридическое лицо», «Контактное лицо» и «Сделка. Все объекты будут связаны между собой.
Если необходима проверка на дубли «Контрагента», то для этого нужно сделать дополнительный запрос чтения Контрагентов по фильтру, например по полю «Наименование» или «Телефон».