Автоматизация счетов: Битрикс + Контур.Эльба
Эльба — облачный сервис налогового учёта для ИП на УСН и патенте. В отличие от МоёДело и Контур.Бухгалтерии, Эльба заточена под микробизнес с упрощёнными операциями. API Эльбы даёт доступ к документам (счета, акты) и контрагентам, но не к управлению платежами. Это определяет возможности и ограничения интеграции с Битрикс.
Мы — команда с 10-летним опытом разработки на 1С-Битрикс и сертификатами «1С-Битрикс». Наша интеграция решает задачу автоматического выставления счетов и актов из заказов интернет-магазина напрямую в Эльбу. Закажите интеграцию под ключ — мы учтём все особенности вашего бизнеса.
Проблемы, которые решаем
Ручной ввод счетов. Без интеграции менеджер вручную копирует данные из Битрикс в Эльбу — ошибки, задержки, потеря клиентов. Наше решение исключает человеческий фактор, экономя до 15 часов в неделю на вводе данных.
OAuth 2.0 без ошибок. Неправильное кеширование токенов приводит к блокировкам API. Мы реализуем корректный Client Credentials flow с превентивным обновлением.
Ограниченное API Эльбы. Отсутствие API платежей и лимиты запросов — мы предлагаем обходные пути: вебхуки от платёжных систем, очередь через агентов Битрикса. Благодаря этому обрабатываем до 1000 заказов в день без блокировок.
Как настроить OAuth 2.0 для Эльбы
Авторизация выполняется по протоколу OAuth 2.0 (Client Credentials). Для серверной интеграции достаточно получить client_id и client_secret в личном кабинете Эльбы.
class ElbaOAuthService
{
private string $clientId;
private string $clientSecret;
private string $redirectUri;
private string $tokenUrl = 'https://auth.kontur.ru/connect/token';
public function getClientCredentialsToken(): string
{
// Для серверной интеграции — Client Credentials flow
$ch = curl_init($this->tokenUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'client_credentials',
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'scope' => 'elba.api',
]),
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// Кешируем токен на (expires_in - 60) секунд
$this->cacheToken($response['access_token'], $response['expires_in'] - 60);
return $response['access_token'];
}
}
Клиент API Эльбы на PHP
class ElbaApiClient
{
private ElbaOAuthService $auth;
private string $baseUrl = 'https://api.e-kontur.ru/api/v1';
public function request(string $method, string $path, array $data = []): array
{
$token = $this->auth->getCachedToken();
$ch = curl_init($this->baseUrl . $path);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
"Authorization: Bearer {$token}",
],
CURLOPT_POSTFIELDS => in_array($method, ['POST', 'PUT'])
? json_encode($data) : null,
]);
$json = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode >= 400) {
throw new \RuntimeException("Elba API error {$httpCode}: {$json}");
}
return json_decode($json, true) ?? [];
}
}
Как автоматически выставлять счета из Битрикса?
Основной сценарий: при создании заказа автоматически формируем счёт в Эльбе и отправляем его покупателю по email. Для этого сначала находим или создаём контрагента по ИНН, затем формируем массив товарных позиций.
public function findOrCreateCounterparty(\Bitrix\Sale\Order $order): string
{
$props = $order->getPropertyCollection();
$inn = $props->getItemByOrderPropertyCode('INN')?->getValue();
$email = $props->getUserEmail();
if ($inn) {
// Поиск по ИНН
$list = $this->client->request('GET', '/counterparties?inn=' . urlencode($inn));
if (!empty($list)) {
return $list[0]['id'];
}
}
// Создание контрагента
$isLegal = !empty($inn);
$payload = $isLegal ? [
'fullName' => $props->getItemByOrderPropertyCode('COMPANY')?->getValue() ?? '',
'inn' => $inn,
'kpp' => $props->getItemByOrderPropertyCode('KPP')?->getValue() ?? '',
'email' => $email,
] : [
'fullName' => $props->getBuyerName(),
'email' => $email,
'type' => 'individual',
];
$created = $this->client->request('POST', '/counterparties', $payload);
return $created['id'];
}
public function createInvoiceForOrder(\Bitrix\Sale\Order $order): array
{
$counterpartyId = $this->findOrCreateCounterparty($order);
$items = [];
foreach ($order->getBasket() as $item) {
$items[] = [
'name' => $item->getField('NAME'),
'count' => $item->getQuantity(),
'price' => $item->getPrice(),
'unit' => 'шт.',
'ndsRate' => 'NoNds', // УСН — без НДС. Варианты: Nds0, Nds10, Nds20
];
}
// Доставка как отдельная позиция
$deliveryPrice = $order->getField('PRICE_DELIVERY');
if ($deliveryPrice > 0) {
$items[] = [
'name' => 'Доставка',
'count' => 1,
'price' => $deliveryPrice,
'unit' => 'усл.',
'ndsRate' => 'NoNds',
];
}
$invoice = $this->client->request('POST', '/invoices', [
'number' => $order->getField('ACCOUNT_NUMBER'),
'date' => date('Y-m-d'),
'counterpartyId' => $counterpartyId,
'items' => $items,
'comment' => 'Заказ с сайта #' . $order->getField('ACCOUNT_NUMBER'),
'paymentDueDate' => date('Y-m-d', strtotime('+3 days')),
]);
return $invoice;
}
Какие ограничения API Эльбы и как их обойти?
Нет API для регистрации платежей. Когда заказ оплачен в Битрикс, автоматически отметить счёт оплаченным в Эльбе через API невозможно. Обход: webhook от платёжных систем → уведомление по email бухгалтеру с номером счёта. Или использовать банковскую интеграцию Эльбы — при поступлении денег на расчётный счёт Эльба сама сопоставляет платёж с выставленным счётом.
Лимиты API. У API Эльбы есть ограничения на количество запросов. Для магазина с большим числом заказов — очередь отправки через \Bitrix\Main\Agent или отдельный воркер.
Только счета и акты, не накладные. Для отгрузки товаров документ акта не вполне корректен юридически. Для ИП на УСН это обычно несущественно, но для ООО — рассмотрите Контур.Бухгалтерию.
Акт выполненных работ для услуг
Для услуг (не товаров) формируем акт вместо счёта:
public function createActForOrder(\Bitrix\Sale\Order $order, string $counterpartyId): array
{
// Аналогичная структура items
return $this->client->request('POST', '/acts', [
'date' => date('Y-m-d'),
'counterpartyId' => $counterpartyId,
'items' => $this->buildItems($order),
'comment' => 'Услуги по заказу #' . $order->getField('ACCOUNT_NUMBER'),
]);
}
Сравнение сервисов
| Критерий | Эльба (СКБ Контур) | Контур.Бухгалтерия | МоёДело |
|---|---|---|---|
| Ориентация | ИП на УСН, патент | ИП и ООО любые режимы | ИП и ООО |
| API для счетов | Есть | Есть | Есть |
| API для платежей | Нет | Есть | Есть |
| Поддержка накладных | Нет | Есть | Есть |
| Стоимость | Низкая | Средняя | Средняя |
Эльба лучше для микробизнеса, но уступает Контур.Бухгалтерии по функционалу — у той есть API платежей и накладных.
Маппинг полей Битрикс → Эльба
| Поле в Битрикс | Поле в Эльба (counterparty/invoice) |
|---|---|
| Свойство заказа INN | counterparty.inn |
| Название компании (COMPANY) | counterparty.fullName |
| Email покупателя | counterparty.email |
| Название товара (Basket.NAME) | invoice.items[].name |
| Количество (Basket.QUANTITY) | invoice.items[].count |
| Цена (Basket.PRICE) | invoice.items[].price |
| Стоимость доставки | invoice.items (отдельная позиция) |
Типичные ошибки интеграции
- Истечение токена во время длительного сеанса — решается кешированием с запасом.
- Неверный scope при запросе токена — используйте
elba.api. - Ошибка 400 при создании контрагента — возможно, не указан ИНН или email.
- Превышение лимита запросов — добавьте очередь через
CAgent.
Что входит в работу
Мы предоставляем готовое решение под ключ:
- OAuth 2.0 интеграция с кешированием токенов
- PHP-клиент для API Эльбы
- Поиск и создание контрагентов
- Автоматическое выставление счетов при создании заказа
- Обработка ошибок, логирование, повторные попытки
- Документация и обучение персонала
- Гарантия 3 месяца на корректную работу
Процесс работы
- Аналитика — изучаем вашу схему документооборота, выявляем точки интеграции.
- Проектирование — разрабатываем архитектуру, согласовываем стек (версии PHP, Битрикс).
- Разработка — пишем код, настраиваем агенты, тестируем на стенде.
- Тестирование — проверяем полный цикл: заказ → счёт → оплата → уведомление.
- Деплой — выкатываем на боевой сервер, мониторим первые дни.
Сроки и стоимость
Сроки: от 2 до 4 недель в зависимости от сложности (наличие нетиповых полей, нестандартные сценарии оплаты).
Интеграция окупается в среднем за 3 месяца за счёт экономии времени менеджера. Получите консультацию инженера — мы рассчитаем точную стоимость и сроки под ваш проект.
Официальная документация API Эльбы доступна по адресу https://api.e-kontur.ru.







