Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6263be5f03 | |||
| aee25a993b | |||
| 7aa0d1ebb0 | |||
| 5277db62fd | |||
| 025351a8ae | |||
| c9ed0bf467 | |||
| 7da7d25823 | |||
| dc20d3e08e | |||
| b499d998e3 | |||
| 8370266185 | |||
| b0ee2cb802 | |||
| db4b777648 | |||
| f161dc59f7 | |||
| 1061e1d3a7 | |||
| 9ce4997699 | |||
| 32e4bbabab | |||
| 03a0e737eb |
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: # Replace with a single Patreon username
|
||||
custom: ['https://money.yandex.ru/to/41001685237530']
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,4 +3,5 @@
|
||||
/atol_log
|
||||
*.log
|
||||
/config.php
|
||||
*cache*
|
||||
*cache*
|
||||
/test.php
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
Библиотека для фискализации чеков по 54-ФЗ через [облачную ККТ АТОЛ](https://online.atol.ru/).
|
||||
|
||||
Текущая поддерживаемая версия API: **5.1**
|
||||
|
||||
**[Документация](/docs/readme.md)**
|
||||
|
||||
## Системные требования
|
||||
|
||||
* PHP 7.2+
|
||||
@@ -20,7 +24,7 @@
|
||||
```php
|
||||
require($project_root.'/vendor/autoload.php');
|
||||
```
|
||||
где $project_root — абсолютный путь к корневой директории вашего проекта.
|
||||
где `$project_root` — абсолютный путь к корневой директории вашего проекта.
|
||||
|
||||
### Тестирование кода библиотеки
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Library to use cloud cash register in e-commerce according to Russian Federal Law #54",
|
||||
"license": "MIT",
|
||||
"type": "library",
|
||||
"version": "0.1.0-b",
|
||||
"version": "0.1.1-b",
|
||||
"keywords": [
|
||||
"54-fz",
|
||||
"atol",
|
||||
@@ -35,6 +35,7 @@
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/AtolOnline/Api/",
|
||||
"src/AtolOnline/Api/Schemas/",
|
||||
"src/AtolOnline/Exceptions/",
|
||||
"src/AtolOnline/Entities/",
|
||||
"src/AtolOnline/Traits/",
|
||||
|
||||
128
composer.lock
generated
128
composer.lock
generated
@@ -292,16 +292,16 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.1.2",
|
||||
"version": "1.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
||||
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
|
||||
"reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -335,7 +335,7 @@
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2019-11-01T11:05:21+00:00"
|
||||
"time": "2020-03-23T09:12:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
@@ -379,16 +379,16 @@
|
||||
},
|
||||
{
|
||||
"name": "ramsey/uuid",
|
||||
"version": "3.9.2",
|
||||
"version": "3.9.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ramsey/uuid.git",
|
||||
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb"
|
||||
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb",
|
||||
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb",
|
||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
|
||||
"reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -462,20 +462,20 @@
|
||||
"identifier",
|
||||
"uuid"
|
||||
],
|
||||
"time": "2019-12-17T08:18:51+00:00"
|
||||
"time": "2020-02-21T04:36:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.13.1",
|
||||
"version": "v1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
|
||||
"reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
||||
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
|
||||
"reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -487,7 +487,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.13-dev"
|
||||
"dev-master": "1.15-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -520,7 +520,7 @@
|
||||
"polyfill",
|
||||
"portable"
|
||||
],
|
||||
"time": "2019-11-27T13:56:44+00:00"
|
||||
"time": "2020-02-27T09:26:54+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
@@ -582,16 +582,16 @@
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.9.4",
|
||||
"version": "1.9.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7"
|
||||
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/579bb7356d91f9456ccd505f24ca8b667966a0a7",
|
||||
"reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
|
||||
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -626,7 +626,7 @@
|
||||
"object",
|
||||
"object graph"
|
||||
],
|
||||
"time": "2019-12-15T19:12:40+00:00"
|
||||
"time": "2020-01-17T21:11:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
@@ -784,41 +784,38 @@
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-docblock",
|
||||
"version": "4.3.4",
|
||||
"version": "5.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
|
||||
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
|
||||
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
|
||||
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.0",
|
||||
"phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
|
||||
"phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
|
||||
"webmozart/assert": "^1.0"
|
||||
"ext-filter": "^7.1",
|
||||
"php": "^7.2",
|
||||
"phpdocumentor/reflection-common": "^2.0",
|
||||
"phpdocumentor/type-resolver": "^1.0",
|
||||
"webmozart/assert": "^1"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/instantiator": "^1.0.5",
|
||||
"mockery/mockery": "^1.0",
|
||||
"phpdocumentor/type-resolver": "0.4.*",
|
||||
"phpunit/phpunit": "^6.4"
|
||||
"doctrine/instantiator": "^1",
|
||||
"mockery/mockery": "^1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.x-dev"
|
||||
"dev-master": "5.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"phpDocumentor\\Reflection\\": [
|
||||
"src/"
|
||||
]
|
||||
"phpDocumentor\\Reflection\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -829,33 +826,36 @@
|
||||
{
|
||||
"name": "Mike van Riel",
|
||||
"email": "me@mikevanriel.com"
|
||||
},
|
||||
{
|
||||
"name": "Jaap van Otterdijk",
|
||||
"email": "account@ijaap.nl"
|
||||
}
|
||||
],
|
||||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||
"time": "2019-12-28T18:55:12+00:00"
|
||||
"time": "2020-02-22T12:28:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
"version": "1.0.1",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
|
||||
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
||||
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
|
||||
"reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1",
|
||||
"php": "^7.2",
|
||||
"phpdocumentor/reflection-common": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-tokenizer": "^7.1",
|
||||
"mockery/mockery": "~1",
|
||||
"phpunit/phpunit": "^7.0"
|
||||
"ext-tokenizer": "^7.2",
|
||||
"mockery/mockery": "~1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -879,28 +879,28 @@
|
||||
}
|
||||
],
|
||||
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
||||
"time": "2019-08-22T18:11:29+00:00"
|
||||
"time": "2020-02-18T18:59:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpspec/prophecy",
|
||||
"version": "1.10.1",
|
||||
"version": "v1.10.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpspec/prophecy.git",
|
||||
"reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc"
|
||||
"reference": "451c3cd1418cf640de218914901e51b064abb093"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
|
||||
"reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
|
||||
"reference": "451c3cd1418cf640de218914901e51b064abb093",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/instantiator": "^1.0.2",
|
||||
"php": "^5.3|^7.0",
|
||||
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
|
||||
"sebastian/comparator": "^1.2.3|^2.0|^3.0",
|
||||
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
|
||||
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
|
||||
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpspec/phpspec": "^2.5 || ^3.2",
|
||||
@@ -942,7 +942,7 @@
|
||||
"spy",
|
||||
"stub"
|
||||
],
|
||||
"time": "2019-12-22T21:05:45+00:00"
|
||||
"time": "2020-03-05T15:02:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@@ -1198,16 +1198,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "8.5.1",
|
||||
"version": "8.5.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "7870c78da3c5e4883eaef36ae47853ebb3cb86f2"
|
||||
"reference": "67750516bc02f300e2742fed2f50177f8f37bedf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7870c78da3c5e4883eaef36ae47853ebb3cb86f2",
|
||||
"reference": "7870c78da3c5e4883eaef36ae47853ebb3cb86f2",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf",
|
||||
"reference": "67750516bc02f300e2742fed2f50177f8f37bedf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1277,7 +1277,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"time": "2019-12-25T14:49:39+00:00"
|
||||
"time": "2020-03-31T08:52:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/code-unit-reverse-lookup",
|
||||
@@ -1936,16 +1936,16 @@
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
"version": "1.6.0",
|
||||
"version": "1.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webmozart/assert.git",
|
||||
"reference": "573381c0a64f155a0d9a23f4b0c797194805b925"
|
||||
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925",
|
||||
"reference": "573381c0a64f155a0d9a23f4b0c797194805b925",
|
||||
"url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
|
||||
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1980,7 +1980,7 @@
|
||||
"check",
|
||||
"validate"
|
||||
],
|
||||
"time": "2019-11-24T13:36:37+00:00"
|
||||
"time": "2020-02-14T12:15:55+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с клиентами (покупателями)
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
Объект покупателя инициализируется следующим образом:
|
||||
|
||||
```php
|
||||
@@ -73,3 +77,7 @@ $json_string = (string)$customer;
|
||||
```php
|
||||
$json_array = $customer->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с компанией (продавцом)
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
Объект компании инициализируется следующим образом:
|
||||
|
||||
```php
|
||||
@@ -70,3 +74,7 @@ $json_string = (string)$company;
|
||||
```php
|
||||
$json_array = $company->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с данными коррекции
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
Объект для данных коррекции инициализируется следующим образом:
|
||||
|
||||
```php
|
||||
@@ -57,9 +61,6 @@ $json_string = (string)$customer;
|
||||
$json_array = $customer->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с документами
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
Объект документа инициализируется следующим образом:
|
||||
|
||||
```php
|
||||
@@ -157,3 +161,7 @@ $json_string = (string)$doc;
|
||||
```php
|
||||
$json_array = $doc->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с предметами расчёта
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
## Один объект
|
||||
|
||||
Объект предмета расчёта инициализируется следующим образом:
|
||||
@@ -192,3 +196,7 @@ $json_string = (string)$item_array;
|
||||
```php
|
||||
$json_array = $item_array->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с ККТ
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
Объект ККТ инициализируется следующим образом:
|
||||
|
||||
```php
|
||||
@@ -215,3 +219,7 @@ $json_string = (string)$item;
|
||||
```php
|
||||
$json_array = $item->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа с оплатами
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
## Один объект
|
||||
|
||||
Объект оплаты инициализируется следующим образом:
|
||||
@@ -124,3 +128,7 @@ $json_string = (string)$payment_array;
|
||||
```php
|
||||
$json_array = $payment_array->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -6,8 +6,9 @@
|
||||
3. [Работа с оплатами](payments.md)
|
||||
4. [Работа со ставками НДС](vats.md)
|
||||
5. [Работа с предметами расчёта](items.md)
|
||||
6. [Работа с документами](documents.md)
|
||||
7. [Работа с ККТ](kkt.md)
|
||||
6. [Работа с данными коррекции](correction_info.md)
|
||||
7. [Работа с документами](documents.md)
|
||||
8. [Работа с ККТ](kkt.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Работа со ставками НДС
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
|
||||
---
|
||||
|
||||
## Один объект
|
||||
|
||||
Объект ставки НДС инициализируется следующим образом:
|
||||
@@ -184,3 +188,7 @@ $json_string = (string)$vat_array;
|
||||
```php
|
||||
$json_array = $vat_array->jsonSerialize();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
[Вернуться к содержанию](readme.md)
|
||||
@@ -115,10 +115,12 @@ class Kkt extends Client
|
||||
*/
|
||||
public function setLogin(string $login)
|
||||
{
|
||||
if (empty($login)) {
|
||||
throw new AtolKktLoginEmptyException();
|
||||
} elseif (strlen($login) > 100) {
|
||||
throw new AtolKktLoginTooLongException($login, 100);
|
||||
if (!$this->isTestMode()) {
|
||||
if (empty($login)) {
|
||||
throw new AtolKktLoginEmptyException();
|
||||
} elseif (strlen($login) > 100) {
|
||||
throw new AtolKktLoginTooLongException($login, 100);
|
||||
}
|
||||
}
|
||||
$this->kkt_config['prod']['login'] = $login;
|
||||
return $this;
|
||||
@@ -143,8 +145,10 @@ class Kkt extends Client
|
||||
*/
|
||||
public function setPassword(string $password)
|
||||
{
|
||||
if (empty($password)) {
|
||||
throw new AtolKktPasswordEmptyException();
|
||||
if (!$this->isTestMode()) {
|
||||
if (empty($password)) {
|
||||
throw new AtolKktPasswordEmptyException();
|
||||
}
|
||||
}
|
||||
$this->kkt_config['prod']['pass'] = $password;
|
||||
return $this;
|
||||
@@ -225,7 +229,7 @@ class Kkt extends Client
|
||||
public function sell(Document $document)
|
||||
{
|
||||
if ($document->getCorrectionInfo()) {
|
||||
throw new AtolCorrectionInfoException('В документе есть данные коррекции');
|
||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||
}
|
||||
return $this->registerDocument('sell', 'receipt', $document);
|
||||
}
|
||||
@@ -243,7 +247,7 @@ class Kkt extends Client
|
||||
public function sellRefund(Document $document)
|
||||
{
|
||||
if ($document->getCorrectionInfo()) {
|
||||
throw new AtolCorrectionInfoException('В документе есть данные коррекции');
|
||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||
}
|
||||
return $this->registerDocument('sell_refund', 'receipt', $document->clearVats());
|
||||
}
|
||||
@@ -277,7 +281,7 @@ class Kkt extends Client
|
||||
public function buy(Document $document)
|
||||
{
|
||||
if ($document->getCorrectionInfo()) {
|
||||
throw new AtolCorrectionInfoException('В документе есть данные коррекции');
|
||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||
}
|
||||
return $this->registerDocument('buy', 'receipt', $document);
|
||||
}
|
||||
@@ -295,7 +299,7 @@ class Kkt extends Client
|
||||
public function buyRefund(Document $document)
|
||||
{
|
||||
if ($document->getCorrectionInfo()) {
|
||||
throw new AtolCorrectionInfoException('В документе есть данные коррекции');
|
||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||
}
|
||||
return $this->registerDocument('buy_refund', 'receipt', $document->clearVats());
|
||||
}
|
||||
@@ -370,7 +374,6 @@ class Kkt extends Client
|
||||
$this->kkt_config['prod']['pass'] = '';
|
||||
$this->kkt_config['prod']['url'] = 'https://online.atol.ru/possystem/v4';
|
||||
$this->kkt_config['prod']['callback_url'] = '';
|
||||
|
||||
$this->kkt_config['test']['group'] = 'v4-online-atol-ru_4179';
|
||||
$this->kkt_config['test']['login'] = 'v4-online-atol-ru';
|
||||
$this->kkt_config['test']['pass'] = 'iGFFuihss';
|
||||
|
||||
23
src/AtolOnline/Api/Schemas/AtolSchema.php
Normal file
23
src/AtolOnline/Api/Schemas/AtolSchema.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace AtolOnline\Api;
|
||||
|
||||
abstract class AtolSchema
|
||||
{
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public static function get()
|
||||
{
|
||||
return static::$json
|
||||
?? static::$json = json_decode(file_get_contents(static::$URL));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return false|string
|
||||
*/
|
||||
public static function json()
|
||||
{
|
||||
return json_encode(static::get());
|
||||
}
|
||||
}
|
||||
17
src/AtolOnline/Api/Schemas/CorrectionSchema.php
Normal file
17
src/AtolOnline/Api/Schemas/CorrectionSchema.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace AtolOnline\Api;
|
||||
|
||||
class CorrectionSchema extends AtolSchema
|
||||
{
|
||||
/**
|
||||
* @var
|
||||
*/
|
||||
protected static $json;
|
||||
|
||||
/**
|
||||
* Адрес схемы
|
||||
*/
|
||||
protected static $URL = 'https://online.atol.ru/possystem/v4/schema/correction';
|
||||
|
||||
}
|
||||
17
src/AtolOnline/Api/Schemas/SellSchema.php
Normal file
17
src/AtolOnline/Api/Schemas/SellSchema.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace AtolOnline\Api;
|
||||
|
||||
class SellSchema extends AtolSchema
|
||||
{
|
||||
/**
|
||||
* @var
|
||||
*/
|
||||
protected static $json;
|
||||
|
||||
/**
|
||||
* Адрес схемы
|
||||
*/
|
||||
protected static $URL = 'https://online.atol.ru/possystem/v4/schema/sell';
|
||||
|
||||
}
|
||||
@@ -16,7 +16,7 @@ use AtolOnline\{Exceptions\AtolNameTooLongException, Exceptions\AtolPhoneTooLong
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Client extends AtolEntity
|
||||
class Client extends Entity
|
||||
{
|
||||
use
|
||||
/**
|
||||
|
||||
@@ -22,7 +22,7 @@ use AtolOnline\{Exceptions\AtolEmailTooLongException,
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Company extends AtolEntity
|
||||
class Company extends Entity
|
||||
{
|
||||
use
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace AtolOnline\Entities;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class CorrectionInfo extends AtolEntity
|
||||
class CorrectionInfo extends Entity
|
||||
{
|
||||
/**
|
||||
* @var int Тип коррекции. Тег ФФД - 1173.
|
||||
|
||||
@@ -16,7 +16,7 @@ use AtolOnline\Exceptions\AtolCashierTooLongException;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Document extends AtolEntity
|
||||
class Document extends Entity
|
||||
{
|
||||
/**
|
||||
* @var \AtolOnline\Entities\ItemArray Массив предметов расчёта
|
||||
|
||||
@@ -16,7 +16,7 @@ use JsonSerializable;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
abstract class AtolEntity implements JsonSerializable
|
||||
abstract class Entity implements JsonSerializable
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
@@ -22,7 +22,7 @@ use AtolOnline\{Exceptions\AtolNameTooLongException,
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Item extends AtolEntity
|
||||
class Item extends Entity
|
||||
{
|
||||
use RublesKopeksConverter;
|
||||
|
||||
|
||||
@@ -16,25 +16,27 @@ use AtolOnline\Exceptions\AtolTooManyItemsException;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class ItemArray extends AtolEntity
|
||||
class ItemArray extends Entity
|
||||
{
|
||||
/**
|
||||
* Максимальное количество элементов в массиве
|
||||
* По документации ограничение по количеству предметов расчёта = от 1 до 100,
|
||||
* однако в схеме sell не указан receipt.properties.items.maxItems
|
||||
*/
|
||||
const MAX_COUNT = 100;
|
||||
public const MAX_COUNT = 100;
|
||||
|
||||
/**
|
||||
* @var \AtolOnline\Entities\Item[] Массив предметов расчёта
|
||||
* @var Item[] Массив предметов расчёта
|
||||
*/
|
||||
private $items = [];
|
||||
|
||||
/**
|
||||
* ItemArray constructor.
|
||||
*
|
||||
* @param \AtolOnline\Entities\Item[]|null $items Массив предметов расчёта
|
||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||
* @param Item[]|null $items Массив предметов расчёта
|
||||
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||
*/
|
||||
public function __construct(array $items = null)
|
||||
public function __construct(?array $items = null)
|
||||
{
|
||||
if ($items) {
|
||||
$this->set($items);
|
||||
@@ -44,9 +46,9 @@ class ItemArray extends AtolEntity
|
||||
/**
|
||||
* Устанавливает массив предметов расчёта
|
||||
*
|
||||
* @param \AtolOnline\Entities\Item[] $items Массив предметов расчёта
|
||||
* @param Item[] $items Массив предметов расчёта
|
||||
* @return $this
|
||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||
*/
|
||||
public function set(array $items)
|
||||
{
|
||||
@@ -59,9 +61,9 @@ class ItemArray extends AtolEntity
|
||||
/**
|
||||
* Добавляет предмет расчёта в массив
|
||||
*
|
||||
* @param \AtolOnline\Entities\Item $item Объект предмета расчёта
|
||||
* @param Item $item Объект предмета расчёта
|
||||
* @return $this
|
||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||
*/
|
||||
public function add(Item $item)
|
||||
{
|
||||
@@ -74,7 +76,7 @@ class ItemArray extends AtolEntity
|
||||
/**
|
||||
* Возвращает массив предметов расчёта
|
||||
*
|
||||
* @return \AtolOnline\Entities\Item[]
|
||||
* @return Item[]
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
@@ -94,16 +96,16 @@ class ItemArray extends AtolEntity
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет количество элементов в массиве
|
||||
* Проверяет количество предметов расчёта
|
||||
*
|
||||
* @param array|null $items Если передать массив, то проверит количество его элементов.
|
||||
* Иначе проверит количество уже присвоенных элементов.
|
||||
* @return bool
|
||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||
* @param Item[]|null $items Если передать массив, то проверит количество его элементов.
|
||||
* Иначе проверит количество уже присвоенных элементов.
|
||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||
*/
|
||||
protected function validateCount(array $items = null)
|
||||
protected function validateCount(?array $items = null): bool
|
||||
{
|
||||
if (($items && is_array($items) && count($items) >= self::MAX_COUNT) || count($this->items) == self::MAX_COUNT) {
|
||||
if ((!empty($items) && count($items) >= self::MAX_COUNT) || count($this->items) >= self::MAX_COUNT) {
|
||||
throw new AtolTooManyItemsException(self::MAX_COUNT);
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -16,7 +16,7 @@ use AtolOnline\Constants\PaymentTypes;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Payment extends AtolEntity
|
||||
class Payment extends Entity
|
||||
{
|
||||
/**
|
||||
* @var int Тип оплаты
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
namespace AtolOnline\Entities;
|
||||
|
||||
use AtolOnline\Api\SellSchema;
|
||||
use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
||||
|
||||
/**
|
||||
@@ -16,13 +17,8 @@ use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class PaymentArray extends AtolEntity
|
||||
class PaymentArray extends Entity
|
||||
{
|
||||
/**
|
||||
* Максимальное количество элементов в массиве
|
||||
*/
|
||||
const MAX_COUNT = 10;
|
||||
|
||||
/**
|
||||
* @var Payment[] Массив оплат
|
||||
*/
|
||||
@@ -34,7 +30,7 @@ class PaymentArray extends AtolEntity
|
||||
* @param Payment[]|null $payments Массив оплат
|
||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||
*/
|
||||
public function __construct(array $payments = null)
|
||||
public function __construct(?array $payments = null)
|
||||
{
|
||||
if ($payments) {
|
||||
$this->set($payments);
|
||||
@@ -94,17 +90,18 @@ class PaymentArray extends AtolEntity
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет количество элементов в массиве
|
||||
* Проверяет количество налоговых ставок
|
||||
*
|
||||
* @param Payment[]|null $payments Если передать массив, то проверит количество его элементов.
|
||||
* Иначе проверит количество уже присвоенных элементов.
|
||||
* @return bool
|
||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||
*/
|
||||
protected function validateCount(array $payments = null)
|
||||
protected function validateCount(?array $payments = null): bool
|
||||
{
|
||||
if (($payments && is_array($payments) && count($payments) >= self::MAX_COUNT) || count($this->payments) == self::MAX_COUNT) {
|
||||
throw new AtolTooManyPaymentsException(self::MAX_COUNT);
|
||||
$max_items = SellSchema::get()->properties->receipt->properties->payments->maxItems;
|
||||
if ((!empty($payments) && count($payments) >= $max_items) || count($this->payments) >= $max_items) {
|
||||
throw new AtolTooManyPaymentsException($max_items);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ use AtolOnline\{Constants\VatTypes, Traits\RublesKopeksConverter};
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class Vat extends AtolEntity
|
||||
class Vat extends Entity
|
||||
{
|
||||
use RublesKopeksConverter;
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
namespace AtolOnline\Entities;
|
||||
|
||||
use AtolOnline\Api\SellSchema;
|
||||
use AtolOnline\Exceptions\AtolTooManyVatsException;
|
||||
|
||||
/**
|
||||
@@ -16,13 +17,8 @@ use AtolOnline\Exceptions\AtolTooManyVatsException;
|
||||
*
|
||||
* @package AtolOnline\Entities
|
||||
*/
|
||||
class VatArray extends AtolEntity
|
||||
class VatArray extends Entity
|
||||
{
|
||||
/**
|
||||
* Максимальное количество элементов в массиве
|
||||
*/
|
||||
public const MAX_COUNT = 6;
|
||||
|
||||
/**
|
||||
* @var Vat[] Массив ставок НДС
|
||||
*/
|
||||
@@ -34,7 +30,7 @@ class VatArray extends AtolEntity
|
||||
* @param Vat[]|null $vats Массив ставок НДС
|
||||
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
||||
*/
|
||||
public function __construct(array $vats = null)
|
||||
public function __construct(?array $vats = null)
|
||||
{
|
||||
if ($vats) {
|
||||
$this->set($vats);
|
||||
@@ -94,17 +90,18 @@ class VatArray extends AtolEntity
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет количество элементов в массиве
|
||||
* Проверяет количество налоговых ставок
|
||||
*
|
||||
* @param array|null $vats Если передать массив, то проверит количество его элементов.
|
||||
* Иначе проверит количество уже присвоенных элементов.
|
||||
* @return bool
|
||||
* @param Vat[]|null $vats Если передать массив, то проверит количество его элементов.
|
||||
* Иначе проверит количество уже присвоенных элементов.
|
||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
||||
*/
|
||||
protected function validateCount(array $vats = null)
|
||||
protected function validateCount(?array $vats = null): bool
|
||||
{
|
||||
if (($vats && is_array($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) == self::MAX_COUNT) {
|
||||
throw new AtolTooManyVatsException(self::MAX_COUNT);
|
||||
$max_items = SellSchema::get()->properties->receipt->properties->vats->maxItems;
|
||||
if ((!empty($vats) && count($vats) >= $max_items) || count($this->vats) >= $max_items) {
|
||||
throw new AtolTooManyVatsException($max_items);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
use AtolOnline\Entities\AtolEntity;
|
||||
use AtolOnline\Entities\Entity;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
@@ -28,10 +28,10 @@ class BasicTestCase extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param AtolOnline\Entities\AtolEntity $entity
|
||||
* @param Entity $entity
|
||||
* @return $this
|
||||
*/
|
||||
public function checkAtolEntity(AtolEntity $entity)
|
||||
public function checkAtolEntity(Entity $entity)
|
||||
{
|
||||
$this->assertJson((string)$entity);
|
||||
return $this;
|
||||
|
||||
30
tests/Unit/SchemaTest.php
Normal file
30
tests/Unit/SchemaTest.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Unit;
|
||||
|
||||
use AtolOnline\Api\CorrectionSchema;
|
||||
use AtolOnline\Api\SellSchema;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class SchemaTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Тестирует корректность работы объекта схемы документа
|
||||
* прихода, возврата прихода, расхода, возврата расхода
|
||||
*/
|
||||
public function testSellSchema()
|
||||
{
|
||||
$this->assertIsObject(SellSchema::get());
|
||||
$this->assertJson(SellSchema::json());
|
||||
}
|
||||
|
||||
/**
|
||||
* Тестирует корректность работы объекта схемы документа
|
||||
* коррекции прихода, коррекции расхода
|
||||
*/
|
||||
public function testCorrectionSchema()
|
||||
{
|
||||
$this->assertIsObject(CorrectionSchema::get());
|
||||
$this->assertJson(CorrectionSchema::json());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user