Интеграция API (XML)

Использование API

Универсальный модуль «Интеграции API XML» Системы позволяем проводить обмен данными в формате XML между Системой и любым сторонним приложением.

В частности с помощью данного модуля происходит обмен данными с мобильными приложениями РосБизнесСофт (iPhone, Android), c сайтами, интернет-магазинами, АТС, биллингом и т.д.

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

wwwww

 

При помощи API интерфейса можно проводить следующие операции с данными (Объектами Системы):

  • чтение
  • добавление
  • редактирование
  • удаление
  • стирание
  • и т. д.

У вас есть три возможности отправить XML запрос в систему:

  • Через POST запрос в переменной «xml» на адрес: АДРЕС_ВАШЕЙ_СИСТЕМЫ/api/xml/. Это самый распространенный вариант!
  • Загрузить как файл, форма загрузки находится на странице /api/xml/ (в целях безопасности может быть отключена)
  • Как xml-текст, также через форму на странице /api/xml/ (в целях безопасности может быть отключена)

Структура представления данных (архитектура) доступна в «Конфигураторе» (/configurator) CRM системы.

Для работы с 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. Каждая запрашиваемая структура должна быть обернута в тег с параметром name (названием структуры) и id (необязательно) — уникальный идентификатор запрашиваемой структуры (указание равносильно фильтрации по ключевому полю, см. ниже).

Пример:

<?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>

Упорядочивание, ограничение и фильтрация

Чтобы упорядочить по некоторому полю, используйте тег внутри . Его «детьми» сделайте по одному тегу для каждого упорядочивания, затем в каждый из них вложите тег с названием поля и с указанием типа упорядочивания (ASC — по возрастанию, DESC — по убыванию).

Каждый тег рассматривается и обрабатывается в порядке указания.

Пример: Вывести контрагентов, упорядоченных по дате добавления, начиная с самого позднего:

<?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>

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

Пример: Вывести не более 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>

Фильтровать контрагентов можно с использованием иерархии . Внутри последнего тега необходимы следующие три: для указания поля, по которому происходит фильтрация, для указания фильтрующей операции (>, =, <, like и т. д.) и для указания правого операнда.

Пример: Вывести счета с профитом больше 10000:

<?xml version="1.0" encoding="utf8" ?>
<request>
<action type="list" uid="80085">
<structure name="documents.orders">
<fields>
<number />
</fields>
<filters>
<filter>
<field>date</field>
<operation>></operation>
<value>10000</value>
</filter>
</filters>
</structure>
</action>
</request&gt

Редактирование

Для редактирования, используйте синтаксис выборки (описанный ниже) и передавайте внутри наследников тега необходимые значения.

Пример: Поменять поле «Должность» сотрудника с «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>

Если result = true, то запрос выполнился успешно.

В качестве значений полей можно использовать и другие структуры, рекурсивно.

<?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) изменить запрос так:

<?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>

В примере выше добавится поле «code» из справочника «Страна»

Редактирование табличных частей

<?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>

В табличную часть счета добавится позиция с названием «Морковь».

Для стирания табличной части используется метод WIPE

 

Добавление

Для добавления используется следующая конструкция:

<?xml version="1.0" encoding="utf8" ?>
<request>
<action type="add">
<structure name="documents.orders">
<fields>
<number>2</number>
<products>
<structure name="products">
<fields>
<name>Капуста</name>
</fields> 
</structure>
</products>
</fields>
</structure>
</action>
</request>

Добавит счет с номером 2 и одной позицией с названием «Капуста»

Добавление новой папки в справочнике «Номенклатура»:

<?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>

Стирание (удаление)

Для стирания, используйте синтаксис ниже. Обязательно нужно указывать 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'?>
<request>
<action type='getStructure' uid='80085'>
<structures>
<name>documents.orders</name>
<name>documents.business_trip</name>
</structures>
</action>
</request>

Запросить картинку

Фотография приходит в base64. Для получения картинки, поле в структуре должно быть «Указателем» на объект references.images

Например, запросить имя и фотографию сотрудников (поле — photo)

