Compare commits

..

No commits in common. "19653776c596b24fc546092a7e1c49d2b97f3af7" and "294a3ef2f3af4e54e4d6dc59e0518a359b97da35" have entirely different histories.

22 changed files with 77 additions and 187 deletions

View File

@ -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>

View File

@ -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';

View File

@ -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()

View File

@ -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,
]; ];
} }
} }

View File

@ -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}$/';
} }

View File

@ -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 [

View File

@ -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,

View File

@ -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
{ {

View File

@ -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;

View File

@ -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);
} }

View File

@ -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
};
/** /**
* Класс, описывающий оплату * Класс, описывающий оплату

View File

@ -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
{ {

View File

@ -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, });
}
);
} }
/** /**

View File

@ -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)
*/ */

View File

@ -47,4 +47,4 @@ final class ReceiptOperationTypes extends Enum
* Коррекция прихода (догоняем неучтённые средства) * Коррекция прихода (догоняем неучтённые средства)
*/ */
const BUY_CORRECTION = 'buy_correction'; const BUY_CORRECTION = 'buy_correction';
} }

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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'");
} }

View File

@ -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 : ''));
} }
} }

View File

@ -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 [