4 Commits

Author SHA1 Message Date
7558cb6638 Убрал схему Атола валидации количества НДС, оплат и предметов 2020-06-01 03:58:31 +08:00
d3fe2cba9a Удалена перезапись компании в тестовом режиме. Новый метод Kkt::setAuthToken() 2020-06-01 03:26:25 +08:00
e70a65fa44 Улучшен метод Kkt::registerDocument
+ теперь принимает любой собственного external_id, если пусто - сгенерирует uuid
* исправлен недостаток полей компании в тестовом режиме
* уточнения phpdoc
2020-05-30 04:29:44 +08:00
ba5166f2cf Метод Kkt::getAuthToken() теперь открыт 2020-05-30 03:45:06 +08:00
4 changed files with 50 additions and 38 deletions

View File

@@ -9,8 +9,7 @@
namespace AtolOnline\Api; namespace AtolOnline\Api;
use AtolOnline\{Entities\Company, use AtolOnline\{Entities\Document,
Entities\Document,
Exceptions\AtolCorrectionInfoException, Exceptions\AtolCorrectionInfoException,
Exceptions\AtolInvalidUuidException, Exceptions\AtolInvalidUuidException,
Exceptions\AtolKktLoginEmptyException, Exceptions\AtolKktLoginEmptyException,
@@ -365,6 +364,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;
}
/** /**
* Сбрасывает настройки ККТ по умолчанию * Сбрасывает настройки ККТ по умолчанию
*/ */
@@ -471,42 +492,27 @@ 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();
if ($this->isTestMode()) { $data['timestamp'] = date('d.m.y H:i:s');
$document->setCompany((new Company()) $data['external_id'] = $external_id ?: Uuid::uuid4()->toString();
->setInn('5544332219') $data[$type] = $document;
->setPaymentAddress('https://v4.online.atol.ru') if ($this->getCallbackUrl()) {
); $data['service'] = ['callback_url' => $this->getCallbackUrl()];
} }
$data = [
'timestamp' => date('d.m.y H:i:s'),
'external_id' => Uuid::uuid4()->toString(),
'service' => ['callback_url' => $this->getCallbackUrl()],
$type => $document,
];
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;
}
} }

View File

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

View File

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

View File

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