Download the PHP package agoalofalife/fnsapi without Composer
On this page you can find all versions of the php package agoalofalife/fnsapi. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download agoalofalife/fnsapi
More information about agoalofalife/fnsapi
Files in agoalofalife/fnsapi
Informations about the package fnsapi
Fns API SOAP
Пакет предоставляет возможность работы по проверке чеков через официальное API ФНС (Федеральной Налоговая службы России).
- Установка
- Аутентификация
- Создать Ticket (кассовый чек)
- Создание SOAP Client
- Проверка или информация по чеку
- Response в готовой структуре
- Алгоритмы обработки timeout
- Дополнительная информация от автора
- Угостить чаем 😌
Установка
composer require agoalofalife/fnsapi
Аутентификация
Для начала работы с сервисом, вам необходимо получить временный токен. На момент написания документации, время его жизни был один час.
Вам надо передать мастер токен, который выдали в ФНС и хранилище, которое реализует PSR-16.
В хранилище будет своевременно обновляться новый токен, который реализуется в PSR-16 параметром ttl.
PSR-16 позволяет использовать пакет во многих современных фреймворках и т.д
Класс имеет исключение UnexpectedValueException в случае если токен не будет получен.
Временная зона
Время жизни токена устанавливается в соответствии с вашей настройкой PHP: Настройка во время выполнения - Manual date.timezone Рекомендуется проверить ваш файл php.ini и установить соответствующую временную зону.
Создать Ticket (кассовый чек)
Для того чтобы получить информацию по чеку, вам надо создать объект класса Ticket
Подробнее о данных написано в коде и официальной документации ФНС.
Создание SOAP Client
Отлично мы создали чек и заполнили его данными. Теперь надо создать SOAP client. Это очень осведомленный клиент, он знает что мы работает с ФНС, поэтому он требует:
- Уникальную строку, для сессии. Это строка будет кодироваться в base64(который примерно на 30% увеличивают длину), не должна превышать 160 символов.
- И то же хранилище данных, PSR-16, тот созданный объект, который передавался для получения временного токена.
- Включить режим debug(по-умолчанию false), можно просматривать запросы с помощью таких методов как
__getLastRequest
и так далее.
Проверка или информация по чеку
Отлично, вы создали чек и клиента. И уже все готово для работы! Осталось уже выбрать:
- Проверить чек
\Fns\GetMessage\CheckTicketRequest
-
Получить по нему подробную информацию
\Fns\GetMessage\GetTicketRequest
- создание обьекта с типом запроса
-
Внедрить свою стратегию обработки timeout реализующий интерфейс
Fns\Contracts\TimeoutStrategyHandler
- Создать объект
SendMessageRequest
передать клиента которого мы создали ранее и объект конкретного запроса. - Передать чек
- И выполнить запрос
execute
который возвращает интерфейсResponseSendMessage
- Получить информацию по запросу код и тело ответа.
Ответ возвращается в json или в обекте Receipt.
Response в готовой структуре
Ответ по чеку можно получить в виде готовой структуры, которая содержит:
- Класс Receipt
- Класс ProductCollection
- Класс Product
и решает такие проблемы как:
- Более явное получение данных
-
Инкапсуляция преобразования их для более простой модификации и безболезности в клиентском коде.
но вы всегда можете получить сырой вариант.
Проверка чека CheckTicketRequest
Для получения информации что чек корректен, достаточно сравнить код ответа с кодом 200.
Получении информации по чеку GetTicketRequest
Алгоритмы обработки timeout
Чтобы получить информацию по чеку, надо сделать запрос SendMessageRequest
c параметром messageId
При первом(вторым и т.д) запросе, сразу после получения messageId
, может отсутствовать информацию по чеку.
По-умолчанию в пакете реализовывается Exponential Backoff
Вы можете реализовать свой алгоритм реализуя интерфейс Fns\Contracts\TimeoutStrategyHandler\TimeoutStrategyHandler
Для контроля процесса выполнения запроса и его результата, передайте в конструктор Fns\Contracts\RequestsManager
Для примера вы можете реализовать свой алгоритм Interval
Который будет опрашивать сервер через константный промежуток времени.
Дополнительная информация от автора
В данный момент все выполняется в синхронном режиме.
Можно разделить процесс получения messageId
и информации по нему, на два различных процесса.
Для начальной версии пакета, пока остаётся так.
Угостить чаем 😌
Этот пакет был создан для экономии вашего времени на безвозмездной основе. Надеюсь у меня получилось это сделать и я буду рад любым формам спасибо. Звезда или скромный донат - окажут мне поддержку и веру в людей. https://money.yandex.ru/to/410019109036855
All versions of fnsapi with dependencies
psr/simple-cache Version ^1.0
ext-json Version *
nesbot/carbon Version ^2.0