Модуль разрабатывается для полной поддержки требований 54 ФЗ интернет-магазинами на Magento 1 и 2 для сервиса АТОЛ онлайн. Модуль поддерживает версию сервиса АТОЛ v4 (ФФД 1.05).
- отправляет данные о счете/возврате в АТОЛ:
- автоматически при создании счета (настраивается в конфигурации)
- автоматически при создании возврата (настраивается в конфигурации)
- вручную одной из консольных команд (см. ниже)
- вручную из админки кнопкой на странице Счета или Возврата
- получает из АТОЛ данные о статусе регистрации счета/возврата
- автоматически (настраивается в конфигурации). После обработки данных АТОЛ отправляет реультат обратно (колбек). По умолчанию URL: http://shop.ru/kkm/frontend/callback
- крон задачей для проверки статусов
- вручную из админки кнопкой на странице Счета или Возврата
- консольной командой
mygento:atol:update {$uuid}
-
На основании сущности Invoice или Creditmemo формируется объект
Mygento\Kkm\Api\Data\RequestInterface
. 1.1. При асинхронной передаче - объект помещается в очередь (см. Magento Queue Framework) 1.2. При синхронной передаче - передается классуVendor
для отправки -
Регистрируется попытка отправки данных. Создается сущность
Api\Data\TransactionInterface\TransactionAttemptInterface
со статусомNEW
(1) -
Осуществляется передача данных в виде JSON в АТОЛ. 3.1. В случае УСПЕШНОЙ передачи (один из HTTP статусов
[200, 400, 401]
)- создается транзакция - сущность
Magento\Sales\Api\Data\TransactionInterface
в который записываются UUID и все данные о передаче. В админке это грида Sales -> Transactions. - Сущность попытки отправки
TransactionAttemptInterface
получает статусSent
(2) - Создается комментарий к заказу
- Транзакция получает в ККМ-статус (kkm_status)
wait
3.2. В случае НЕУСПЕШНОЙ передачи (статусы отличные от
[200, 400, 401]
, отсутствие ответа от сервера, некорректные данные в инвойсе или возврате)- Сущность попытки отправки
TransactionAttemptInterface
получает статусError
(3) - Создается комментарий к заказу с описанием причины ошибки
- Заказ получает статус "KKM Failed"
- Если выброшено исключение
VendorBadServerAnswerException
(сервер АТОЛ не отвечает и еще в некоторых случаях) и включена асинхронная передача - то отправка будет снова помещена в очередь. - Если выброшено исключение
VendorNonFatalErrorException
и включена асинхронная передача - то выполняется генерация нового external_id и отправка будет снова помещена в очередь.
- создается транзакция - сущность
-
Модуль автоматически запрашивает у АТОЛа статус по всем странзакциям с ККМ-статусом
wait
4.1 Попытки обновления статуса прекращаются, когда транзакция получает статусdone
4.2 Максимальное количество попыток настройкой модуля ККМ. -
В случае НЕУСПЕШНОЙ передачи в АТОЛ выполняется несколько попыток отправки с увеличивающимися интервалами (например через 1 минуту, 5 минут, 15 минут, 30 минут, 1 час). 5.1 Настройка интервалов доступна в настройках модуля ККМ. 5.2 Максимальное количество попыток отправки в АТОЛ тажке ограничего настройкой модуля ККМ. 5.3 В случае, когда достигается максимальное количество попыток отправки, счетчик попыток обнуляется и отправка возобновляется через сутки.
Модуль отправляет отчеты об отправленных данных в АТОЛ на емейл (в конфиге). Неуспешные отправки отображаются в этом же письме с доп.деталями. Также этот отчет можно посмотреть в консоли.
- Еженедельный (за прошлую неделю), Ежедневный (за текущий день), Ежедневный (за вчерашний день)
- Верстка письма. Файл
view/adminhtml/templates/email/kkm_report-mjml.mjml
содержит верстку письма. Редактируется с помощью сервиса https://mjml.io/
Модуль поддерживал версии сервиса v3 и v4. Если выйдет новая версия, необходимо сделать след.шаги:
- создать class RequestForVersionX наследник абстрактного класса Request
- релилизовать его JSON представление - метод jsonSerialize()
- добавить создание объекта реквеста в Mygento\Kkm\Model\Atol\RequestFactory
- добавить инфу о новой версии сервиса в сурс модель Mygento\Kkm\Model\Source\ApiVersion
- отправка сообщений в АТОЛ может осущетвляться в двух режимах:
- синхронный (сразу после сохранения сущности или ручной отправки);
- асинхронно (через нативный механизм очередей сообщений Magento).
- режим работы настраивается в конфигурации
- Отправка данных на странице сущности
- Отправка данных консольной командой с указанием IncrementId сущности
- Модуль логирует (при включенном режиме Debug в Stores -> Configuration -> Mygento Extensions -> Extensions and Support) все запросы (и ответы) АТОЛ.
- Лог запросов доступен на странице конфигурации модуля
нет
- sales_order_invoice_save_commit_after:
- отправляет данные по инвойсу после его сохранения.
- sales_order_creditmemo_save_commit_after:
- отправляет данные по возврату после сохранения.
- before плагин
ExtraSalesViewToolbarButtons
на методMagento\Backend\Block\Widget\Button\Toolbar::pushButtons
добавляет кнопки Отправки в АТОЛ и кнопку проверки статуса на страницу сущности в админке
нет
нет
- kkm_statuses
- Обновление статуса: job обновляет статусы транзакций, у которых статус
wait
. По умолчанию каждую минуту
- Обновление статуса: job обновляет статусы транзакций, у которых статус
- kkm_proceed_scheduled_attempt
- выполняет повторные попытки отправки запросов в АТОЛ по заданному расписанию (scheduled_at).
- kkm_report
- Отчет: job отправки отчета. Частота конфигурируется в админке на стр. настроек модуля. По умолчанию ежедневно в 00:07
mygento:atol:report
- Отображает отчет. Аргументы: today, yesterday, weekmygento:atol:refund
- Отправляет возврат. Аргументы: IncrementId сущностиmygento:atol:sell
- Отправляет счет. Аргументы: IncrementId сущностиmygento:atol:update
- Запрашивает данные о статусе. Аргументы: UUID или "all". Если указать 'all' - обновит все зависшие (wait
) отправки