<?xml version="1.0" encoding="utf8" ?>
<request>
<action type="list" uid="80085">
<structure name="references.employees">
<fields>
<name />
<photo/>
</fields>
</structure>
</action>
</request>

Запросить время на сервере

<?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' ?>
<request>
<action type='sendMail' uid='80085'>
<from>mail@mail.ru</from>
<to>proger@rbs-crm.ru</to>
<theme>theme</theme>
<text>Message text</text>
</action>
</request>

Прикрепление приложения

<?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.

<?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+IDwvcmRmOkRlc2NyaXB0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</content>
</structure>
</action>
</request>

При успешном выполнении запроса сервер вернет:

<response>
<action type="imagesUploads" uid="80085">
<structure>
<status>1</status>
</structure>
</action>
</response>

Создание заказа в CRM из интернет-магазина

При отправке данного запроса, машина автоматически проверяет наличие «Контрагента» в базе по 100% совпадению «Телефона» или «E-mail». При наличие совпадения, она создает «Счет» («Заказ») в найденном «Контрагенте», в противном случае она создает нового «Контрагента» и уже в нем создает «Счет» («Заказ»). Эту логику можно поменять, изменив файл в «Ядре», ответственный за API.

<?xml version='1.0' encoding='utf8' ?>
<request>
<action type="addOrder" uid="80085">
<shop_id>3</shop_id>
<client_email> proger @rbs-crm.ru</client_email>
<client_name>Стас Иванов</client_name>
<client_phone>9151234567</client_phone>
<client_organization_name>123</client_organization_name>
<client_organization_inn>123</client_organization_inn>
<client_organization_kpp>123</client_organization_kpp>
<client_city_id>12</client_city_id>
<client_city>Москва</client_city>
<order_date>2015-04-23 14:34:36</order_date>
<order_id></order_id>
<order_delivery_address>г. Москва</order_delivery_address>
<order_delivery_type>1</order_delivery_type>
<order_delivery_time>12</order_delivery_time>
<order_coupon>123</order_coupon>
<order_pay_method>1</order_pay_method>
<order_total>200</order_total>
<order_pay_total>0</order_pay_total>
<order_cash>0</order_cash>
<order_comment>asda</order_comment>
<products>
<product>
<product_id>1</product_id>
<product_article>123</product_article>
<product_name>erfsd</product_name>
<product_discount>15</product_discount>
<product_unit>шт</product_unit>
<number>3</number>
<price>150</price>
</product>
<product>
<product_id>5</product_id>
<product_article>234</product_article>
<product_name>rty</product_name>
<product_discount>15</product_discount>
<product_unit>шт</product_unit>
<number>5</number>
<price>240</price>
</product>
</products>
</action>
</request>

Внимание: Для работы данного запроса необходимо провести синхронизацию справочника «Номенклатуры» (Товаров) по id

Запрос цены и остатка товара

Корректный запрос на получение цены и остатка товара на складе:

<?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>

где:
prod_id — id «Номенклатуры» (товара)
prod_price_id — id «Типа цены»
prod_stock_id — id «Склада»

Ответ:

<action type="getProductPriceStock" uid="80085">
<price>100</price>
<stock>0</stock>
</action>
</response>

где:
price — цена «Номенклатуры» (товара) в рублях, соответствующая запрошенному «Типу цен»
stock — остаток «Номенклатуры» (товара) на запрошенном «Складе»

Создание «Заявки» с сайта в Системе

