From 8d9f2182800c0de52510ae461c4f67deebe202b7 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Sun, 7 Jun 2020 19:39:26 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=BE=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D1=8B=20=D0=BF=D0=BE=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B8=20roa?= =?UTF-8?q?dmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ROADMAP.md | 17 +++++++++++++++-- docs/client.md | 4 ++-- docs/company.md | 2 +- docs/documents.md | 2 +- docs/kkt.md | 25 ++++++++++++++++++++----- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index df8300d..153b5ce 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -26,8 +26,6 @@ - [ ] Тесты для регистрации документа возврата расхода - [ ] Тесты для регистрации документа коррекции расхода - [ ] Вообще все расчёты вообще везде должны быть строго в копейках. Рубли (дроби) должны быть только в JSON-представлениях -- [ ] Валидатор схемы для документов прихода, возврата прихода, расхода, возврата расхода -- [ ] Валидатор схемы для документов коррекции прихода, коррекции расхода ## Поддержка методов API (регистрация документов) @@ -65,3 +63,18 @@ - [x] Пoддержка `correction.vats` (обязательный) - [x] Пoддержка `correction.correction_info` (обязательный) - [x] Пoддержка `correction.cashier` + +## Не будут реализовываться + +### Валидация генерируемых документов согласно актуальной схемы API + +- Валидатор схемы для документов прихода, возврата прихода, расхода, возврата расхода +- Валидатор схемы для документов коррекции прихода, коррекции расхода + +1. Отказ обусловлен скоростью выполнения. +Базовая реализация, которая была начата, подразумевала синглтон, который кешировал однажды полученную схему. +Практика показала, что этот единичный запрос может существенно тормозить работу сервера и в течение долгого времени +не отдавать ответ клиенту. + +2. Такая валидация подходит в том случае, если бы при разработке использовалась концепция IoC. +До версии пакета 2.0.0 таких серьёзных имзенений не планируется. diff --git a/docs/client.md b/docs/client.md index 85c198c..d22484a 100644 --- a/docs/client.md +++ b/docs/client.md @@ -46,10 +46,10 @@ $customer = (new AtolOnline\Entities\Client()) * `AtolEmailValidateException` (если email невалиден). Метод `setInn()` чистит входную строку от всех символов, кроме цифр, и проверяет длину (либо 10, либо 12 цифр). -Выбрасывает исключение `AtolInnWrongLengthException` (если длина строка ИНН некорректна). +Выбрасывает исключение `AtolInnWrongLengthException` (если длина ИНН некорректна). Метод `setName()` проверяет входную строку на длину (до 256 символов). -Выбрасывает исключение `AtolNameTooLongException` (если слишком длинное наименование). +Выбрасывает исключение `AtolNameTooLongException` (если слишком длинное имя). Метод `setPhone()` чистит входную строку от всех символов, кроме цифр и знака `+`, и проверяет длину (до 64 символов). Выбрасывает исключение `AtolPhoneTooLongException` (если слишком длинный номер телефона). diff --git a/docs/company.md b/docs/company.md index 752c3a4..912bd59 100644 --- a/docs/company.md +++ b/docs/company.md @@ -46,7 +46,7 @@ $company = (new AtolOnline\Entities\Company()) * `AtolEmailValidateException` (если email невалиден). Метод `setInn()` чистит входную строку от всех символов, кроме цифр, и проверяет длину (либо 10, либо 12 цифр). -Выбрасывает исключение `AtolInnWrongLengthException` (если длина строка ИНН некорректна). +Выбрасывает исключение `AtolInnWrongLengthException` (если длина ИНН некорректна). Метод `setPaymentAddress()` проверяет длину (до 256 символов). Выбрасывает исключение `AtolPaymentAddressTooLongException` (если слишком длинный адрес места расчётов). diff --git a/docs/documents.md b/docs/documents.md index 59f1e11..1d92174 100644 --- a/docs/documents.md +++ b/docs/documents.md @@ -164,4 +164,4 @@ $json_array = $doc->jsonSerialize(); --- -[Вернуться к содержанию](readme.md) \ No newline at end of file +[Вернуться к содержанию](readme.md) diff --git a/docs/kkt.md b/docs/kkt.md index c6acee8..060a364 100644 --- a/docs/kkt.md +++ b/docs/kkt.md @@ -49,6 +49,7 @@ $kkt->getGroup(); Эти параметры нужно задать [объекту компании](/docs/company.md), который будет передаваться в документах через эту ККТ. + ## Тестовый режим На самом деле, в АТОЛ Онлайн нет понятия *тестовая операция* или чего-то в этом духе. @@ -85,10 +86,10 @@ $kkt->setTestMode(false); // выключить 3. пп. 1 и 2 в любом случае скажутся на ваших финансовых отчётах; 4. вся ответственность за пп. 1-3 и последствия ложится только на вас. -## Авторизация ККТ +## Авторизация на ККТ -Перед первым запросом на ККТ происходит авторизация на сервере по логину и паролю. -В ответ приходит авторизационный токен, срок жизни коего равен 24 часам. +Перед первым запросом на ККТ происходит аутентификация на сервере по логину и паролю. +В ответ приходит авторизационный токен, срок жизни коего равен **24 часам**. После первой успешной операции возможно получить этот токен следующим образом: ```php @@ -98,7 +99,7 @@ $kkt->getAuthToken(); // вернёт строку длиной 128 символ Этот токен можно сохранить и переиспользовать в течение всего срока его жизни. Спустя это время следует получить новый токен. -Однажды полученный токен, то для дальнейшего использования следует указывать его следующим образом: +Для дальнейшего использования однажды полученный токен следует указывать следующим образом: ```php $kkt->setAuthToken($token_string); @@ -153,6 +154,9 @@ $result = $kkt->sellCorrection($document); $result = $kkt->buyCorrection($document); ``` +Любой из перечисленных выше шести методов может выбросить исключение `AtolAuthFailedException` при ошибке +аутентификации или авторизации. + ### Собственный идентификатор документа Каждый документ, переданный на ККТ для регистрации, всегда имеет свой идентификатор, абсолютно уникальный среди всех @@ -185,6 +189,17 @@ $kkt->setCallbackUrl('http://example.com/process-kkt-result'); $kkt->getCallbackUrl(); ``` +Метод `setCallbackUrl()` проверяет входную строку на длину (до 256 символов) и валидность формата url по +регулярному выражению: + +``` +^http(s?)\:\/\/[0-9a-zA-Zа-яА-Я]([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-\.\?\,\'\/\\\+&=%$#_]*)?$ +``` + +Выбрасывает исключения: +* `AtolCallbackUrlTooLongException` (если слишком длинный url); +* `AtolInvalidCallbackUrlException` (если url невалиден). + ## Обработка результата регистрации Методы `sell()`, `sellRefund()`, `sellCorrection()`, `buy()`, `buyRefund()` и `buyCorrection()` возвращают объект `AtolOnline\Api\KktResponse`. @@ -194,7 +209,7 @@ $kkt->getCallbackUrl(); Этот объект содержит в себе HTTP-код ответа, массив заголовков и JSON-декодированные данные тела ответа. ```php -$result = $kkt->getLastResponse(); +$result = $kkt->getLastResponse(); // вернёт последний ответ от API $headers = $result->getHeaders(); // вернёт заголовки $code = $result->getCode(); // вернёт код ответа $body = $result->getContent(); // вернёт JSON-декодированное тело ответа