mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-26 11:24:02 +00:00
Compare commits
No commits in common. "19653776c596b24fc546092a7e1c49d2b97f3af7" and "294a3ef2f3af4e54e4d6dc59e0518a359b97da35" have entirely different histories.
19653776c5
...
294a3ef2f3
13
phpunit.xml
13
phpunit.xml
@ -12,17 +12,8 @@
|
|||||||
bootstrap="vendor/autoload.php"
|
bootstrap="vendor/autoload.php"
|
||||||
colors="true">
|
colors="true">
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Helpers">
|
<testsuite name="All">
|
||||||
<file>tests/AtolOnline/Tests/HelpersTest.php</file>
|
<directory suffix="Test.php">./tests</directory>
|
||||||
</testsuite>
|
|
||||||
<testsuite name="Entities">
|
|
||||||
<directory>tests/AtolOnline/Tests/Entities</directory>
|
|
||||||
</testsuite>
|
|
||||||
<testsuite name="Collections">
|
|
||||||
<directory>tests/AtolOnline/Tests/Collections</directory>
|
|
||||||
</testsuite>
|
|
||||||
<testsuite name="Api">
|
|
||||||
<directory>tests/AtolOnline/Tests/Api</directory>
|
|
||||||
</testsuite>
|
</testsuite>
|
||||||
</testsuites>
|
</testsuites>
|
||||||
|
|
||||||
|
@ -11,19 +11,15 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Api;
|
namespace AtolOnline\Api;
|
||||||
|
|
||||||
use AtolOnline\Constants\Constraints;
|
use AtolOnline\{
|
||||||
use AtolOnline\Exceptions\{
|
Constants\Constraints,
|
||||||
AuthFailedException,
|
Exceptions\AuthFailedException,
|
||||||
EmptyLoginException,
|
Exceptions\EmptyLoginException,
|
||||||
EmptyPasswordException,
|
Exceptions\EmptyPasswordException,
|
||||||
TooLongLoginException,
|
Exceptions\TooLongLoginException,
|
||||||
TooLongPasswordException
|
Exceptions\TooLongPasswordException};
|
||||||
};
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\{
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
Client,
|
|
||||||
Exception\GuzzleException
|
|
||||||
};
|
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для подключения АТОЛ Онлайн API
|
* Класс для подключения АТОЛ Онлайн API
|
||||||
@ -78,13 +74,10 @@ abstract class AtolClient
|
|||||||
?string $login = null,
|
?string $login = null,
|
||||||
?string $password = null,
|
?string $password = null,
|
||||||
array $config = []
|
array $config = []
|
||||||
)
|
) {
|
||||||
{
|
$this->http = new Client(array_merge($config, [
|
||||||
$this->http = new Client(
|
'http_errors' => $config['http_errors'] ?? false,
|
||||||
array_merge($config, [
|
]));
|
||||||
'http_errors' => $config['http_errors'] ?? false,
|
|
||||||
])
|
|
||||||
);
|
|
||||||
$this->setTestMode($test_mode);
|
$this->setTestMode($test_mode);
|
||||||
!is_null($login) && $this->setLogin($login);
|
!is_null($login) && $this->setLogin($login);
|
||||||
!is_null($password) && $this->setPassword($password);
|
!is_null($password) && $this->setPassword($password);
|
||||||
@ -208,7 +201,6 @@ abstract class AtolClient
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
private function getHeaders(): array
|
private function getHeaders(): array
|
||||||
{
|
{
|
||||||
$headers['Content-type'] = 'application/json; charset=utf-8';
|
$headers['Content-type'] = 'application/json; charset=utf-8';
|
||||||
|
@ -12,13 +12,10 @@ declare(strict_types = 1);
|
|||||||
namespace AtolOnline\Api;
|
namespace AtolOnline\Api;
|
||||||
|
|
||||||
use AtolOnline\Entities\Kkt;
|
use AtolOnline\Entities\Kkt;
|
||||||
use AtolOnline\Exceptions\{
|
use AtolOnline\Exceptions\EmptyMonitorDataException;
|
||||||
EmptyMonitorDataException,
|
use AtolOnline\Exceptions\NotEnoughMonitorDataException;
|
||||||
NotEnoughMonitorDataException
|
|
||||||
};
|
|
||||||
use GuzzleHttp\Exception\GuzzleException;
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для мониторинга ККТ
|
* Класс для мониторинга ККТ
|
||||||
@ -30,7 +27,6 @@ class KktMonitor extends AtolClient
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
protected function getAuthEndpoint(): string
|
protected function getAuthEndpoint(): string
|
||||||
{
|
{
|
||||||
return $this->isTestMode()
|
return $this->isTestMode()
|
||||||
@ -41,7 +37,6 @@ class KktMonitor extends AtolClient
|
|||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
protected function getMainEndpoint(): string
|
protected function getMainEndpoint(): string
|
||||||
{
|
{
|
||||||
return $this->isTestMode()
|
return $this->isTestMode()
|
||||||
|
@ -7,18 +7,13 @@
|
|||||||
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @noinspection PhpMultipleClassDeclarationsInspection */
|
|
||||||
|
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
namespace AtolOnline\Api;
|
namespace AtolOnline\Api;
|
||||||
|
|
||||||
use JetBrains\PhpStorm\{
|
|
||||||
ArrayShape,
|
|
||||||
Pure
|
|
||||||
};
|
|
||||||
use JsonSerializable;
|
use JsonSerializable;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use stdClass;
|
||||||
use Stringable;
|
use Stringable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,10 +30,10 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
protected int $code;
|
protected int $code;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var object|array|null Содержимое ответа сервера
|
* @var stdClass|array|null Содержимое ответа сервера
|
||||||
*/
|
*/
|
||||||
protected object|array|null $content;
|
protected stdClass|array|null $content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Заголовки ответа
|
* @var array Заголовки ответа
|
||||||
*/
|
*/
|
||||||
@ -55,7 +50,7 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
$this->headers = $response->getHeaders();
|
$this->headers = $response->getHeaders();
|
||||||
$this->content = json_decode((string)$response->getBody());
|
$this->content = json_decode((string)$response->getBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает заголовки ответа
|
* Возвращает заголовки ответа
|
||||||
*
|
*
|
||||||
@ -65,19 +60,18 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
{
|
{
|
||||||
return $this->headers;
|
return $this->headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает запрошенный параметр из декодированного объекта результата
|
* Возвращает запрошенный параметр из декодированного объекта результата
|
||||||
*
|
*
|
||||||
* @param $name
|
* @param $name
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
public function __get($name): mixed
|
public function __get($name): mixed
|
||||||
{
|
{
|
||||||
return $this->getContent()?->$name;
|
return $this->getContent()?->$name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает код ответа
|
* Возвращает код ответа
|
||||||
*
|
*
|
||||||
@ -87,7 +81,7 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
{
|
{
|
||||||
return $this->code;
|
return $this->code;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает объект результата запроса
|
* Возвращает объект результата запроса
|
||||||
*
|
*
|
||||||
@ -97,13 +91,12 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
{
|
{
|
||||||
return $this->content;
|
return $this->content;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверяет успешность запроса по соержимому результата
|
* Проверяет успешность запроса по соержимому результата
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
public function isValid(): bool
|
public function isValid(): bool
|
||||||
{
|
{
|
||||||
return !empty($this->getCode())
|
return !empty($this->getCode())
|
||||||
@ -111,7 +104,7 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
&& empty($this->getContent()->error)
|
&& empty($this->getContent()->error)
|
||||||
&& $this->getCode() < 400;
|
&& $this->getCode() < 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает текстовое представление
|
* Возвращает текстовое представление
|
||||||
*/
|
*/
|
||||||
@ -119,16 +112,10 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
{
|
{
|
||||||
return json_encode($this->jsonSerialize(), JSON_UNESCAPED_UNICODE);
|
return json_encode($this->jsonSerialize(), JSON_UNESCAPED_UNICODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
#[ArrayShape([
|
|
||||||
'code' => 'int',
|
|
||||||
'headers' => 'array|\string[][]',
|
|
||||||
'body' => 'mixed',
|
|
||||||
]
|
|
||||||
)]
|
|
||||||
public function jsonSerialize(): array
|
public function jsonSerialize(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -137,4 +124,4 @@ class KktResponse implements JsonSerializable, Stringable
|
|||||||
'body' => $this->content,
|
'body' => $this->content,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -43,28 +43,24 @@ final class Constraints
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная длина наименования покупателя (1227)
|
* Максимальная длина наименования покупателя (1227)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_CLIENT_NAME = 256;
|
const MAX_LENGTH_CLIENT_NAME = 256;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная длина наименования предмета расчёта (1030)
|
* Максимальная длина наименования предмета расчёта (1030)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_ITEM_NAME = 128;
|
const MAX_LENGTH_ITEM_NAME = 128;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная цена за единицу предмета расчёта (1079)
|
* Максимальная цена за единицу предмета расчёта (1079)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_ITEM_PRICE = 42949672.95;
|
const MAX_COUNT_ITEM_PRICE = 42949672.95;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальное количество (вес) единицы предмета расчёта (1023)
|
* Максимальное количество (вес) единицы предмета расчёта (1023)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_ITEM_QUANTITY = 99999.999;
|
const MAX_COUNT_ITEM_QUANTITY = 99999.999;
|
||||||
@ -72,42 +68,36 @@ final class Constraints
|
|||||||
/**
|
/**
|
||||||
* Максимальная стоимость всех предметов расчёта в документе прихода, расхода,
|
* Максимальная стоимость всех предметов расчёта в документе прихода, расхода,
|
||||||
* возврата прихода, возврата расхода (1043)
|
* возврата прихода, возврата расхода (1043)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_ITEM_SUM = 42949672.95;
|
const MAX_COUNT_ITEM_SUM = 42949672.95;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная длина телефона или email покупателя (1008)
|
* Максимальная длина телефона или email покупателя (1008)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_CLIENT_CONTACT = 64;
|
const MAX_LENGTH_CLIENT_CONTACT = 64;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Длина операции для платёжного агента (1044)
|
* Длина операции для платёжного агента (1044)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 19
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 19
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_PAYING_AGENT_OPERATION = 24;
|
const MAX_LENGTH_PAYING_AGENT_OPERATION = 24;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальное количество предметов расчёта в документе прихода, расхода, возврата прихода, возврата расхода
|
* Максимальное количество предметов расчёта в документе прихода, расхода, возврата прихода, возврата расхода
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_DOC_ITEMS = 100;
|
const MAX_COUNT_DOC_ITEMS = 100;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная длина единицы измерения предмета расчётов
|
* Максимальная длина единицы измерения предмета расчётов
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_MEASUREMENT_UNIT = 16;
|
const MAX_LENGTH_MEASUREMENT_UNIT = 16;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальная длина пользовательских данных для предмета расчётов (1191)
|
* Максимальная длина пользовательских данных для предмета расчётов (1191)
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 29
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 29
|
||||||
*/
|
*/
|
||||||
const MAX_LENGTH_USER_DATA = 64;
|
const MAX_LENGTH_USER_DATA = 64;
|
||||||
@ -128,14 +118,12 @@ final class Constraints
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальное количество платежей в любом документе
|
* Максимальное количество платежей в любом документе
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30 и 35
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30 и 35
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_DOC_PAYMENTS = 10;
|
const MAX_COUNT_DOC_PAYMENTS = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Максимальное количество ставок НДС в любом документе
|
* Максимальное количество ставок НДС в любом документе
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 31 и 36
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 31 и 36
|
||||||
*/
|
*/
|
||||||
const MAX_COUNT_DOC_VATS = 6;
|
const MAX_COUNT_DOC_VATS = 6;
|
||||||
@ -190,31 +178,26 @@ final class Constraints
|
|||||||
*
|
*
|
||||||
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/client/inn"
|
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/client/inn"
|
||||||
*/
|
*/
|
||||||
const PATTERN_INN
|
const PATTERN_INN = /* @lang PhpRegExp */
|
||||||
= /* @lang PhpRegExp */
|
|
||||||
'/(^[\d]{10}$)|(^[\d]{12}$)/';
|
'/(^[\d]{10}$)|(^[\d]{12}$)/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регулярное выражение для валидации номера телефона
|
* Регулярное выражение для валидации номера телефона
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/definitions/phone_number"
|
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/definitions/phone_number"
|
||||||
*/
|
*/
|
||||||
const PATTERN_PHONE
|
const PATTERN_PHONE = /* @lang PhpRegExp */
|
||||||
= /* @lang PhpRegExp */
|
|
||||||
'/^([^\s\\\]{0,17}|\+[^\s\\\]{1,18})$/';
|
'/^([^\s\\\]{0,17}|\+[^\s\\\]{1,18})$/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регулярное выражение для валидации строки Callback URL
|
* Регулярное выражение для валидации строки Callback URL
|
||||||
*/
|
*/
|
||||||
const PATTERN_CALLBACK_URL
|
const PATTERN_CALLBACK_URL = /* @lang PhpRegExp */
|
||||||
= /* @lang PhpRegExp */
|
'/^http(s?)\:\/\/[0-9a-zA-Zа-яА-Я]' .
|
||||||
'/^http(s?):\/\/[0-9a-zA-Zа-яА-Я]' .
|
'([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-\.\?\,\'\/\\\+&=%\$#_]*)?$/';
|
||||||
'([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-.?,\'\/\\\+&=%\$#_]*)?$/';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регулярное выражение для валидации кода страны происхождения товара
|
* Регулярное выражение для валидации кода страны происхождения товара
|
||||||
*/
|
*/
|
||||||
const PATTERN_OKSM_CODE
|
const PATTERN_OKSM_CODE = /* @lang PhpRegExp */
|
||||||
= /* @lang PhpRegExp */
|
|
||||||
'/^[\d]{3}$/';
|
'/^[\d]{3}$/';
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,8 @@ use AtolOnline\Exceptions\{
|
|||||||
EmptyAddUserPropNameException,
|
EmptyAddUserPropNameException,
|
||||||
EmptyAddUserPropValueException,
|
EmptyAddUserPropValueException,
|
||||||
TooLongAddUserPropNameException,
|
TooLongAddUserPropNameException,
|
||||||
TooLongAddUserPropValueException
|
TooLongAddUserPropValueException};
|
||||||
};
|
use JetBrains\PhpStorm\Pure;
|
||||||
use JetBrains\PhpStorm\{
|
|
||||||
ArrayShape,
|
|
||||||
Pure
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс, описывающий дополнительный реквизит пользователя
|
* Класс, описывающий дополнительный реквизит пользователя
|
||||||
@ -121,7 +117,6 @@ final class AdditionalUserProps extends Entity
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
#[Pure]
|
||||||
#[ArrayShape(['name' => 'string', 'value' => 'null|string'])]
|
|
||||||
public function jsonSerialize(): array
|
public function jsonSerialize(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
@ -11,14 +11,8 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\{Constants\Constraints, Enums\SnoTypes, Traits\HasEmail, Traits\HasInn};
|
||||||
Constants\Constraints,
|
use AtolOnline\Exceptions\{InvalidEmailException,
|
||||||
Enums\SnoTypes,
|
|
||||||
Traits\HasEmail,
|
|
||||||
Traits\HasInn
|
|
||||||
};
|
|
||||||
use AtolOnline\Exceptions\{
|
|
||||||
InvalidEmailException,
|
|
||||||
InvalidEnumValueException,
|
InvalidEnumValueException,
|
||||||
InvalidInnLengthException,
|
InvalidInnLengthException,
|
||||||
InvalidPaymentAddressException,
|
InvalidPaymentAddressException,
|
||||||
|
@ -9,13 +9,9 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\Collections\{Payments, Vats};
|
||||||
Collections\Payments,
|
use AtolOnline\Constants\Constraints;
|
||||||
Collections\Vats,
|
use AtolOnline\Exceptions\{InvalidEntityInCollectionException, TooLongCashierException};
|
||||||
Constants\Constraints};
|
|
||||||
use AtolOnline\Exceptions\{
|
|
||||||
InvalidEntityInCollectionException,
|
|
||||||
TooLongCashierException};
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use JetBrains\PhpStorm\ArrayShape;
|
use JetBrains\PhpStorm\ArrayShape;
|
||||||
|
|
||||||
@ -32,8 +28,8 @@ class Correction extends Entity
|
|||||||
protected Company $company;
|
protected Company $company;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo вынести в трейт?
|
|
||||||
* @var string|null ФИО кассира
|
* @var string|null ФИО кассира
|
||||||
|
* @todo вынести в трейт
|
||||||
*/
|
*/
|
||||||
protected ?string $cashier = null;
|
protected ?string $cashier = null;
|
||||||
|
|
||||||
@ -199,11 +195,11 @@ class Correction extends Entity
|
|||||||
* @throws InvalidEntityInCollectionException
|
* @throws InvalidEntityInCollectionException
|
||||||
*/
|
*/
|
||||||
#[ArrayShape([
|
#[ArrayShape([
|
||||||
'company' => '\AtolOnline\Entities\Company',
|
'company' => "\AtolOnline\Entities\Company",
|
||||||
'correction_info' => '\AtolOnline\Entities\CorrectionInfo',
|
'correction_info' => "\AtolOnline\Entities\CorrectionInfo",
|
||||||
'payments' => 'array',
|
'payments' => "array",
|
||||||
'vats' => '\AtolOnline\Collections\Vats|null',
|
'vats' => "\AtolOnline\Collections\Vats|null",
|
||||||
'cashier' => 'null|string',
|
'cashier' => "null|string"
|
||||||
])]
|
])]
|
||||||
public function jsonSerialize(): array
|
public function jsonSerialize(): array
|
||||||
{
|
{
|
||||||
|
@ -7,9 +7,7 @@
|
|||||||
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @noinspection PhpMultipleClassDeclarationsInspection */
|
declare(strict_types=1);
|
||||||
|
|
||||||
declare(strict_types = 1);
|
|
||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
|
@ -556,8 +556,8 @@ final class Item extends Entity
|
|||||||
if (is_string($declaration_number)) {
|
if (is_string($declaration_number)) {
|
||||||
$declaration_number = trim($declaration_number);
|
$declaration_number = trim($declaration_number);
|
||||||
if (
|
if (
|
||||||
mb_strlen($declaration_number) < Constraints::MIN_LENGTH_DECLARATION_NUMBER
|
mb_strlen($declaration_number) < Constraints::MIN_LENGTH_DECLARATION_NUMBER ||
|
||||||
|| mb_strlen($declaration_number) > Constraints::MAX_LENGTH_DECLARATION_NUMBER
|
mb_strlen($declaration_number) > Constraints::MAX_LENGTH_DECLARATION_NUMBER
|
||||||
) {
|
) {
|
||||||
throw new InvalidDeclarationNumberException($declaration_number);
|
throw new InvalidDeclarationNumberException($declaration_number);
|
||||||
}
|
}
|
||||||
|
@ -11,19 +11,10 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\{
|
use AtolOnline\Constants\Constraints;
|
||||||
Constants\Constraints,
|
use AtolOnline\Enums\PaymentTypes;
|
||||||
Enums\PaymentTypes,
|
use AtolOnline\Exceptions\{InvalidEnumValueException, NegativePaymentSumException, TooHighPaymentSumException,};
|
||||||
};
|
use JetBrains\PhpStorm\{ArrayShape, Pure};
|
||||||
use AtolOnline\Exceptions\{
|
|
||||||
InvalidEnumValueException,
|
|
||||||
NegativePaymentSumException,
|
|
||||||
TooHighPaymentSumException,
|
|
||||||
};
|
|
||||||
use JetBrains\PhpStorm\{
|
|
||||||
ArrayShape,
|
|
||||||
Pure
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс, описывающий оплату
|
* Класс, описывающий оплату
|
||||||
|
@ -34,8 +34,8 @@ final class Receipt extends Entity
|
|||||||
protected Client $client;
|
protected Client $client;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo вынести в трейт?
|
|
||||||
* @var Company Продавец
|
* @var Company Продавец
|
||||||
|
* @todo вынести в трейт
|
||||||
*/
|
*/
|
||||||
protected Company $company;
|
protected Company $company;
|
||||||
|
|
||||||
@ -55,8 +55,8 @@ final class Receipt extends Entity
|
|||||||
protected Items $items;
|
protected Items $items;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo вынести в трейт?
|
|
||||||
* @var Payments Коллекция оплат
|
* @var Payments Коллекция оплат
|
||||||
|
* @todo вынести в трейт
|
||||||
*/
|
*/
|
||||||
protected Payments $payments;
|
protected Payments $payments;
|
||||||
|
|
||||||
@ -71,8 +71,8 @@ final class Receipt extends Entity
|
|||||||
protected float $total = 0;
|
protected float $total = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo вынести в трейт?
|
|
||||||
* @var string|null ФИО кассира
|
* @var string|null ФИО кассира
|
||||||
|
* @todo вынести в трейт
|
||||||
*/
|
*/
|
||||||
protected ?string $cashier = null;
|
protected ?string $cashier = null;
|
||||||
|
|
||||||
@ -204,9 +204,10 @@ final class Receipt extends Entity
|
|||||||
*
|
*
|
||||||
* @param Items $items
|
* @param Items $items
|
||||||
* @return $this
|
* @return $this
|
||||||
|
* @throws EmptyItemsException
|
||||||
* @throws InvalidEntityInCollectionException
|
* @throws InvalidEntityInCollectionException
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
* @throws EmptyItemsException
|
* @todo исключение при пустой коллекции
|
||||||
*/
|
*/
|
||||||
public function setItems(Items $items): self
|
public function setItems(Items $items): self
|
||||||
{
|
{
|
||||||
|
@ -106,17 +106,15 @@ final class Vat extends Entity
|
|||||||
#[Pure]
|
#[Pure]
|
||||||
public function getCalculated(): float
|
public function getCalculated(): float
|
||||||
{
|
{
|
||||||
return Helpers::toRub(
|
return Helpers::toRub(match ($this->getType()) {
|
||||||
match ($this->getType()) {
|
VatTypes::VAT10 => Helpers::toKop($this->sum) * 10 / 100,
|
||||||
VatTypes::VAT10 => Helpers::toKop($this->sum) * 10 / 100,
|
VatTypes::VAT18 => Helpers::toKop($this->sum) * 18 / 100,
|
||||||
VatTypes::VAT18 => Helpers::toKop($this->sum) * 18 / 100,
|
VatTypes::VAT20 => Helpers::toKop($this->sum) * 20 / 100,
|
||||||
VatTypes::VAT20 => Helpers::toKop($this->sum) * 20 / 100,
|
VatTypes::VAT110 => Helpers::toKop($this->sum) * 10 / 110,
|
||||||
VatTypes::VAT110 => Helpers::toKop($this->sum) * 10 / 110,
|
VatTypes::VAT118 => Helpers::toKop($this->sum) * 18 / 118,
|
||||||
VatTypes::VAT118 => Helpers::toKop($this->sum) * 18 / 118,
|
VatTypes::VAT120 => Helpers::toKop($this->sum) * 20 / 120,
|
||||||
VatTypes::VAT120 => Helpers::toKop($this->sum) * 20 / 120,
|
default => 0,
|
||||||
default => 0,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,7 +77,6 @@ final class PaymentObjects extends Enum
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Составной предмет расчёта
|
* Составной предмет расчёта
|
||||||
*
|
|
||||||
* @deprecated Более не используется согласно ФФД 1.05
|
* @deprecated Более не используется согласно ФФД 1.05
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 25 (payment_object)
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 25 (payment_object)
|
||||||
*/
|
*/
|
||||||
|
@ -47,4 +47,4 @@ final class ReceiptOperationTypes extends Enum
|
|||||||
* Коррекция прихода (догоняем неучтённые средства)
|
* Коррекция прихода (догоняем неучтённые средства)
|
||||||
*/
|
*/
|
||||||
const BUY_CORRECTION = 'buy_correction';
|
const BUY_CORRECTION = 'buy_correction';
|
||||||
}
|
}
|
@ -12,7 +12,6 @@ declare(strict_types = 1);
|
|||||||
namespace AtolOnline\Exceptions;
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при работе с АТОЛ Онлайн
|
* Исключение, возникающее при работе с АТОЛ Онлайн
|
||||||
@ -30,7 +29,6 @@ class AtolException extends Exception
|
|||||||
* @param string $message Сообщение
|
* @param string $message Сообщение
|
||||||
* @param int[] $ffd_tags Переопредление тегов ФФД
|
* @param int[] $ffd_tags Переопредление тегов ФФД
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
public function __construct(string $message = '', array $ffd_tags = [])
|
public function __construct(string $message = '', array $ffd_tags = [])
|
||||||
{
|
{
|
||||||
$tags = implode(', ', $ffd_tags ?: $this->ffd_tags);
|
$tags = implode(', ', $ffd_tags ?: $this->ffd_tags);
|
||||||
|
@ -13,7 +13,6 @@ namespace AtolOnline\Exceptions;
|
|||||||
|
|
||||||
use AtolOnline\Api\KktResponse;
|
use AtolOnline\Api\KktResponse;
|
||||||
use Exception;
|
use Exception;
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при неудачной авторизации
|
* Исключение, возникающее при неудачной авторизации
|
||||||
@ -26,7 +25,6 @@ class AuthFailedException extends Exception
|
|||||||
* @param KktResponse $response
|
* @param KktResponse $response
|
||||||
* @param string $message
|
* @param string $message
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
|
||||||
public function __construct(KktResponse $response, string $message = '')
|
public function __construct(KktResponse $response, string $message = '')
|
||||||
{
|
{
|
||||||
parent::__construct(($message ?: 'Ошибка авторизации: ') . ': ' . $response);
|
parent::__construct(($message ?: 'Ошибка авторизации: ') . ': ' . $response);
|
||||||
|
@ -13,7 +13,6 @@ namespace AtolOnline\Exceptions;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при попытке указать пустой логин
|
* Исключение, возникающее при попытке указать пустой логин
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
|
||||||
*/
|
*/
|
||||||
class EmptyLoginException extends AtolException
|
class EmptyLoginException extends AtolException
|
||||||
|
@ -13,7 +13,6 @@ namespace AtolOnline\Exceptions;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при попытке указать пустой пароль
|
* Исключение, возникающее при попытке указать пустой пароль
|
||||||
*
|
|
||||||
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
|
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
|
||||||
*/
|
*/
|
||||||
class EmptyPasswordException extends AtolException
|
class EmptyPasswordException extends AtolException
|
||||||
|
@ -12,7 +12,6 @@ declare(strict_types = 1);
|
|||||||
namespace AtolOnline\Exceptions;
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
use AtolOnline\Constants\Ffd105Tags;
|
use AtolOnline\Constants\Ffd105Tags;
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при попытке указать некорректный адрес места расчётов
|
* Исключение, возникающее при попытке указать некорректный адрес места расчётов
|
||||||
@ -29,8 +28,7 @@ class InvalidPaymentAddressException extends AtolException
|
|||||||
* @param string $address
|
* @param string $address
|
||||||
* @param string $message
|
* @param string $message
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
public function __construct($address = '', $message = "")
|
||||||
public function __construct(string $address = '', string $message = '')
|
|
||||||
{
|
{
|
||||||
parent::__construct($message ?: "Некорректный адрес места расчётов: '$address'");
|
parent::__construct($message ?: "Некорректный адрес места расчётов: '$address'");
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,6 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline\Exceptions;
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
use JetBrains\PhpStorm\Pure;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Исключение, возникающее при ошибке валидации UUID
|
* Исключение, возникающее при ошибке валидации UUID
|
||||||
*/
|
*/
|
||||||
@ -21,11 +19,13 @@ class InvalidUuidException extends AtolException
|
|||||||
/**
|
/**
|
||||||
* Конструктор
|
* Конструктор
|
||||||
*
|
*
|
||||||
* @param string $uuid
|
* @param $uuid
|
||||||
|
* @param string $message
|
||||||
|
* @param int $code
|
||||||
|
* @param Throwable|null $previous
|
||||||
*/
|
*/
|
||||||
#[Pure]
|
public function __construct(?string $uuid = null)
|
||||||
public function __construct(string $uuid = '')
|
|
||||||
{
|
{
|
||||||
parent::__construct('Невалидный UUID: ' . $uuid);
|
parent::__construct('Невалидный UUID' . ($uuid ? ': ' . $uuid : ''));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,6 @@ declare(strict_types = 1);
|
|||||||
|
|
||||||
namespace AtolOnline;
|
namespace AtolOnline;
|
||||||
|
|
||||||
use JetBrains\PhpStorm\ArrayShape;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Константы, определяющие параметры тестовых сред
|
* Константы, определяющие параметры тестовых сред
|
||||||
*
|
*
|
||||||
@ -25,16 +23,6 @@ final class TestEnvParams
|
|||||||
*
|
*
|
||||||
* @return string[]
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
#[ArrayShape([
|
|
||||||
'endpoint' => "string",
|
|
||||||
'company_name' => "string",
|
|
||||||
'inn' => "string",
|
|
||||||
'payment_address' => "string",
|
|
||||||
'group' => "string",
|
|
||||||
'login' => "string",
|
|
||||||
'password' => "string",
|
|
||||||
'endpoint_ofd' => "string",
|
|
||||||
])]
|
|
||||||
public static function FFD105(): array
|
public static function FFD105(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -55,16 +43,6 @@ final class TestEnvParams
|
|||||||
* @return string[]
|
* @return string[]
|
||||||
* @noinspection PhpUnused
|
* @noinspection PhpUnused
|
||||||
*/
|
*/
|
||||||
#[ArrayShape([
|
|
||||||
'endpoint' => "string",
|
|
||||||
'company_name' => "string",
|
|
||||||
'inn' => "string",
|
|
||||||
'payment_address' => "string",
|
|
||||||
'group' => "string",
|
|
||||||
'login' => "string",
|
|
||||||
'password' => "string",
|
|
||||||
'endpoint_ofd' => "string",
|
|
||||||
])]
|
|
||||||
public static function FFD12(): array
|
public static function FFD12(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
Loading…
Reference in New Issue
Block a user