API представляет набор правил и функций, позволяющих двум разным приложениям взаимодействовать друг с другом (например между 1С и сайтом). API выступает посредником между приложениями, отправляя запросы и ответы.
Для чего это нужно? Для автоматизации: не нужно вручную вносить информацию о товарах (в 1С, на сайт или CRM). Вы можете попросить программиста, который обслуживает Вашу компанию, и он, используя наше API, автоматизирует процесс. Это же касается своевременного обновления цен и остатков.
Для отправки и получения тех самых запросов мы предоставляем следующие типы протоколов и архитектур:
Для клиентов доступен 1 XML файл, который хранит в себе всю необходимую информацию.
Файл output_all.xml
содержит всю необходимую информацию о каталогах (название, id, parent), а также информацию о товарах (название, код товара, описание, фотографии и т.п.). Обновляется он один раз в сутки. Давайте рассмотрим структуру файла output_all.xml
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2024-11-11 10:10">
<shop>
<name>АЛМА (в Бийске)</name>
<company>ООО "АЛМА"</company>
<url>https://alma.su</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="579">Трубопровод</category>
<category id="623" parentId="579">Полипропилен</category>
...
</categories>
<offers>
<offer id="207701" available="true">
<url>https://alma.su</url>
<name>Водонагреватель накопительный 6л, эмаль, белый, под раковиной OASIS KP-6</name>
<price>7600</price>
<oldprice>10032</oldprice>
<categoryId>359</categoryId>
<picture>https://alma.su/upload/iblock/f92/f92bb26e612a93f4bac46e8b7d683b5d.jpg</picture>
<vat>6</vat>
<shipment-options>
<option days="1" order-before="23"/>
</shipment-options>
<vendor>Oasis</vendor>
<vendorCode>УТ-00029489</vendorCode>
<description>Электрический накопительный водонагреватель.</description>
<outlets>
<outlet id="36723243728567823" instock="0" price="7600" oldprice="10032"/>
</outlets>
</offer>
...
</offers>
</shop>
</yml_catalog>
Элемент | Описание |
---|---|
xml |
Стандартный XML-заголовок. Должен начинаться с первой строки, с нулевого символа. |
yml_catalog |
Мы используем в качестве корневого xml элементa: |
categories |
Cодержит список категорий. Каждая категория описывается отдельным элементом |
category |
Название категории. Атрибут |
offers |
Список товаров. Каждый товар описывается в отдельном элементе |
offer |
Содержит узел информации о конкретном товаре. Атрибут |
name |
Наименование номенклатуры. Не содержит спецсимволов. |
categoryId |
Идентификатор категории товара (целое число). |
unit |
Единица измерения, формат и стандарт данных не регламентирован, обрабатывайте как строковые данные. |
images |
Родительский узел, содержащий информацию о фотографиям к товару. Этот узел содержит дополнительную избыточную информацию, его можно игнорировать. Структура введена для удобства. |
count |
Содержит информацию о количестве фотографий у товара на текущий момент. |
hash |
Это расчитанное значение crc32, от последоательной (от 1 до n) конкатенации строковых значений атрибутов |
pictures |
Родительский узел содержащий информацию о ссылках на фотографии к товару. |
picture |
Ссылка на фотографию к товару. Атрибут |
description |
Текстовое описание товара. Формат не регламентирован. Не содержит спецсимволов. |
barcode |
Штрихкод товара от производителя в формате: EAN-13. |
params |
Родительский узел содержащий информацию о свойствах товара. Каждое свойство описывается в отдельном элементе |
param |
Текущее значение свойства. Атрибут |
Пример простейшей функции и работа с ней.
Для предоставления доступа к REST JSON, вы должны отправить заявку к нам на почту opt@alma.su
. В заявке укажите: инн и ip адрес (с которого будете делать запросы). В целях безопасности - доступ к api только по whitelist.
Что дальше? Мы присвоим вашей организации базовый токен доступа и внесём ваш ip адрес в список исключений. После этого оповестим Вас ответным письмом или звонком.
Простейший пример запроса к нашему API на языке PHP вы можете посмотреть ниже:
/**
* Выполняем запрос к API
*
* @param array $post - ожидает обязательные параметры:
* $post['token'] - API токен,
* $post['inn'] - ИНН
* @param string $point - точка входа
*
* @return array $result
*/
function makeRequest($post, $point)
{
$agent = 'ALMA API v2.0';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su'.$point);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
Коды ошибок мы отдаём через функцию php http_response_code()
. Можете более подробно изучить её в документации.
INFO HTTP CODE | Описание |
---|---|
400 |
Недопустимые входные данные в запросе. Неверно указан инн и/или базовый токен. |
404 |
Не существующая точка входа. Товар(ы) не найден(ы). Не установлен вид цены. |
500 |
Прервано. Высокая нагрузка на сервер, попробуйте позже. |
503 |
Сервис временно недоступен. API отключено в ручном режиме. |
Для получения кода ответа сервера используйте curl_getinfo($curl,CURLINFO_HTTP_CODE);
Проверка доступности API (пример на PHP).
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn'] = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/status/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status":true,
"message":"API доступен"
}
Возвращаемое значение | Описание |
---|---|
|
|
message |
Информационное поясняющее сообщение. Содержит описание ошибки или наоборот удачного выполнения запроса. |
Позволяет получить подробную информацию о товаре по его УТ-коду.
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn'] = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';
$post['code'] = 'УТ-00007526'; # УТ-код товара (так же подойдет 7526)
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/element/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status":true,
"element":
{
"id" : 40394,
"name" : "Душевая кабина PROFLINE 8900 B (90*90), средний поддон ...",
"category" : 482,
"quantity" : 0,
"unit" : "шт",
"images_count": 9,
"images": [
{
"240": "https://cdn.ret.su/elements/88/20888/20888_0_240x240.webp",
"1024": "https://cdn.ret.su/elements/88/20888/20888_0_1024x1024.webp",
"orig": "https://cdn.ret.su/elements/88/20888/20888_0_orig.webp"
},
{
"240": "https://cdn.ret.su/elements/88/20888/20888_1_240x240.webp",
"1024": "https://cdn.ret.su/elements/88/20888/20888_1_1024x1024.webp",
"orig": "https://cdn.ret.su/elements/88/20888/20888_1_orig.webp"
},
...
],
"desc" : "Угловая душевая кабина. <br \/>\nДлина: 90 см. </br \/>\nШирина: ...",
"price" : "22728.57"
}
}
Возвращаемое значение | Описание |
---|---|
status |
|
element |
Массив который содержит подробную информацию о товаре. |
element.id |
Код товара. |
element.name |
Наименование товара (текстовая строка). |
element.category |
Идентификатор родительской категории, к которой привязан товар. |
element.quantity |
Текущий доступный для продажи остаток. |
element.unit |
Единица измерения остатка. |
element.images_count |
Количество фотографий у данного товара. |
element.images |
Массив фотографий данного товара, где есть три формата картинок: |
element.desc |
Подробное описание товара. Может содержать в себе экранированный html тег |
element.price |
Стоимость единицы остатка товара. |
Позволяет получить подробную информацию сразу о всех товарах в нашем ассортименте.
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn'] = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/elements/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status": true,
"elements": [
{
"id": 17816,
"name": "Пена профессиональная Ultima Gun 65л 820мл (летняя)",
"category": 385,
"unit": "шт",
"images_count": 1,
"images": [
{
"240": "https://cdn.ret.su/elements/61/17816/17816_0_240x240.webp",
"1024": "https://cdn.ret.su/elements/61/17816/17816_0_1024x1024.webp",
"orig": "https://cdn.ret.su/elements/61/17816/17816_0_orig.webp"
}
],
"desc": "Ultima Gun – зимняя монтажная пена, предназначена для ..."
},
{
"id": 7526,
"name": "Болт DIN 933 16х75 оцинкованный",
"category": 800,
"unit": "шт",
"images_count": 2,
"images": [
{
"240": "https://cdn.ret.su/elements/62/7526/7526_0_240x240.webp",
"1024": "https://cdn.ret.su/elements/62/7526/7526_0_1024x1024.webp",
"orig": "https://cdn.ret.su/elements/62/7526/7526_0_orig.webp"
},
{
"240": "https://cdn.ret.su/elements/62/7526/7526_1_240x240.webp",
"1024": "https://cdn.ret.su/elements/62/7526/7526_1_1024x1024.webp",
"orig": "https://cdn.ret.su/elements/62/7526/7526_1_orig.webp"
}
],
"desc": "Шестигранная головка делает возможной затяжку с максимальным ..."
},
...
]
}
Возвращаемое значение | Описание |
---|---|
status |
|
elements |
Массив с информацией о всех товарах в ассортименте. |
elements.id |
Код товара. |
elements.name |
Наименование товара (текстовая строка). |
elements.category |
Идентификатор родительской категории, к которой привязан товар. |
elements.unit |
Единица измерения остатка. |
element.images_count |
Количество фотографий у данного товара. |
element.images |
Массив фотографий данного товара, где есть три формата картинок: |
elements.desc |
Подробное описание товара. Может содержать в себе экранированный html тег |
Позволяет получить подробную информацию сразу о ценах для всех товаров в нашем ассортименте.
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn'] = 'Ваш ИНН';
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/prices/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status":true,
"elements":
[
{
"id": 10917,
"price": "2037.52",
"rrp": "2489.00"
},
{
"id": 16782,
"price": "155.02",
"rrp": "219.00"
},
{
"id": 16783,
"price": "170.17",
"rrp": "239.00"
},
]
}
Возвращаемое значение | Описание |
---|---|
status |
|
elements |
Массив с информацией о всех ценах для всех товаров в ассортименте. |
elements.id |
Код товара. |
elements.price |
Стоимость товара в рублях. |
elements.rrp |
Рекомендованная розничная цена товара. |
Позволяет получить подробную информацию о свойствах всех товаров.
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn'] = 'Ваш ИНН';
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/props/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status": true,
"17816":"[{\"name\":\"\К\о\д \",\"value\":\"\У\Т-00017816\"},{\"name\":\"\О\б\ъ\е\м \",\"value\":\"750\"},{\"name\":\"\Г\а\р\а\н\т\и\я (\м\е\с)\",\"value\":\"12\"},{\"name\":\"\Б\р\е\н\д\",\"value\":\"Makroflex\"},{\"name\":\"\С\т\р\а\н\а \",\"value\":\"\Ф\и\н\л\я\н\д\и\я\"},{\"name\":\"\П\р\о\и\з\в\о\д\и\т\е\л\ь \",\"value\":\"Makroflex\"}]",
"1011":"[{\"name\":\"\К\о\д \",\"value\":\"\У\Т-00001011\"},{\"name\":\"\О\б\ъ\е\м \",\"value\":\"2\"},{\"name\":\"\Г\а\р\а\н\т\и\я (\м\е\с)\",\"value\":\"12\"},{\"name\":\"\Б\р\е\н\д\",\"value\":\"\н\е \у\к\а\з\а\н\о\"},{\"name\":\"\С\т\р\а\н\а \",\"value\":\"\Р\о\с\с\и\я\"},{\"name\":\"\П\р\о\и\з\в\о\д\и\т\е\л\ь \",\"value\":\"\н\е \у\к\а\з\а\н\о\"}]",
...
}
Возвращаемое значение | Описание |
---|---|
status |
|
elements |
Массив с информацией о всех ценах для всех товаров в ассортименте. |
element.key |
УТ-код товара. |
elements.value.name |
Название свойства товара. |
elements.value.value |
Значение свойства товара. |
Позволяет получить подробную информацию сразу об остатках для всех товаров в нашем ассортименте.
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn'] = 'Ваш ИНН';
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/quantity/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
Content-type: application-json
{
"status":true,
"elements":
[
{
"id" : 40394,
"quantity" : 0
},
{
"id" : 1011,
"quantity" : 129
},
{
"id" : 7526,
"quantity" : 111
},
...
]
}
Возвращаемое значение | Описание |
---|---|
status |
|
elements |
Массив с информацией о всех ценах для всех товаров в ассортименте. |
elements.[].id |
Код товара. |
elements.[].quantity |
Текущий остаток доступный для продажи. |
Позволяет получить подробную информацию о всех категориях.
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn'] = 'Ваш ИНН';
$agent = 'ALMA API v2.0';
# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/category/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
# ответ сервера
var_dump($result);
Content-type: application-json
{
"status":true,
"category":
[
{
"id" : 579,
"name" : "Трубопровод",
"code" : "truboprovod",
"parent" : null,
"depth" : "1",
"picture" : "https://cdn.alma.su/category/9/579/579_200x200.webp"
},
{
"id" : 623,
"name" : "Полипропилен",
"code" : "polipropilen_belyy",
"parent" : "579",
"depth" : "2",
"picture" : "https://cdn.alma.su/category/3/623/623_200x200.webp"
}
...
]
}
Возвращаемое значение | Описание |
---|---|
status |
|
category |
Массив с информацией о всех категориях товара. |
category.id |
Идентификатор категории. |
category.name |
Наименование категории |
category.code |
Символьный код, если вы применяете у себя ЧПУ. |
category.parent |
Идентификатор родительского узла (древовидная структура данных). |
category.depth |
Глубина вложения узла (нумерация с 1 и далее). |
category.picture |
Ссылка на основное изображение для категории. |
Если вы используете PHP на задней стороне вашего приложения - использование нашей библиотеки будет отличным решением
Наша готовая PHP библиотека с открытым исходным кодом позволяет подключиться к API и выполнять все вышеперечисленные запросы из документации в одну строчку.
Для начала работы склонируйте в свой проект наши файлы из публичного репозитория на гитхабе
Определите параметры ТОКЕН и ИНН как константы const TOKEN = "3vc...21c";
и const INN = "123...789";
Подключите библиотеку alma.class.php
и создайте её экземпляр класса, передав в него констаты с параметрами
$api = new Alma\Api(TOKEN, INN);
<?php
# подключим класс АПИ
require_once '/alma.class.php';
# определим параметры
const TOKEN = "3v5...43v";
const INN = "123...789";
# создаем экземпляр класса
$api = new Alma\Api(TOKEN, INN);
# Проверка доступности API
# /status
$api->getStatus();
# Получить информацию о товаре по УТ
# /element
$element = 20888;
$api->getElement( $element );
# Получить информацию о всех товарах
# /elements
$api->getElements();
# Получить информацию о всех ценах
# /prices
$api->getPrices();
# Получить информацию о всех props
# /properties
$api->getProperties();
# Получить информацию о всех остатках
# /quantity
$api->getQuantity();
# Получить информацию о всех категориях
# /category
$api->getCategory();