Почему интернет-магазинам нужна облачная фискализация
Каждый, кто принимает безналичные платежи от физлиц, обязан фискализировать чеки по 54-ФЗ. Покупать физическую кассу для онлайн-торговли часто невыгодно: оборудование стоит дорого, требует регистрации в ФНС и обслуживания. Облачная касса АТОЛ Онлайн решает эту проблему: вы платите только за подписку и количество чеков, а не за железо. Для магазина с потоком до 1000 заказов в месяц это в несколько раз дешевле собственной ККТ.
Наша команда имеет 10+ лет опыта в 1С-Битрикс и более 40 выполненных интеграций фискальных сервисов. Все проекты учитывают требования 54-ФЗ и локального законодательства о персональных данных.
Как облачная касса решает проблемы бизнеса
Типичная ситуация: предприятие запускает интернет-магазин. После первых оплат выясняется, что чеки не отправляются — физическая ККТ отсутствует. Если магазин уже работает, установка облачной кассы происходит без простоя. Мы настраиваем модуль АТОЛ за 1–2 дня, и все новые заказы фискализируются автоматически.
Другая частая проблема — ошибки при работе с маркированными товарами. Без корректной передачи номенклатурных кодов из «Честного ЗНАКА» чеки отклоняются. Наши специалисты добавляют в инфоблоки 1С-Битрикс обязательные поля для кодов маркировки и настраивают фоновую синхронизацию с API оператора.
Схема работы АТОЛ в цепочке оплаты
Процесс фискализации в наших проектах выглядит так:
- Покупатель оплачивает заказ через платежный агрегатор (например, ЮKassa или Тинькофф).
- Агрегатор сообщает Битриксу об успешной транзакции.
- Модуль интеграции формирует запрос к АТОЛ на создание чека.
- АТОЛ регистрирует чек на облачной кассе и передает его в ОФД за 1–3 секунды.
- Клиент получает электронный чек на email или SMS.
- Фискальные данные возвращаются в Битрикс через callback.
Мы всегда реализуем очередь повторов и логируем все события. Это критично для предприятий, где каждый чек должен быть сохранен.
Выбор и реализация интеграции
Официальный модуль vs кастомная интеграция
АТОЛ предлагает модуль atol.kkt54 для 1С-Битрикс. Он подходит для стандартных сценариев с одним налоговым режимом. Настройка проста:
| Параметр | Откуда взять |
|---|---|
| Login | Личный кабинет АТОЛ |
| Password | Там же |
| Group Code | Идентификатор группы касс |
| INN | ИНН организации |
| Payment Address | URL сайта |
| Callback URL | https://shop.ru/local/api/atol-callback.php |
Однако для многих компаний требуется доработка: раздельный учет ОСН и УСН, обработка маркированных товаров, сценарии частичной отгрузки. Мы часто пишем кастомную интеграцию напрямую с REST API АТОЛ.
Техническая реализация: отправка чека
Вот как выглядит класс для отправки чека в АТОЛ на PHP:
// Отправка чека прихода в АТОЛ class AtolClient { private string $token; private const API = 'https://online.atol.ru/possystem/v4/'; public function getToken(): void { $resp = $this->post('getToken', [ 'login' => ATOL_LOGIN, 'pass' => ATOL_PASSWORD, ]); $this->token = $resp['token']; } public function sendReceipt(array $order): array { $items = []; foreach ($order['basket'] as $item) { $items[] = [ 'name' => mb_substr($item['name'], 0, 128), 'price' => (float)$item['price'], 'quantity' => (float)$item['quantity'], 'sum' => round($item['price'] * $item['quantity'], 2), 'payment_method'=> 'full_payment', 'payment_object'=> 'commodity', 'vat' => ['type' => 'none'], ]; } if ($order['delivery_price'] > 0) { $items[] = [ 'name' => 'Доставка', 'price' => (float)$order['delivery_price'], 'quantity' => 1.0, 'sum' => (float)$order['delivery_price'], 'payment_method' => 'full_payment', 'payment_object' => 'service', 'vat' => ['type' => 'none'], ]; } $payload = [ 'external_id' => 'BX-' . $order['id'] . '-' . time(), 'receipt' => [ 'client' => [ 'email' => $order['buyer_email'], 'phone' => $order['buyer_phone'] ?? null, ], 'company' => [ 'email' => ATOL_COMPANY_EMAIL, 'sno' => 'osn', 'inn' => ATOL_INN, 'payment_address' => ATOL_PAYMENT_ADDRESS, ], 'items' => $items, 'payments' => [ [ 'type' => 1, 'sum' => (float)$order['total'], ], ], 'total' => (float)$order['total'], ], 'service' => [ 'callback_url' => ATOL_CALLBACK_URL, ], 'timestamp' => date('d.m.Y H:i:s'), ]; return $this->post(ATOL_GROUP_CODE . '/sell', $payload); } private function post(string $endpoint, array $data): array { $ch = curl_init(self::API . $endpoint); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json; charset=utf-8', 'Token: ' . $this->token, ], ]); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true) ?? []; } } Мы адаптируем этот класс под конкретные нужды заказчика: добавляем поддержку НДС, очереди повторов, логирование.
Как избежать типичных ошибок
Сумма позиций должна строго равняться total — расхождение даже на копейку вызывает ошибку. Мы решаем это так: последней позиции присваиваем сумму по остатку, алгоритм покрыт unit-тестами.
Название товара не длиннее 128 символов. Обрезаем, сохраняя суть.
Маркировка — обязательное поле для ряда товаров. Интегрируем проверку наличия кода в момент формирования чека.
Как обрабатывать callback от АТОЛ
Callback — ключевой элемент асинхронной фискализации. Вот минимальный обработчик:
// local/api/atol-callback.php $body = json_decode(file_get_contents('php://input'), true); $uuid = $body['uuid'] ?? ''; $status = $body['status'] ?? ''; // 'done' | 'fail' if ($status === 'done') { $fiscalData = $body['payload']['fiscal_receipt_number'] ?? ''; $fnNumber = $body['payload']['fn_number'] ?? ''; $fnDocument = $body['payload']['fiscal_document_number'] ?? ''; saveAtolReceiptData($uuid, [ 'fiscal_number' => $fiscalData, 'fn' => $fnNumber, 'fd' => $fnDocument, 'status' => 'done', ]); } elseif ($status === 'fail') { $error = $body['payload']['message'] ?? 'Unknown error'; logAtolError($uuid, $error); scheduleAtolRetry($uuid); } http_response_code(200); echo 'OK'; Мы гарантируем, что callback будет обработан даже при временных сбоях: ставим задачу в очередь на повтор, а после трех неудач отправляем алерт менеджеру.
Фискализация возвратов
При возврате средств отправляем чек возврата через sell_refund или sell_correction. Структура та же, но endpoint другой:
// Чек полного возврата $atol->post(ATOL_GROUP_CODE . '/sell_refund', $payload); // Чек частичного возврата — только возвращаемые позиции // total и items содержат только возвращаемую часть Для магазинов с частыми возвратами настраиваем ежедневную сверку реестра возвратов с данными АТОЛ, чтобы избежать штрафов от ФНС.
Кейс: машиностроительный завод
Один из клиентов — завод, производящий запчасти, — запустил интернет-магазин с маркированной продукцией. Поток — около 600 заказов в месяц. После старта начали приходить ошибки: чеки не фискализировались из-за отсутствия кодов маркировки. Мы добавили обязательное поле UF_MARKING_CODE в инфоблок, настроили автозагрузку кодов через API оператора и написали валидатор формата DataMatrix. Инциденты прекратились, время на обработку заказов увеличилось всего на 5–15 минут. Завод избежал штрафов за нарушение маркировки.
Что входит в работу и сроки
Наш стандартный пакет для интеграции АТОЛ в 1С-Битрикс включает:
- Установку и настройку модуля
atol.kkt54или кастомную интеграцию через REST API. - Класс
AtolClientс обработкой токена, повторами и логированием. - Обработчик callback с очередью повторов и dead-letter-логикой.
- Реестр чеков (служебная таблица + админ-страница).
- Скрипт ежедневной сверки с ОФД (cron).
- Документацию и алерты в Telegram при ошибках.
- Тестирование в тестовой среде АТОЛ.
- Поддержку первого месяца после запуска.
Также при необходимости:
- Интеграция с Честным ЗНАКОМ для маркированных товаров.
- Раздельный учет налоговых режимов.
- Поддержка сценариев частичной отгрузки.
Примерные сроки работ
| Этап | Срок |
|---|---|
| Установка официального модуля | 1–2 дня |
| Кастомная интеграция через API | 3–5 дней |
| Обработчик callback и очередь повторов | 1–2 дня |
| Чеки возврата | 1–2 дня |
| Интеграция с Честным ЗНАКОМ | 2–3 дня |
| Тестирование | 1–2 дня |
Стоимость рассчитывается индивидуально после анализа ваших задач. Мы предоставляем бесплатную оценку за 1–2 дня. Свяжитесь с нами для получения консультации и точного расчета — поможем настроить фискализацию без простоев и штрафов.







