PHPackages                             mygento/kkm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. mygento/kkm

ActiveMagento2-module

mygento/kkm
===========

Модуль интеграции фискальных кассовых аппаратов для Magento в соответствии с 54-ФЗ

2.4.3(8mo ago)92328[6 issues](https://github.com/mygento/kkm/issues)[3 PRs](https://github.com/mygento/kkm/pulls)OSL-3.0PHP

Since Jun 30Pushed 4mo ago8 watchersCompare

[ Source](https://github.com/mygento/kkm)[ Packagist](https://packagist.org/packages/mygento/kkm)[ RSS](/packages/mygento-kkm/feed)WikiDiscussions v2.4 Synced 3d ago

READMEChangelog (10)Dependencies (3)Versions (54)Used By (0)

[![Build Status](https://github.com/mygento/kkm/actions/workflows/grumphp.yml/badge.svg)](https://github.com/mygento/kkm/actions/workflows/grumphp.yml)[![Latest Stable Version](https://camo.githubusercontent.com/e1e1b0d0a6bc63cba09a475c46bea394cf976359798b67cf767e1c6da44943c9/68747470733a2f2f706f7365722e707567782e6f72672f6d7967656e746f2f6d6f64756c652d6b6b6d2f762f737461626c65)](https://packagist.org/packages/mygento/module-kkm)[![Total Downloads](https://camo.githubusercontent.com/996b1f10dfbb00fb6215bc1adbdc991fceb11737fb7ffe46258cb480be0ddef4/68747470733a2f2f706f7365722e707567782e6f72672f6d7967656e746f2f6d6f64756c652d6b6b6d2f646f776e6c6f616473)](https://packagist.org/packages/mygento/module-kkm)

Модуль интеграции Онлайн касс для Magento 2
===========================================

[](#модуль-интеграции-онлайн-касс-для-magento-2)

Модуль разрабатывается для полной поддержки требований 54 ФЗ интернет-магазинами на Magento 2 для сервисов:

- АТОЛ онлайн. Модуль поддерживает версию сервиса АТОЛ v4 (ФФД 1.05).
- Чеконлайн.

Функциональность модуля
-----------------------

[](#функциональность-модуля)

### Передача данных в Онлайн кассу

[](#передача-данных-в-онлайн-кассу)

- отправляет данные о счете/возврате:
    - автоматически при создании счета (настраивается в конфигурации)
    - автоматически при создании возврата (настраивается в конфигурации)
    - вручную одной из консольных команд (см. ниже)
    - вручную из админки кнопкой на странице Счета или Возврата

### Повторная передача данных в Онлайн кассу (Resell)

[](#повторная-передача-данных-в-онлайн-кассу-resell)

(Не путать с чеком коррекции)

- Отменяет предыдущий чек прихода (по Invoice) и отправляет новый.
    - вручную при нажатии кнопки `Resell` в админке
    - консольной командой (см. ниже)
    - другой модуль может триггерить `\Mygento\Kkm\Api\Processor\SendInterface::proceedResellRefund`

### Получение данных из АТОЛ

[](#получение-данных-из-атол)

- получает из АТОЛ данные о статусе регистрации счета/возврата
    - автоматически (настраивается в конфигурации). После обработки данных АТОЛ отправляет результат обратно (колбек). По умолчанию URL:
    - крон задачей для проверки статусов
    - вручную из админки кнопкой на странице Счета или Возврата
    - консольной командой `mygento:kkm:update-one {$uuid}` или `mygento:kkm:update-all {$storeId}`

### Получение данных из Чеконлайн

[](#получение-данных-из-чеконлайн)

Работа сервиса Чеконлайн построена по синхронному принципу, понятие «статус» документа в сервисе отсутствует. Вместо этого используются кэширование ответов. Ключём кэша являются поля Group, RequestId, ClientId, что значит, что если будут отправлены запросы с одинаковыми указанными полями, то сервис ответит данными из кэша. В кэш помещаются успешные ответы и некоторые ошибки устройства Ккм (см. документацию Чеконлайн)

### Процесс отправки данных в Онлайн кассу

[](#процесс-отправки-данных-в-онлайн-кассу)

1. На основании сущности Invoice или Creditmemo формируется объект `Mygento\Kkm\Api\Data\RequestInterface`. 1.1. При асинхронной передаче - объект помещается в очередь (см. Magento Queue Framework) 1.2. При синхронной передаче - передается классу `Vendor` для отправки
2. Регистрируется попытка отправки данных. Создается сущность `Api\Data\TransactionInterface\TransactionAttemptInterface` со статусом `NEW` (1)
3. Осуществляется передача данных в виде JSON.

    3.1. В случае **УСПЕШНОЙ** передачи (один из HTTP статусов `[200, 400, 401]`)

    - создается транзакция - сущность `Magento\Sales\Api\Data\TransactionInterface` в который записываются уникальный идентификатор запроса (UUID - Атол; RequestId - Чеконлайн) и все данные о передаче. В админке это грид Sales -&gt; Transactions.
    - Сущность попытки отправки `TransactionAttemptInterface` получает статус `Sent` (2)
    - Создается комментарий к заказу
    - Транзакция получает в ККМ-статус (kkm\_status):

        - Атол - `wait`
        - Чеконлайн - `done`

            3.2. В случае **НЕУСПЕШНОЙ** передачи (статусы отличные от `[200, 400, 401]` (так же `500` для Чеконлайн), отсутствие ответа от сервера, некорректные данные в инвойсе или возврате)
    - Сущность попытки отправки `TransactionAttemptInterface` получает статус `Error` (3)
    - Создается комментарий к заказу с описанием причины ошибки
    - Заказ получает статус "KKM Failed"
    - Если выброшено исключение `VendorBadServerAnswerException` (сервер не отвечает и еще в некоторых случаях) и включена асинхронная передача - то отправка будет снова помещена в очередь.
    - Если выброшено исключение `VendorNonFatalErrorException` и включена асинхронная передача - то:

        - Атол - выполняется генерация нового external\_id и отправка будет снова помещена в очередь.
        - Чеконлайн - Сущность транзакции получает статус `wait` и отправка снова помещается в очередь без генерации нового external\_id, т.к. ответ с нефатальной ошибкой не кэшируется. Так же при работе «облачного» сервиса Чеконлайн могут возникать ошибки возвращающие HTTP код 500 и структуру, содержащая поля: `FCEError`, `ErrorDescription`, `Device` и `Fatal`. Поле `Fatal` со значением `true` показывает, что повторное выполнение запроса приведёт к ошибке. Если поле `Fatal` равно `false` то отправка так же помещается в очередь.
4. Только Атол. Модуль автоматически запрашивает у АТОЛа статус по всем транзакциям с ККМ-статусом `wait`

    4.1 Попытки обновления статуса прекращаются, когда транзакция получает статус `done`

    4.2 Максимальное количество попыток настройкой модуля ККМ.
5. В случае **НЕУСПЕШНОЙ** передачи выполняется несколько попыток отправки с увеличивающимися интервалами (например через 1 минуту, 5 минут, 15 минут, 30 минут, 1 час).

    5.1 Настройка интервалов доступна в настройках модуля ККМ.

    5.2 Максимальное количество попыток отправки тажке ограничего настройкой модуля ККМ.

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

### Процесс повторной отправки данных (Resell)

[](#процесс-повторной-отправки-данных-resell)

Работает только для тех чеков, которые были отправлены и имеют статус `Done`.

1. На основании Invoice создается чек возврата (refund) и отправляется в Онлайн кассу.
2. Создается новая запись Payment Transaction, дочерняя от предыдущей отправки `sell` по этому инвойсу.
3. Когда статус отправки из п.1 становится `Done` (Для Чеконлайн статус отправки сразу становится `Done` в случае успеха) - формируется и отправляется новый чек прихода (sell).
4. Для нового чека прихода создается новая запись Payment Transaction, дочерняя от транзакции для чека возврата (п.2).
5. Resell считается завершенным, если новый чек прихода (п.3) получает статус `Done`. Обновление статуса происходит так же как и во всех остальных случаях (Для Чеконлайн обновление статуса не происходит т.к. работа сервиса устроена по синхронному принципу)

### Отчеты

[](#отчеты)

Модуль отправляет отчеты об отправленных данных в Онлайн кассу на емейл (в конфиге). Неуспешные отправки отображаются в этом же письме с доп.деталями. Также этот отчет можно посмотреть в консоли.

- Еженедельный (за прошлую неделю), Ежедневный (за текущий день), Ежедневный (за вчерашний день)
- Верстка письма. Файл `view/adminhtml/templates/email/kkm_report-mjml.mjml` содержит верстку письма. Редактируется с помощью сервиса

### Поддержка новых версий сервиса АТОЛ Онлайн

[](#поддержка-новых-версий-сервиса-атол-онлайн)

Модуль поддерживал версии сервиса v4. Если выйдет новая версия, необходимо сделать след.шаги:

1. создать class RequestForVersionX наследник абстрактного класса Request
2. релилизовать его JSON представление - метод jsonSerialize()
3. добавить создание объекта реквеста в Mygento\\Kkm\\Model\\Atol\\RequestFactory
4. добавить инфу о новой версии сервиса в сурс модель Mygento\\Kkm\\Model\\Source\\ApiVersion

### Использование очередей

[](#использование-очередей)

- отправка сообщений в Онлайн кассу может осуществляться в двух режимах:
    - синхронный (сразу после сохранения сущности или ручной отправки);
    - асинхронно (через нативный механизм очередей сообщений Magento).
- режим работы настраивается в конфигурации

### Ручная отправка данных

[](#ручная-отправка-данных)

- Отправка данных на странице сущности
- Отправка данных консольной командой с указанием IncrementId сущности

### Логирование сообщений

[](#логирование-сообщений)

- Модуль логирует (при включенном режиме Debug в Stores -&gt; Configuration -&gt; Mygento Extensions -&gt; Extensions and Support) все запросы (и ответы).
- Лог запросов доступен на странице конфигурации модуля

Список Rewrite
--------------

[](#список-rewrite)

нет

Список событий и плагинов, Описание действий и причины
------------------------------------------------------

[](#список-событий-и-плагинов-описание-действий-и-причины)

### События

[](#события)

- **sales\_order\_invoice\_save\_commit\_after**:
    - отправляет данные по инвойсу после его сохранения.
- **sales\_order\_creditmemo\_save\_commit\_after**:
    - отправляет данные по возврату после сохранения.

### Плагины

[](#плагины)

- before плагин `ExtraSalesViewToolbarButtons` на метод `Magento\Backend\Block\Widget\Button\Toolbar::pushButtons` добавляет кнопки Отправки в Онлайн кассу и кнопку проверки статуса на страницу сущности в админке

Список доступных реализованных API
----------------------------------

[](#список-доступных-реализованных-api)

нет

Список встроенных тестов, что и как они тестируют
-------------------------------------------------

[](#список-встроенных-тестов-что-и-как-они-тестируют)

нет

Cron-процессы
-------------

[](#cron-процессы)

- **kkm\_statuses**
    - Только Атол. Обновление статуса: job обновляет статусы транзакций, у которых статус `wait`. По умолчанию каждую минуту
- **kkm\_proceed\_scheduled\_attempt**
    - выполняет повторные попытки отправки запросов по заданному расписанию (scheduled\_at).
- **kkm\_report**
    - Отчет: job отправки отчета. Частота конфигурируется в админке на стр. настроек модуля. По умолчанию ежедневно в 00:07

Консольные команды
------------------

[](#консольные-команды)

- `mygento:kkm:report` - Отображает отчет. Аргументы: today, yesterday, week
- `mygento:kkm:refund` - Отправляет возврат. Аргументы: IncrementId сущности
- `mygento:kkm:sell` - Отправляет счет. Аргументы: IncrementId сущности
- `mygento:kkm:resell` - Запускает процесс resell. Отправляет refund по текущему чеку. Аргументы: IncrementId сущности. При указании ключа `-f` увеличится external\_id.
- `mygento:kkm:update-all` - Только Атол. Запрашивает данные о статусе всех отправок со статусом `wait` для указанного стора. Аргументы: StoreID
- `mygento:kkm:update-one` - Только Атол. Запрашивает данные о статусе указанной отправки. Аргументы: UUID

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance55

Moderate activity, may be stable

Popularity20

Limited adoption so far

Community22

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~70 days

Recently: every ~334 days

Total

45

Last Release

141d ago

Major Versions

1.2.1 → v2.2.x-dev2019-02-22

v1.x-dev → 2.3.02019-03-20

PHP version history (2 changes)1.0.4PHP &gt;=5.4.0

v2.2.x-devPHP ^7.0.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/1a45e667cab39265bb2da9daad9314886d5ffaf4b28a5beffe09d8ca9605022f?d=identicon)[mygento](/maintainers/mygento)

---

Top Contributors

[![luckyraul](https://avatars.githubusercontent.com/u/7735520?v=4)](https://github.com/luckyraul "luckyraul (35 commits)")[![Mavlyan](https://avatars.githubusercontent.com/u/8666986?v=4)](https://github.com/Mavlyan "Mavlyan (33 commits)")[![gromovdmi](https://avatars.githubusercontent.com/u/25362246?v=4)](https://github.com/gromovdmi "gromovdmi (25 commits)")[![DmitriiChukhnov](https://avatars.githubusercontent.com/u/46157859?v=4)](https://github.com/DmitriiChukhnov "DmitriiChukhnov (10 commits)")[![odahviiiing](https://avatars.githubusercontent.com/u/32017111?v=4)](https://github.com/odahviiiing "odahviiiing (5 commits)")[![Basharabum](https://avatars.githubusercontent.com/u/23690756?v=4)](https://github.com/Basharabum "Basharabum (5 commits)")[![Grohotun](https://avatars.githubusercontent.com/u/11591042?v=4)](https://github.com/Grohotun "Grohotun (5 commits)")[![alextorini](https://avatars.githubusercontent.com/u/39396505?v=4)](https://github.com/alextorini "alextorini (4 commits)")[![sekulich-mygento](https://avatars.githubusercontent.com/u/185889801?v=4)](https://github.com/sekulich-mygento "sekulich-mygento (3 commits)")[![kylerqws](https://avatars.githubusercontent.com/u/20369035?v=4)](https://github.com/kylerqws "kylerqws (2 commits)")[![val-mygento](https://avatars.githubusercontent.com/u/67411429?v=4)](https://github.com/val-mygento "val-mygento (1 commits)")[![alexgog78](https://avatars.githubusercontent.com/u/19434822?v=4)](https://github.com/alexgog78 "alexgog78 (1 commits)")

---

Tags

fz-54magentomagento2magento2-extension-freetaxmagentoatol

### Embed Badge

![Health badge](/badges/mygento-kkm/health.svg)

```
[![Health](https://phpackages.com/badges/mygento-kkm/health.svg)](https://phpackages.com/packages/mygento-kkm)
```

###  Alternatives

[composer/installers

A multi-framework Composer library installer

1.4k136.0M6.0k](/packages/composer-installers)[smile/elasticsuite

Magento 2 merchandising and search engine built on ElasticSearch

8044.5M33](/packages/smile-elasticsuite)[olegkoval/magento2-regenerate-url-rewrites

Add into Magento 2 a CLI feature which allow to regenerate a Url Rewrites of products and categories

4423.7M2](/packages/olegkoval-magento2-regenerate-url-rewrites)[mage2tv/magento-cache-clean

This package has been migrated to mage-os/magento-cache-clean. Please switch over at your convenience.

5432.1M3](/packages/mage2tv-magento-cache-clean)[magento/magento2-functional-testing-framework

Magento2 Functional Testing Framework

15511.5M30](/packages/magento-magento2-functional-testing-framework)[markshust/magento2-module-disabletwofactorauth

The DisableTwoFactorAuth module provides the ability to disable two-factor authentication.

2282.7M6](/packages/markshust-magento2-module-disabletwofactorauth)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