Готовый примера и класса на PHP доступен по ссылке.

    // подключаем класс require_once("rbs_api_xml.php"); $ip=$_SERVER['REMOTE_ADDR']; $ip = $ip; $gorod = "Москва"; $type = 1; //тип заявки (см. перечисления в СРМ) $date=date("d.m.y"); $time=date("H:i:s"); // Вставляем в СРМ $message_to_crm = "Описание заявки!"; // авторизация $xml_instance = new Xml_api("http://домен-срм.ру/api/xml", "логин пользователя", "пароль пользователя"); // cоздание контрагента $xrm_create_login = $xml_instance->add("references.companies", array(														"date"=>date("Y-m-d",time()),"email"=>$email, "name"=>$name, "phone"=>$phone, "city"=>$gorod, "visible"=>1, "manager"=>68, "property_type"=>1, "type"=>1, "client_type"=>1, "learned_company"=>3));
	
	// Получаем ID нового контрагента
	$xrm_company_id = $xrm_create_login->action->id;
	if($xrm_company_id>0){
	
	// cоздание контакного лица
	$xrm_insert_contact = $xml_instance->add("references.contacts", array("owner"=>$xrm_company_id, "name"=>$name, "phone"=>$phone, "email"=>$email, "visible"=>1));
	
	// Получаем ID нового контактного лица
	$xrm_contact_id = $xrm_insert_contact->action->id;
	
	// cоздание нового юр лица			
	$xrm_insert_details = $xml_instance->add("references.companies_details", array("owner"=>$xrm_company_id, "name"=>$name, "visible"=>1));
	
	// создание заявки	
	$xrm_insert_relationship = $xml_instance->add("documents.tender_simple", array("owner"=>$xrm_company_id, "date"=>date("Y-m-d H:i:s",time()),"type"=>$type, "status"=>1, "description"=>"описание", "visible"=>1, "responsible"=>68, "priority"=>3));
	
	//отправляем уведомления в СРМ всем сотрудникам
	$employees = $xml_instance->select("references.employees", array("id"), array(array("field"=>"visible", "operation"=>"=", "value"=>1)));
	foreach($employees->action->structure as $employee)
	{
	$xml_instance->add("references.messages", array(	
	"addressee"=>$employee->fields->id,
	"text"=>"Поступила новая заявка c сайта!",
	"sent"=>date("Y-m-d H:i:s", time()),
	"visible"=>1));
	}

Экранирование XML символов

Для экранирования специальных символов типа «<» и «>» необходимо обернуть вышеперечисленные символы в

Пример:

<request>
<action type="list" uid="80085">
<structure name="documents.orders">
<fields>
<number />
</fields>
<filters>
<filter>
<field>date</field>
<operation><![CDATA[<]]></operation>
<value>2012-12-01</value>
</filter>
</filters>
</structure>
</action>
</request>

Универсальный класс на PHP для доступа к API XML РосБизнесСофт XRM

Существует дополнительный класс для работы с XML API написанный на PHP. Класс доступен по ссылке.

Для начала работы с классом необходимо создать подключение к Системе (авторизация):

$api = new Xml_api(string $url, string $login, string $password);

$url — Полный путь к API. Например: «https://mycrm.ru/api/xml»
$login — логин пользователя в программе
$password — пароль пользователя в программе

Для выборки данных используется метод:

SimpleXMLElement select(string $structure [, array $fields = array()] [, array $filters = array()]);

$structure — название структуры
$fields — массив полей, для выборки полей используется следующий синтаксис:
array(“id”, “name”, “surname”)
$filters — массив фильтров, для фильтрации результатов, используется следующий синтаксис:
array(array(“field”=>”id”, “operation”=>”=”, “value”=>”1”))

Для добавления данных используется метод:

SimpleXMLElement add(string $structure [,array $fields]);

$structure — название структуры
$fields — массив полей, для добавления значения полей используется следующий синтаксис:
array(«name» => «Вася», «surname» => «Пупкин»)

*не рекомендуется задавать явно поле id, поскольку это первичный ключ, система поддерживает работу с этим поле самостоятельно.

Для редактирования данных используется метод:

SimpleXMLElement update(string $structure [, array $fields = array()] [, array $filters = array()]);

$structure — название структуры
$fields — массив полей, для добавления значения полей используется следующий синтаксис:
array(“name”=>”Вася”, “surname”=>”Пупкин”)
$filters — массив фильтров, для фильтрации изменяемых полей, используется следующий синтаксис:
array (array(«field» => «id», «operation» => «=», «value» => «1»))

Остальные методы подробно описаны в самом классе.

Последние правки: 17.05.2021 15:46:15