Compare commits
10 Commits
c3e55f37ce
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| a155a27208 | |||
|
|
8197134ddb | ||
| 63203e6d5d | |||
|
|
135e77f4bd | ||
| 0a03521a50 | |||
| 268134d47f | |||
|
6f4e756ec9
|
|||
|
cda2018aa6
|
|||
|
2ab45e8c28
|
|||
|
c7baedae4f
|
14
README.md
14
README.md
@@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
Библиотека для фискализации чеков по 54-ФЗ через [облачные ККТ АТОЛ](https://online.atol.ru/).
|
Библиотека для фискализации чеков по 54-ФЗ через [облачные ККТ АТОЛ](https://online.atol.ru/).
|
||||||
|
|
||||||
[](https://github.com/anthonyaxenov/atol-online/actions/workflows/ci.yml)
|
[](https://github.com/anthonyaxenov/atol-online/actions/workflows/ci.yml)
|
||||||
[](https://codecov.io/gh/anthonyaxenov/atol-online)
|
[](https://codecov.io/gh/anthonyaxenov/atol-online)
|
||||||
[](https://packagist.org/packages/axenov/atol-online)
|
[](https://packagist.org/packages/axenov/atol-online)
|
||||||
[](https://packagist.org/packages/axenov/atol-online)
|
[](https://packagist.org/packages/axenov/atol-online)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
[](https://www.buymeacoffee.com/axenov)
|
||||||
|
|
||||||
**[Документация](/docs/readme.md)**
|
**[Документация](/docs/readme.md)**
|
||||||
|
|
||||||
@@ -32,6 +33,8 @@
|
|||||||
* `php-mbstring`
|
* `php-mbstring`
|
||||||
* [composer](https://getcomposer.org/)
|
* [composer](https://getcomposer.org/)
|
||||||
|
|
||||||
|
> Для использования на php8.0 используйте версии библиотеки до 1.0.2 включительно.
|
||||||
|
|
||||||
## Начало работы
|
## Начало работы
|
||||||
|
|
||||||
### Подключение библиотеки
|
### Подключение библиотеки
|
||||||
@@ -65,10 +68,11 @@
|
|||||||
Для запуска тестов необходимо перейти в корень репозитория и выполнить одну из команд:
|
Для запуска тестов необходимо перейти в корень репозитория и выполнить одну из команд:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
composer test # обычное тестирование
|
composer psalm # статический анализ
|
||||||
composer coverage # тестирование с покрытием
|
composer phpcs # синтаксический анализ
|
||||||
|
composer test # полное тестирование без покрытия
|
||||||
|
composer coverage # полное тестирование с покрытием
|
||||||
```
|
```
|
||||||
|
|
||||||
После тестирования с покрытием в корне репозитория создаётся отчёт, который сохраняется в директории `.coverage`.
|
После тестирования с покрытием в корне репозитория создаётся отчёт, который сохраняется в директории `.coverage`.
|
||||||
|
Для тестирования с покрытием необходим `php-xdebug` с параметром `xdebug.mode = coverage,...`.
|
||||||
<a href="https://www.buymeacoffee.com/axenov" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
|
|
||||||
|
|||||||
88
composer.lock
generated
88
composer.lock
generated
@@ -276,22 +276,22 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/psr7",
|
"name": "guzzlehttp/psr7",
|
||||||
"version": "2.4.3",
|
"version": "2.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/psr7.git",
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
"reference": "67c26b443f348a51926030c83481b85718457d3d"
|
"reference": "b635f279edd83fc275f822a1188157ffea568ff6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
|
||||||
"reference": "67c26b443f348a51926030c83481b85718457d3d",
|
"reference": "b635f279edd83fc275f822a1188157ffea568ff6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2.5 || ^8.0",
|
"php": "^7.2.5 || ^8.0",
|
||||||
"psr/http-factory": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/http-message": "^1.0",
|
"psr/http-message": "^1.1 || ^2.0",
|
||||||
"ralouphie/getallheaders": "^3.0"
|
"ralouphie/getallheaders": "^3.0"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
@@ -311,9 +311,6 @@
|
|||||||
"bamarni-bin": {
|
"bamarni-bin": {
|
||||||
"bin-links": true,
|
"bin-links": true,
|
||||||
"forward-command": false
|
"forward-command": false
|
||||||
},
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "2.4-dev"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -375,7 +372,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/guzzle/psr7/issues",
|
"issues": "https://github.com/guzzle/psr7/issues",
|
||||||
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
|
"source": "https://github.com/guzzle/psr7/tree/2.5.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -391,7 +388,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-10-26T14:07:24+00:00"
|
"time": "2023-04-17T16:11:26+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/collections",
|
"name": "illuminate/collections",
|
||||||
@@ -737,21 +734,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-factory",
|
"name": "psr/http-factory",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-factory.git",
|
"url": "https://github.com/php-fig/http-factory.git",
|
||||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
|
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
|
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.0.0",
|
"php": ">=7.0.0",
|
||||||
"psr/http-message": "^1.0"
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -771,7 +768,7 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interfaces for PSR-7 HTTP message factories",
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
@@ -786,31 +783,31 @@
|
|||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/http-factory/tree/master"
|
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
|
||||||
},
|
},
|
||||||
"time": "2019-04-30T12:38:16+00:00"
|
"time": "2023-04-10T20:10:41+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-message",
|
||||||
"version": "1.0.1",
|
"version": "1.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-message.git",
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": "^7.2 || ^8.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "1.1.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -839,9 +836,9 @@
|
|||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/php-fig/http-message/tree/master"
|
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||||
},
|
},
|
||||||
"time": "2016-08-06T14:39:51+00:00"
|
"time": "2023-04-04T09:50:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
@@ -5136,29 +5133,26 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.27.0",
|
"version": "v1.32.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
|
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.2"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.27-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -5199,7 +5193,7 @@
|
|||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
|
"source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -5215,20 +5209,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-03T14:55:06+00:00"
|
"time": "2025-01-02T08:10:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/process",
|
"name": "symfony/process",
|
||||||
"version": "v6.2.0",
|
"version": "v6.4.20",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/process.git",
|
"url": "https://github.com/symfony/process.git",
|
||||||
"reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877"
|
"reference": "e2a61c16af36c9a07e5c9906498b73e091949a20"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877",
|
"url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20",
|
||||||
"reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877",
|
"reference": "e2a61c16af36c9a07e5c9906498b73e091949a20",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -5260,7 +5254,7 @@
|
|||||||
"description": "Executes commands in sub-processes",
|
"description": "Executes commands in sub-processes",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/process/tree/v6.2.0"
|
"source": "https://github.com/symfony/process/tree/v6.4.20"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -5276,7 +5270,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-02T09:08:04+00:00"
|
"time": "2025-03-10T17:11:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
@@ -5781,7 +5775,7 @@
|
|||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": [],
|
"stability-flags": {},
|
||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
@@ -5789,6 +5783,6 @@
|
|||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-mbstring": "*"
|
"ext-mbstring": "*"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": {},
|
||||||
"plugin-api-version": "2.3.0"
|
"plugin-api-version": "2.6.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Коллекциями являются объекты, способные хранить в себе [сущности](entity.md). Они унаследованы
|
Коллекциями являются объекты, способные хранить в себе [сущности](entity.md).
|
||||||
от `Illuminate/Support/Collection` и полностью поддерживают все
|
Они унаследованы от `Illuminate/Support/Collection` и полностью поддерживают все
|
||||||
[стандартные методы коллекций Laravel](https://laravel.com/docs/master/collections).
|
[стандартные методы](https://laravel.com/docs/master/collections) коллекций Laravel.
|
||||||
|
|
||||||
Помимо этого, они валидируют количество и вид сущностей, которые могут хранить в себе, согласно схеме АТОЛ Онлайн API.
|
Помимо этого, они валидируют количество и вид сущностей, которые могут хранить в себе, согласно схеме API АТОЛ Онлайн.
|
||||||
|
|
||||||
Коллекции ведут себя аналогично самим сущностям в части приведения к массивам и json-ификации.
|
Коллекции ведут себя аналогично самим сущностям в части приведения к массивам и json-ификации.
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Сущностями являются все классы, которые необходимы для взаимодействия с API. Они находятся в директори `src/Entities` и
|
Сущностями являются все классы, которые необходимы для взаимодействия с API.
|
||||||
расширяют абстрактный класс `AtolOnline\Entities\Entity`.
|
Они находятся в директори `src/Entities` и расширяют абстрактный класс `AtolOnline\Entities\Entity`.
|
||||||
|
|
||||||
Каждая сущность содержит в себе только те данные, которые необходимы согласно схемы АТОЛ Онлайн API.
|
Каждая сущность содержит в себе только те данные, которые необходимы согласно схемы API АТОЛ Онлайн.
|
||||||
|
|
||||||
Ниже перечислены возможности сущностей.
|
Ниже перечислены возможности сущностей.
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ $monitor->setTestMode(false);
|
|||||||
$kkts = $monitor->getAll();
|
$kkts = $monitor->getAll();
|
||||||
```
|
```
|
||||||
|
|
||||||
В ответе будет итерируемая коллекция объектов `AtolOnline\Entities\Kkt`. Каждый из этих объектов содержит атрибуты:
|
В ответе будет итерируемая коллекция объектов `AtolOnline\Entities\Kkt`.
|
||||||
|
Каждый из этих объектов содержит атрибуты:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// для примера получим первую ККТ из всех
|
// для примера получим первую ККТ из всех
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# Документация к библиотеке
|
# Документация к библиотеке
|
||||||
|
|
||||||
<a id="toc"></a>
|
<a id="toc"></a>
|
||||||
|
|
||||||
## Содержание
|
## Содержание
|
||||||
|
|
||||||
* [Общий алгоритм](#getstarted)
|
* [Общий алгоритм](#getstarted)
|
||||||
@@ -14,11 +13,10 @@
|
|||||||
Если вы нашли опечатку или какое-то несоответствие — делайте pull-request.
|
Если вы нашли опечатку или какое-то несоответствие — делайте pull-request.
|
||||||
|
|
||||||
<a id="getstarted"></a>
|
<a id="getstarted"></a>
|
||||||
|
|
||||||
## Общий алгоритм
|
## Общий алгоритм
|
||||||
|
|
||||||
1. Создать документ `AtolOnline\Entities\Receipt` или `AtolOnline\Entities\Correction`, добавив в него все необходимые
|
1. Создать документ `AtolOnline\Entities\Receipt` или `AtolOnline\Entities\Correction`,
|
||||||
данные
|
добавив в него все необходимые данные
|
||||||
2. Отправить документ на регистрацию:
|
2. Отправить документ на регистрацию:
|
||||||
2.1. *Необязательно:* при отправке задать `callback_url`, на который АТОЛ отправит HTTP POST о состоянии документа;
|
2.1. *Необязательно:* при отправке задать `callback_url`, на который АТОЛ отправит HTTP POST о состоянии документа;
|
||||||
2.2. *Необязательно:* при отправке задать `external_id`, чтобы присвоить свой уникальный идентификатор документа;
|
2.2. *Необязательно:* при отправке задать `external_id`, чтобы присвоить свой уникальный идентификатор документа;
|
||||||
@@ -26,8 +24,8 @@
|
|||||||
> Если с документом был передан `callback_url`, то ответ придёт на этот самый URL.
|
> Если с документом был передан `callback_url`, то ответ придёт на этот самый URL.
|
||||||
> Он должен быть обработан вашим сервисом в соответствии с бизнес-процессом.
|
> Он должен быть обработан вашим сервисом в соответствии с бизнес-процессом.
|
||||||
|
|
||||||
> Если с документом **не был** передан `callback_url` **либо** callback от АТОЛа не пришёл в течение 300 секунд
|
> Если с документом **не был** передан `callback_url` **либо** callback от АТОЛа не был получен/обработан в течение
|
||||||
> (5 минут), нужно запрашивать вручную по `uuid`, пришедшему от АТОЛа в ответ на регистрацию документа.
|
> 300 секунд (5 минут), нужно запрашивать вручную по `uuid`, пришедшему от АТОЛа в ответ на регистрацию документа.
|
||||||
4. Проверить состояние документа:
|
4. Проверить состояние документа:
|
||||||
4.1. взять `uuid` ответа, полученного на запрос фискализации;
|
4.1. взять `uuid` ответа, полученного на запрос фискализации;
|
||||||
4.2. отправить его в запросе состояния документа.
|
4.2. отправить его в запросе состояния документа.
|
||||||
|
|||||||
Reference in New Issue
Block a user