Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c05e013a5a | |||
| e282de7e08 | |||
| c14b680be4 | |||
| 7558cb6638 | |||
| d3fe2cba9a | |||
| e70a65fa44 | |||
| ba5166f2cf | |||
| 93f5186b15 | |||
| f2b4952aa5 | |||
| 7899daf421 | |||
| 4cf6e81d5f | |||
| 9d7dd75cd9 | |||
| 4d7e5dd76e | |||
| 0f658d38a9 |
70
docs/kkt.md
70
docs/kkt.md
@@ -52,9 +52,14 @@ $kkt->getGroup();
|
|||||||
## Тестовый режим
|
## Тестовый режим
|
||||||
|
|
||||||
На самом деле, в АТОЛ Онлайн нет понятия *тестовая операция* или чего-то в этом духе.
|
На самом деле, в АТОЛ Онлайн нет понятия *тестовая операция* или чего-то в этом духе.
|
||||||
АТОЛ предоставляет нам отдельную тестовую ККТ.
|
АТОЛ предоставляет нам отдельную тестовую среду (ККТ).
|
||||||
[Её настройки](https://online.atol.ru/files/ffd/test_sreda.txt) уже указаны в коде библиотеки.
|
[Её настройки](https://online.atol.ru/files/ffd/test_sreda.txt) уже указаны в коде библиотеки.
|
||||||
*Под тестовым режимом работы подразумевается использование этой тестовой ККТ.*
|
*Под тестовым режимом работы подразумевается использование другой (тестовой) ККТ.*
|
||||||
|
|
||||||
|
При включенном тестовом режиме:
|
||||||
|
* меняется логин, пароль и группа (для обращения на тестовую ККТ)
|
||||||
|
* между авторизацией и операцией над документом, в `Company` документа переопределяется ИНН, СНО и адрес места
|
||||||
|
расчётов на те, что указаны в [параметрах тестовой среды](https://online.atol.ru/files/ffd/test_sreda.txt).
|
||||||
|
|
||||||
В библиотеке есть переключатель настроек ККТ.
|
В библиотеке есть переключатель настроек ККТ.
|
||||||
С его помощью можете поменять вашу боевую ККТ на тестовую и наоборот.
|
С его помощью можете поменять вашу боевую ККТ на тестовую и наоборот.
|
||||||
@@ -70,13 +75,43 @@ $kkt->setTestMode(false); // выключить
|
|||||||
> Если вы включили тестовый режим (как показано выше), то используются именно эта ККТ, а не ваша.
|
> Если вы включили тестовый режим (как показано выше), то используются именно эта ККТ, а не ваша.
|
||||||
> После выключения тестового режима настройки доступа к ККТ меняются на ваши (используется уже ваша ККТ).
|
> После выключения тестового режима настройки доступа к ККТ меняются на ваши (используется уже ваша ККТ).
|
||||||
|
|
||||||
Если по каким-то причинам у вас не получится использовать тестовый режим, вы можете проводить свои тесты в боевом режиме (на собственной ККТ).
|
Для включения тестового режима необязательно задавать параметры боевой ККТ.
|
||||||
|
|
||||||
|
Если по каким-то причинам у вас не получится использовать тестовый режим, вы можете проводить свои тесты в боевом
|
||||||
|
режиме (на собственной ККТ).
|
||||||
В этом случае важно понимать следующее:
|
В этом случае важно понимать следующее:
|
||||||
1. сразу после оформления документа **прихода** необходимо оформлять точно такой же документ **возврата прихода**;
|
1. сразу после оформления документа **прихода** необходимо оформлять точно такой же документ **возврата прихода**;
|
||||||
2. [вы обязательно забудете о пункте 1](http://murphy-law.net.ru/basics.html);
|
2. [вы обязательно забудете о пункте 1](http://murphy-law.net.ru/basics.html);
|
||||||
3. пп. 1 и 2 в любом случае скажутся на ваших финансовых отчётах;
|
3. пп. 1 и 2 в любом случае скажутся на ваших финансовых отчётах;
|
||||||
4. вся ответственность за пп. 1-3 и последствия ложится только на вас.
|
4. вся ответственность за пп. 1-3 и последствия ложится только на вас.
|
||||||
|
|
||||||
|
## Авторизация ККТ
|
||||||
|
|
||||||
|
Перед первым запросом на ККТ происходит авторизация на сервере по логину и паролю.
|
||||||
|
В ответ приходит авторизационный токен, срок жизни коего равен 24 часам.
|
||||||
|
После первой успешной операции возможно получить этот токен следующим образом:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$kkt->getAuthToken(); // вернёт строку длиной 128 символа
|
||||||
|
```
|
||||||
|
|
||||||
|
Этот токен можно сохранить и переиспользовать в течение всего срока его жизни.
|
||||||
|
Спустя это время следует получить новый токен.
|
||||||
|
|
||||||
|
Однажды полученный токен, то для дальнейшего использования следует указывать его следующим образом:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$kkt->setAuthToken($token_string);
|
||||||
|
```
|
||||||
|
|
||||||
|
Если токен был установлен перед выполнением операции, то при выполнении операции будет использоваться именно он, а новый
|
||||||
|
запрашиваться не будет. Если операция завершится ошибочно из-за истёкшего токена, следует повторить операцию без
|
||||||
|
использования метода `setAuthToken()`, либо обнулив его следующим образом:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$kkt->setAuthToken(null);
|
||||||
|
```
|
||||||
|
|
||||||
## Регистрация документа
|
## Регистрация документа
|
||||||
|
|
||||||
Для регистрации документа **прихода** необходимо вызвать метод `sell()`:
|
Для регистрации документа **прихода** необходимо вызвать метод `sell()`:
|
||||||
@@ -106,23 +141,44 @@ $result = $kkt->buyRefund($document);
|
|||||||
Для операций, перечисленных выше, документы не должны содержать [данных коррекции](/docs/documents.md#correction).
|
Для операций, перечисленных выше, документы не должны содержать [данных коррекции](/docs/documents.md#correction).
|
||||||
Тогда как для операций коррекции, которые описаны ниже, эти данные должны присутствовать.
|
Тогда как для операций коррекции, которые описаны ниже, эти данные должны присутствовать.
|
||||||
|
|
||||||
Для регистрации документа **коррекции прихода** необходимо вызвать метод `sellRefund()`:
|
Для регистрации документа **коррекции прихода** необходимо вызвать метод `sellCorrection()`:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$result = $kkt->sellCorrection($document);
|
$result = $kkt->sellCorrection($document);
|
||||||
```
|
```
|
||||||
|
|
||||||
Для регистрации документа **коррекции расхода** необходимо вызвать метод `buyRefund()`:
|
Для регистрации документа **коррекции расхода** необходимо вызвать метод `buyCorrection()`:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$result = $kkt->buyCorrection($document);
|
$result = $kkt->buyCorrection($document);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Собственный идентификатор документа
|
||||||
|
|
||||||
|
Каждый документ, переданный на ККТ для регистрации, всегда имеет свой идентификатор, абсолютно уникальный среди всех
|
||||||
|
документов когда-либо регистрировавшихся на ККТ, даже если при регистрации были ошибки.
|
||||||
|
По умолчанию это UUID версии 4.
|
||||||
|
|
||||||
|
Чтобы использовать собственный идентификатор, следует передать нужное строковое значение вторым параметром в любой из
|
||||||
|
шести описанных выше методов, например:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$kkt->sell($document, $my_unique_id);
|
||||||
|
$kkt->sellRefund($document, $my_unique_id);
|
||||||
|
$kkt->buy($document, $my_unique_id);
|
||||||
|
$kkt->buyRefund($document, $my_unique_id);
|
||||||
|
$kkt->sellCorrection($document, $my_unique_id);
|
||||||
|
$kkt->buyCorrection($document, $my_unique_id);
|
||||||
|
```
|
||||||
|
|
||||||
|
Если `$my_unique_id` равен `null` или пустой строке, то будет сгенерирован новый UUID.
|
||||||
|
Узнать его можно будет только в ответе от ККТ.
|
||||||
|
|
||||||
### Передача callback_url
|
### Передача callback_url
|
||||||
|
|
||||||
Перед регистрацией документа можно указать `callback_url`.
|
Перед регистрацией документа можно указать `callback_url`.
|
||||||
АТОЛ отправит на указанный URL результат регистрации.
|
АТОЛ отправит на указанный URL результат регистрации.
|
||||||
Вам необходимо расположить по этому адресу скрипт, обрабатывающий этот результат.
|
По этому адресу должен располагаться код, который будет обрабатывать этот результат.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$kkt->setCallbackUrl('http://example.com/process-kkt-result');
|
$kkt->setCallbackUrl('http://example.com/process-kkt-result');
|
||||||
@@ -158,7 +214,7 @@ $err_text = $result->error->text;
|
|||||||
Проверка корректности ответа (отсутствия ошибок) работает через метод `isValid()`:
|
Проверка корректности ответа (отсутствия ошибок) работает через метод `isValid()`:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$kkt->isValid(); // вернёт true, если ошибок нет
|
$kkt->getLastResponse()->isValid(); // вернёт true, если ошибок нет
|
||||||
```
|
```
|
||||||
|
|
||||||
## Проверка статуса документа
|
## Проверка статуса документа
|
||||||
|
|||||||
@@ -9,7 +9,9 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Api;
|
namespace AtolOnline\Api;
|
||||||
|
|
||||||
use AtolOnline\{Entities\Document,
|
use AtolOnline\{Constants\TestEnvParams,
|
||||||
|
Entities\Company,
|
||||||
|
Entities\Document,
|
||||||
Exceptions\AtolCorrectionInfoException,
|
Exceptions\AtolCorrectionInfoException,
|
||||||
Exceptions\AtolInvalidUuidException,
|
Exceptions\AtolInvalidUuidException,
|
||||||
Exceptions\AtolKktLoginEmptyException,
|
Exceptions\AtolKktLoginEmptyException,
|
||||||
@@ -172,7 +174,7 @@ class Kkt extends Client
|
|||||||
*/
|
*/
|
||||||
public function setCallbackUrl(string $url)
|
public function setCallbackUrl(string $url)
|
||||||
{
|
{
|
||||||
$this->kkt_config['prod']['callback_url'] = $url;
|
$this->kkt_config[$this->isTestMode() ? 'test' : 'prod']['callback_url'] = $url;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,104 +224,115 @@ class Kkt extends Client
|
|||||||
* Регистрирует документ прихода
|
* Регистрирует документ прихода
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Document $document
|
* @param \AtolOnline\Entities\Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
public function sell(Document $document)
|
public function sell(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if ($document->getCorrectionInfo()) {
|
if ($document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||||
}
|
}
|
||||||
return $this->registerDocument('sell', 'receipt', $document);
|
return $this->registerDocument('sell', 'receipt', $document, $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регистрирует документ возврата прихода
|
* Регистрирует документ возврата прихода
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Document $document
|
* @param \AtolOnline\Entities\Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
|
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
|
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
||||||
*/
|
*/
|
||||||
public function sellRefund(Document $document)
|
public function sellRefund(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if ($document->getCorrectionInfo()) {
|
if ($document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||||
}
|
}
|
||||||
return $this->registerDocument('sell_refund', 'receipt', $document->clearVats());
|
return $this->registerDocument('sell_refund', 'receipt', $document->clearVats(), $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регистрирует документ коррекции прихода
|
* Регистрирует документ коррекции прихода
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Document $document
|
* @param \AtolOnline\Entities\Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
public function sellCorrection(Document $document)
|
public function sellCorrection(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if (!$document->getCorrectionInfo()) {
|
if (!$document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException();
|
throw new AtolCorrectionInfoException();
|
||||||
}
|
}
|
||||||
$document->setClient(null)->setItems([]);
|
$document->setClient(null)->setItems([]);
|
||||||
return $this->registerDocument('sell_correction', 'correction', $document);
|
return $this->registerDocument('sell_correction', 'correction', $document, $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регистрирует документ расхода
|
* Регистрирует документ расхода
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Document $document
|
* @param \AtolOnline\Entities\Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
public function buy(Document $document)
|
public function buy(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if ($document->getCorrectionInfo()) {
|
if ($document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||||
}
|
}
|
||||||
return $this->registerDocument('buy', 'receipt', $document);
|
return $this->registerDocument('buy', 'receipt', $document, $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регистрирует документ возврата расхода
|
* Регистрирует документ возврата расхода
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Document $document
|
* @param \AtolOnline\Entities\Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
|
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
|
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
public function buyRefund(Document $document)
|
public function buyRefund(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if ($document->getCorrectionInfo()) {
|
if ($document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
|
||||||
}
|
}
|
||||||
return $this->registerDocument('buy_refund', 'receipt', $document->clearVats());
|
return $this->registerDocument('buy_refund', 'receipt', $document->clearVats(), $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Регистрирует документ коррекции расхода
|
* Регистрирует документ коррекции расхода
|
||||||
*
|
*
|
||||||
* @param Document $document
|
* @param Document $document
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
||||||
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
|
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
public function buyCorrection(Document $document)
|
public function buyCorrection(Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
if (!$document->getCorrectionInfo()) {
|
if (!$document->getCorrectionInfo()) {
|
||||||
throw new AtolCorrectionInfoException();
|
throw new AtolCorrectionInfoException();
|
||||||
}
|
}
|
||||||
$document->setClient(null)->setItems([]);
|
$document->setClient(null)->setItems([]);
|
||||||
return $this->registerDocument('buy_correction', 'correction', $document);
|
return $this->registerDocument('buy_correction', 'correction', $document, $external_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -364,6 +377,28 @@ class Kkt extends Client
|
|||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает текущий токен авторизации
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAuthToken(): ?string
|
||||||
|
{
|
||||||
|
return $this->auth_token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает заранее известный токен авторизации
|
||||||
|
*
|
||||||
|
* @param string|null $auth_token
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setAuthToken(?string $auth_token)
|
||||||
|
{
|
||||||
|
$this->auth_token = $auth_token;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сбрасывает настройки ККТ по умолчанию
|
* Сбрасывает настройки ККТ по умолчанию
|
||||||
*/
|
*/
|
||||||
@@ -374,9 +409,9 @@ class Kkt extends Client
|
|||||||
$this->kkt_config['prod']['pass'] = '';
|
$this->kkt_config['prod']['pass'] = '';
|
||||||
$this->kkt_config['prod']['url'] = 'https://online.atol.ru/possystem/v4';
|
$this->kkt_config['prod']['url'] = 'https://online.atol.ru/possystem/v4';
|
||||||
$this->kkt_config['prod']['callback_url'] = '';
|
$this->kkt_config['prod']['callback_url'] = '';
|
||||||
$this->kkt_config['test']['group'] = 'v4-online-atol-ru_4179';
|
$this->kkt_config['test']['group'] = TestEnvParams::GROUP;
|
||||||
$this->kkt_config['test']['login'] = 'v4-online-atol-ru';
|
$this->kkt_config['test']['login'] = TestEnvParams::LOGIN;
|
||||||
$this->kkt_config['test']['pass'] = 'iGFFuihss';
|
$this->kkt_config['test']['pass'] = TestEnvParams::PASSWORD;
|
||||||
$this->kkt_config['test']['url'] = 'https://testonline.atol.ru/possystem/v4';
|
$this->kkt_config['test']['url'] = 'https://testonline.atol.ru/possystem/v4';
|
||||||
$this->kkt_config['test']['callback_url'] = '';
|
$this->kkt_config['test']['callback_url'] = '';
|
||||||
}
|
}
|
||||||
@@ -390,7 +425,7 @@ class Kkt extends Client
|
|||||||
{
|
{
|
||||||
$headers['Content-type'] = 'application/json; charset=utf-8';
|
$headers['Content-type'] = 'application/json; charset=utf-8';
|
||||||
if ($this->getAuthToken()) {
|
if ($this->getAuthToken()) {
|
||||||
$headers['Token'] = $this->auth_token;
|
$headers['Token'] = $this->getAuthToken();
|
||||||
}
|
}
|
||||||
return $headers;
|
return $headers;
|
||||||
}
|
}
|
||||||
@@ -429,6 +464,7 @@ class Kkt extends Client
|
|||||||
* @param mixed $data Данные для передачи
|
* @param mixed $data Данные для передачи
|
||||||
* @param array|null $options Параметры Guzzle
|
* @param array|null $options Параметры Guzzle
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
* @see https://guzzle.readthedocs.io/en/latest/request-options.html
|
* @see https://guzzle.readthedocs.io/en/latest/request-options.html
|
||||||
*/
|
*/
|
||||||
protected function sendAtolRequest(string $http_method, string $api_method, $data = null, array $options = null)
|
protected function sendAtolRequest(string $http_method, string $api_method, $data = null, array $options = null)
|
||||||
@@ -449,6 +485,7 @@ class Kkt extends Client
|
|||||||
* Производит авторизацию на ККТ и получает токен доступа для дальнейших HTTP-запросов
|
* Производит авторизацию на ККТ и получает токен доступа для дальнейших HTTP-запросов
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
protected function auth()
|
protected function auth()
|
||||||
{
|
{
|
||||||
@@ -468,36 +505,33 @@ class Kkt extends Client
|
|||||||
/**
|
/**
|
||||||
* Отправляет документ на регистрацию
|
* Отправляет документ на регистрацию
|
||||||
*
|
*
|
||||||
* @param string $api_method Метод API
|
* @param string $api_method Метод API
|
||||||
* @param string $type Тип документа: receipt, correction
|
* @param string $type Тип документа: receipt, correction
|
||||||
* @param \AtolOnline\Entities\Document $document Объект документа
|
* @param \AtolOnline\Entities\Document $document Объект документа
|
||||||
|
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
|
||||||
* @return \AtolOnline\Api\KktResponse
|
* @return \AtolOnline\Api\KktResponse
|
||||||
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
|
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException
|
||||||
* @throws \Exception
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||||
*/
|
*/
|
||||||
protected function registerDocument(string $api_method, string $type, Document $document)
|
protected function registerDocument(string $api_method, string $type, Document $document, ?string $external_id = null)
|
||||||
{
|
{
|
||||||
$type = trim($type);
|
$type = trim($type);
|
||||||
if (!in_array($type, ['receipt', 'correction'])) {
|
if (!in_array($type, ['receipt', 'correction'])) {
|
||||||
throw new AtolWrongDocumentTypeException($type);
|
throw new AtolWrongDocumentTypeException($type);
|
||||||
}
|
}
|
||||||
$this->auth();
|
$this->auth();
|
||||||
$data = [
|
if ($this->isTestMode()) {
|
||||||
'timestamp' => date('d.m.y H:i:s'),
|
$document->setCompany(($document->getCompany() ?: new Company())
|
||||||
'external_id' => Uuid::uuid4()->toString(),
|
->setInn(TestEnvParams::INN)
|
||||||
'service' => ['callback_url' => $this->getCallbackUrl()],
|
->setSno(TestEnvParams::SNO)
|
||||||
$type => $document,
|
->setPaymentAddress(TestEnvParams::PAYMENT_ADDRESS));
|
||||||
];
|
}
|
||||||
|
$data['timestamp'] = date('d.m.y H:i:s');
|
||||||
|
$data['external_id'] = $external_id ?: Uuid::uuid4()->toString();
|
||||||
|
$data[$type] = $document;
|
||||||
|
if ($this->getCallbackUrl()) {
|
||||||
|
$data['service'] = ['callback_url' => $this->getCallbackUrl()];
|
||||||
|
}
|
||||||
return $this->sendAtolRequest('POST', trim($api_method), $data);
|
return $this->sendAtolRequest('POST', trim($api_method), $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Возвращает текущий токен авторизации
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function getAuthToken()
|
|
||||||
{
|
|
||||||
return $this->auth_token;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,9 +81,9 @@ class KktResponse implements JsonSerializable
|
|||||||
/**
|
/**
|
||||||
* Возвращает объект результата запроса
|
* Возвращает объект результата запроса
|
||||||
*
|
*
|
||||||
* @return \stdClass
|
* @return stdClass|null
|
||||||
*/
|
*/
|
||||||
public function getContent(): stdClass
|
public function getContent(): ?stdClass
|
||||||
{
|
{
|
||||||
return $this->content;
|
return $this->content;
|
||||||
}
|
}
|
||||||
|
|||||||
49
src/AtolOnline/Constants/TestEnvParams.php
Normal file
49
src/AtolOnline/Constants/TestEnvParams.php
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) Антон Аксенов (aka Anthony Axenov)
|
||||||
|
*
|
||||||
|
* This code is licensed under MIT.
|
||||||
|
* Этот код распространяется по лицензии MIT.
|
||||||
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace AtolOnline\Constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Константы, определяющие параметры тестовой среды
|
||||||
|
*
|
||||||
|
* @see https://online.atol.ru/files/ffd/test_sreda.txt
|
||||||
|
* @package AtolOnline\Constants
|
||||||
|
*/
|
||||||
|
class TestEnvParams
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Логин
|
||||||
|
*/
|
||||||
|
const LOGIN = 'v4-online-atol-ru';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Пароль
|
||||||
|
*/
|
||||||
|
const PASSWORD = 'iGFFuihss';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Группа
|
||||||
|
*/
|
||||||
|
const GROUP = 'v4-online-atol-ru_4179';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Система налогообложения
|
||||||
|
*/
|
||||||
|
const SNO = SnoTypes::OSN;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ИНН
|
||||||
|
*/
|
||||||
|
const INN = '5544332219';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Адрес места расчётов
|
||||||
|
*/
|
||||||
|
const PAYMENT_ADDRESS = 'https://v4.online.atol.ru';
|
||||||
|
}
|
||||||
@@ -199,9 +199,9 @@ class Document extends Entity
|
|||||||
/**
|
/**
|
||||||
* Возвращает заданного клиента (покупателя)
|
* Возвращает заданного клиента (покупателя)
|
||||||
*
|
*
|
||||||
* @return Client
|
* @return Client|null
|
||||||
*/
|
*/
|
||||||
public function getClient(): Client
|
public function getClient(): ?Client
|
||||||
{
|
{
|
||||||
return $this->client;
|
return $this->client;
|
||||||
}
|
}
|
||||||
@@ -221,9 +221,9 @@ class Document extends Entity
|
|||||||
/**
|
/**
|
||||||
* Возвращает заданную компанию (продавца)
|
* Возвращает заданную компанию (продавца)
|
||||||
*
|
*
|
||||||
* @return Company
|
* @return Company|null
|
||||||
*/
|
*/
|
||||||
public function getCompany(): Company
|
public function getCompany(): ?Company
|
||||||
{
|
{
|
||||||
return $this->company;
|
return $this->company;
|
||||||
}
|
}
|
||||||
@@ -388,7 +388,7 @@ class Document extends Entity
|
|||||||
$doc->payments->add($payment);
|
$doc->payments->add($payment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($array['total'] != $doc->calcTotal()) {
|
if (isset($array['total']) && $array['total'] != $doc->calcTotal()) {
|
||||||
throw new AtolException('Real total sum not equals to provided in JSON one');
|
throw new AtolException('Real total sum not equals to provided in JSON one');
|
||||||
}
|
}
|
||||||
return $doc;
|
return $doc;
|
||||||
@@ -401,16 +401,24 @@ class Document extends Entity
|
|||||||
*/
|
*/
|
||||||
public function jsonSerialize()
|
public function jsonSerialize()
|
||||||
{
|
{
|
||||||
$json['company'] = $this->getCompany()->jsonSerialize();// обязательно
|
if ($this->getCompany()) {
|
||||||
$json['payments'] = $this->payments->jsonSerialize(); // обязательно
|
$json['company'] = $this->getCompany()->jsonSerialize(); // обязательно
|
||||||
|
}
|
||||||
|
if ($this->getPayments()) {
|
||||||
|
$json['payments'] = $this->payments->jsonSerialize(); // обязательно
|
||||||
|
}
|
||||||
if ($this->getCashier()) {
|
if ($this->getCashier()) {
|
||||||
$json['cashier'] = $this->getCashier();
|
$json['cashier'] = $this->getCashier();
|
||||||
}
|
}
|
||||||
if ($this->getCorrectionInfo()) {
|
if ($this->getCorrectionInfo()) {
|
||||||
$json['correction_info'] = $this->getCorrectionInfo()->jsonSerialize(); // обязательно для коррекционных
|
$json['correction_info'] = $this->getCorrectionInfo()->jsonSerialize(); // обязательно для коррекционных
|
||||||
} else {
|
} else {
|
||||||
$json['client'] = $this->getClient()->jsonSerialize(); // обязательно для некоррекционных
|
if ($this->getClient()) {
|
||||||
$json['items'] = $this->items->jsonSerialize(); // обязательно для некоррекционных
|
$json['client'] = $this->getClient()->jsonSerialize(); // обязательно для некоррекционных
|
||||||
|
}
|
||||||
|
if ($this->getItems()) {
|
||||||
|
$json['items'] = $this->items->jsonSerialize(); // обязательно для некоррекционных
|
||||||
|
}
|
||||||
$json['total'] = $this->calcTotal(); // обязательно для некоррекционных
|
$json['total'] = $this->calcTotal(); // обязательно для некоррекционных
|
||||||
}
|
}
|
||||||
if ($this->getVats()) {
|
if ($this->getVats()) {
|
||||||
@@ -418,4 +426,4 @@ class Document extends Entity
|
|||||||
}
|
}
|
||||||
return $json;
|
return $json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class ItemArray extends Entity
|
|||||||
protected function validateCount(?array $items = null): bool
|
protected function validateCount(?array $items = null): bool
|
||||||
{
|
{
|
||||||
if ((!empty($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);
|
throw new AtolTooManyItemsException(count($items), self::MAX_COUNT);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\Api\SellSchema;
|
|
||||||
use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,6 +18,11 @@ use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
|||||||
*/
|
*/
|
||||||
class PaymentArray extends Entity
|
class PaymentArray extends Entity
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Максимальное количество элементов массива
|
||||||
|
*/
|
||||||
|
public const MAX_COUNT = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Payment[] Массив оплат
|
* @var Payment[] Массив оплат
|
||||||
*/
|
*/
|
||||||
@@ -99,9 +103,8 @@ class PaymentArray extends Entity
|
|||||||
*/
|
*/
|
||||||
protected function validateCount(?array $payments = null): bool
|
protected function validateCount(?array $payments = null): bool
|
||||||
{
|
{
|
||||||
$max_items = SellSchema::get()->properties->receipt->properties->payments->maxItems;
|
if ((!empty($payments) && count($payments) >= self::MAX_COUNT) || count($this->payments) >= self::MAX_COUNT) {
|
||||||
if ((!empty($payments) && count($payments) >= $max_items) || count($this->payments) >= $max_items) {
|
throw new AtolTooManyPaymentsException(count($payments), self::MAX_COUNT);
|
||||||
throw new AtolTooManyPaymentsException($max_items);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
use AtolOnline\Api\SellSchema;
|
|
||||||
use AtolOnline\Exceptions\AtolTooManyVatsException;
|
use AtolOnline\Exceptions\AtolTooManyVatsException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,6 +18,11 @@ use AtolOnline\Exceptions\AtolTooManyVatsException;
|
|||||||
*/
|
*/
|
||||||
class VatArray extends Entity
|
class VatArray extends Entity
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Максимальное количество элементов массива
|
||||||
|
*/
|
||||||
|
public const MAX_COUNT = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Vat[] Массив ставок НДС
|
* @var Vat[] Массив ставок НДС
|
||||||
*/
|
*/
|
||||||
@@ -103,9 +107,8 @@ class VatArray extends Entity
|
|||||||
*/
|
*/
|
||||||
protected function validateCount(?array $vats = null): bool
|
protected function validateCount(?array $vats = null): bool
|
||||||
{
|
{
|
||||||
$max_items = SellSchema::get()->properties->receipt->properties->vats->maxItems;
|
if ((!empty($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) >= self::MAX_COUNT) {
|
||||||
if ((!empty($vats) && count($vats) >= $max_items) || count($this->vats) >= $max_items) {
|
throw new AtolTooManyVatsException(count($vats), self::MAX_COUNT);
|
||||||
throw new AtolTooManyVatsException(count($vats), $max_items);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,22 @@ class BasicTestCase extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function tearDown(): void
|
public function tearDown(): void
|
||||||
{
|
{
|
||||||
|
|
||||||
//parent::tearDown();
|
//parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает случайную строку указанной длины
|
||||||
|
*
|
||||||
|
* @param int $length
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function randomString($length = 8)
|
||||||
|
{
|
||||||
|
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
|
$string = '';
|
||||||
|
for ($i = 0; $i < $length; $i++) {
|
||||||
|
$string .= $characters[mt_rand(0, strlen($characters) - 1)];
|
||||||
|
}
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -85,10 +85,7 @@ class ItemTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует установку ставки НДС разными путями
|
* Тестирует установку ставки НДС разными путями
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testSetVat()
|
public function testSetVat()
|
||||||
{
|
{
|
||||||
@@ -102,25 +99,21 @@ class ItemTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинном наименовании
|
* Тестирует исключение о слишком длинном наименовании
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolNameTooLongException()
|
public function testAtolNameTooLongException()
|
||||||
{
|
{
|
||||||
$item = new Item();
|
$item = new Item();
|
||||||
$this->expectException(AtolNameTooLongException::class);
|
$this->expectException(AtolNameTooLongException::class);
|
||||||
$item->setName('Банан Банан Банан Банан Банан Банан Банан Банан Банан Банан Банан Банан');
|
$item->setName(self::randomString(130));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком высоком количестве
|
* Тестирует исключение о слишком высоком количестве
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
* @throws \AtolOnline\Exceptions\AtolTooManyException
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
* @throws \AtolOnline\Exceptions\AtolUnitTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolQuantityTooHighException()
|
public function testAtolQuantityTooHighException()
|
||||||
{
|
{
|
||||||
@@ -132,10 +125,7 @@ class ItemTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком высокой цене
|
* Тестирует исключение о слишком высокой цене
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolPriceTooHighException()
|
public function testAtolPriceTooHighException()
|
||||||
{
|
{
|
||||||
@@ -147,11 +137,7 @@ class ItemTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинных польз. данных
|
* Тестирует исключение о слишком длинных польз. данных
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolUserdataTooLongException
|
* @throws \AtolOnline\Exceptions\AtolUserdataTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolUserdataTooLongException()
|
public function testAtolUserdataTooLongException()
|
||||||
{
|
{
|
||||||
@@ -163,10 +149,7 @@ class ItemTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинной единице измерения
|
* Тестирует исключение о слишком длинной единице измерения
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolNameTooLongException
|
* @throws \AtolOnline\Exceptions\AtolUnitTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolPriceTooHighException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolTooManyException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolUnitTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolUnitTooLongException()
|
public function testAtolUnitTooLongException()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,12 +22,6 @@ class ClientTest extends BasicTestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Тестирует установку параметров
|
* Тестирует установку параметров
|
||||||
*
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
{
|
{
|
||||||
@@ -48,30 +42,18 @@ class ClientTest extends BasicTestCase
|
|||||||
* Тестирует исключение о слишком длинном имени
|
* Тестирует исключение о слишком длинном имени
|
||||||
*
|
*
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolNameTooLongException()
|
public function testAtolNameTooLongException()
|
||||||
{
|
{
|
||||||
$customer = new Client();
|
$customer = new Client();
|
||||||
$this->expectException(AtolNameTooLongException::class);
|
$this->expectException(AtolNameTooLongException::class);
|
||||||
$customer->setName('John Doe John Doe John Doe John Doe John Doe '.
|
$customer->setName(self::randomString(257));
|
||||||
'John Doe John Doe John Doe John Doe John Doe John Doe John Doe John '.
|
|
||||||
'Doe John Doe John Doe John Doe John DoeJohn Doe John Doe John Doe '.
|
|
||||||
'John Doe John Doe John Doe John Doe John Doe John Doe John Doe John '.
|
|
||||||
'Doe John Doe John Doe John Doe John Doe John Doe John Doe');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинном телефоне
|
* Тестирует исключение о слишком длинном телефоне
|
||||||
*
|
*
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolPhoneTooLongException()
|
public function testAtolPhoneTooLongException()
|
||||||
{
|
{
|
||||||
@@ -84,42 +66,32 @@ class ClientTest extends BasicTestCase
|
|||||||
* Тестирует исключение о слишком длинной почте
|
* Тестирует исключение о слишком длинной почте
|
||||||
*
|
*
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolEmailTooLongException()
|
public function testAtolEmailTooLongException()
|
||||||
{
|
{
|
||||||
$customer = new Client();
|
$customer = new Client();
|
||||||
$this->expectException(AtolEmailTooLongException::class);
|
$this->expectException(AtolEmailTooLongException::class);
|
||||||
$customer->setEmail('johnjohnjohnjohnjohnjohndoedoedoedoe@exampleexampleexampleexample.com');
|
$customer->setEmail(self::randomString(65));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о некорректной почте
|
* Тестирует исключение о некорректной почте
|
||||||
*
|
*
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolEmailValidateException()
|
public function testAtolEmailValidateException()
|
||||||
{
|
{
|
||||||
$customer = new Client();
|
$customer = new Client();
|
||||||
$this->expectException(AtolEmailValidateException::class);
|
$this->expectException(AtolEmailValidateException::class);
|
||||||
$customer->setEmail('John Doe');
|
$customer->setEmail(self::randomString(15));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о некорректной длине ИНН
|
* Тестирует исключение о некорректной длине ИНН
|
||||||
*
|
*
|
||||||
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolNameTooLongException
|
|
||||||
* @throws \AtolOnline\Exceptions\AtolPhoneTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolInnWrongLengthException()
|
public function testAtolInnWrongLengthException()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,11 +22,6 @@ class CompanyTest extends BasicTestCase
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Тестирует установку параметров через конструктор
|
* Тестирует установку параметров через конструктор
|
||||||
*
|
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
{
|
{
|
||||||
@@ -46,10 +41,7 @@ class CompanyTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о некорректной длине ИНН
|
* Тестирует исключение о некорректной длине ИНН
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolInnWrongLengthException
|
* @throws \AtolOnline\Exceptions\AtolInnWrongLengthException
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolInnWrongLengthException()
|
public function testAtolInnWrongLengthException()
|
||||||
{
|
{
|
||||||
@@ -62,49 +54,38 @@ class CompanyTest extends BasicTestCase
|
|||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинном платёжном адресе
|
* Тестирует исключение о слишком длинном платёжном адресе
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
* @throws \AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailTooLongException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailValidateException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolPaymentAddressTooLongException()
|
public function testAtolPaymentAddressTooLongException()
|
||||||
{
|
{
|
||||||
$company = new Company();
|
$company = new Company();
|
||||||
$this->expectException(AtolPaymentAddressTooLongException::class);
|
$this->expectException(AtolPaymentAddressTooLongException::class);
|
||||||
$company->setPaymentAddress('John Doe John Doe John Doe John Doe '.
|
$company->setPaymentAddress(self::randomString(257));
|
||||||
'John Doe John Doe John Doe John Doe John Doe John Doe John Doe John Doe John '.
|
|
||||||
'Doe John Doe John Doe John Doe John DoeJohn Doe John Doe John Doe John Doe '.
|
|
||||||
'John Doe John Doe John Doe John Doe John Doe John Doe John Doe John Doe John '.
|
|
||||||
'Doe John Doe John Doe John Doe John Doe');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о слишком длинной почте
|
* Тестирует исключение о слишком длинной почте
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailTooLongException
|
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailValidateException
|
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
||||||
* @throws AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolEmailTooLongException()
|
public function testAtolEmailTooLongException()
|
||||||
{
|
{
|
||||||
$company = new Company();
|
$company = new Company();
|
||||||
$this->expectException(AtolEmailTooLongException::class);
|
$this->expectException(AtolEmailTooLongException::class);
|
||||||
$company->setEmail('johnjohnjohnjohnjohnjohndoedoedoedoe@exampleexampleexampleexample.com');
|
$company->setEmail(self::randomString(65));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тестирует исключение о некорректной почте
|
* Тестирует исключение о некорректной почте
|
||||||
*
|
*
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailValidateException
|
* @throws \AtolOnline\Exceptions\AtolEmailTooLongException
|
||||||
* @throws AtolOnline\Exceptions\AtolEmailTooLongException
|
* @throws \AtolOnline\Exceptions\AtolEmailValidateException
|
||||||
* @throws AtolOnline\Exceptions\AtolInnWrongLengthException
|
|
||||||
* @throws AtolOnline\Exceptions\AtolPaymentAddressTooLongException
|
|
||||||
*/
|
*/
|
||||||
public function testAtolEmailValidateException()
|
public function testAtolEmailValidateException()
|
||||||
{
|
{
|
||||||
$company = new Company();
|
$company = new Company();
|
||||||
$this->expectException(AtolEmailValidateException::class);
|
$this->expectException(AtolEmailValidateException::class);
|
||||||
$company->setEmail('John Doe');
|
$company->setEmail(self::randomString(15));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user