Compare commits

...

15 Commits

Author SHA1 Message Date
anthony cc944a1dbb Бейджи в README 2021-05-25 11:48:37 +08:00
anthony bb05f0c752 Merge branch 'master' into dev 2021-05-25 00:58:53 +08:00
anthony 1c76608468 Github Actions разграничены для веток master и dev 2021-05-24 23:40:46 +08:00
anthony bd6e208216 Обновление composer.json и первичных текстовок 2021-05-24 23:00:34 +08:00
anthony 7b4411ec01 Обновление зависимостей 2021-05-24 22:45:03 +08:00
anthony 23fa1f7eb9 Update FUNDING.yml 2021-05-24 12:38:39 +08:00
anthony 929bf84c97 Merge pull request #3 from komantnick/develop
Исправление багов при отправке сырого JSON для чека коррекции с исправлениями
2021-05-24 10:55:09 +08:00
Nikita Saiapin 5c1c4dba12 Фикс размера НДС 2021-05-23 22:35:45 +08:00
Nikita Saiapin 4c40bebe14 Исправление багов при отправке сырого JSON чека коррекции 2021-05-22 21:48:12 +08:00
anthony d321205ac9 Фикс выброса AtolAuthFailedException 2020-10-13 02:06:13 +08:00
anthony 387e6e445f Удалён сервер discord и его упоминание в README 2020-06-14 13:52:07 +08:00
anthony 3bd043bde7 Kkt::setCallbackUrl() - Фикс проверки callback_url по регулярке 2020-06-14 13:44:35 +08:00
anthony 7c8ee85b89 Фикс регулярки callback_url 2020-06-14 13:44:04 +08:00
anthony aab68646e6 Фикс сообщений в исключениях 2020-06-14 13:43:32 +08:00
anthony e1fb74ac01 Доудалено упоминание о Schemas 2020-06-07 20:28:14 +08:00
15 changed files with 747 additions and 341 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
custom: ['https://money.yandex.ru/to/41001685237530']
custom: ['https://yoomoney.ru/to/41001685237530']
+25
View File
@@ -0,0 +1,25 @@
name: Dev build
on:
push:
branches: [ dev ]
pull_request:
branches: [ dev ]
jobs:
Tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Validate composer.json and composer.lock
uses: php-actions/composer@40-env
with:
version: 2
php_version: 7.4
only_args: --prefer-dist --no-progress
- name: Run phpunit tests
uses: php-actions/phpunit@v8
with:
configuration: ./phpunit.xml
+25
View File
@@ -0,0 +1,25 @@
name: Master build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
Tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Validate composer.json and composer.lock
uses: php-actions/composer@40-env
with:
version: 2
php_version: 7.4
only_args: --prefer-dist --no-progress
- name: Run phpunit tests
uses: php-actions/phpunit@v8
with:
configuration: ./phpunit.xml
-26
View File
@@ -1,26 +0,0 @@
name: Build
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Validate composer.json and composer.lock
run: composer validate
- name: Install composer dependencies
run: composer install --prefer-dist --no-progress --no-suggest
- name: Run phpunit tests
uses: php-actions/phpunit@v1.0.0
with:
# Configuration file location
config: ./phpunit.xml
+3 -4
View File
@@ -1,6 +1,7 @@
# АТОЛ Онлайн
![Build](https://github.com/anthonyaxenov/atol-online/workflows/Build/badge.svg?branch=master)
[![Master build](https://github.com/anthonyaxenov/atol-online/actions/workflows/master.yml/badge.svg)](https://github.com/anthonyaxenov/atol-online/actions/workflows/master.yml)
[![Dev build](https://github.com/anthonyaxenov/atol-online/actions/workflows/dev.yml/badge.svg)](https://github.com/anthonyaxenov/atol-online/actions/workflows/dev.yml)
Библиотека для фискализации чеков по 54-ФЗ через [облачную ККТ АТОЛ](https://online.atol.ru/).
@@ -10,7 +11,7 @@
## Системные требования
* PHP 7.2+
* PHP 7.4+
* composer
* php-json
@@ -103,8 +104,6 @@
## Дополнительные ресурсы
**Discord-сервер для обсуждения этой библиотеки: [discord.gg/mFYTQmp](https://discord.gg/mFYTQmp)**
Функционал, находящийся в разработке: [ROADMAP.md](ROADMAP.md)
Официальные ресурсы АТОЛ Онлайн:
+2 -16
View File
@@ -25,7 +25,8 @@
- [ ] Тесты для регистрации документа расхода
- [ ] Тесты для регистрации документа возврата расхода
- [ ] Тесты для регистрации документа коррекции расхода
- [ ] Вообще все расчёты вообще везде должны быть строго в копейках. Рубли (дроби) должны быть только в JSON-представлениях
- [ ] Вообще все расчёты вообще везде должны быть строго в копейках.
Рубли (дроби) должны быть только в JSON-представлениях
## Поддержка методов API (регистрация документов)
@@ -63,18 +64,3 @@
- [x] Пoддержка `correction.vats` (обязательный)
- [x] Пoддержка `correction.correction_info` (обязательный)
- [x] Пoддержка `correction.cashier`
## Не будут реализовываться
### Валидация генерируемых документов согласно актуальной схемы API
- Валидатор схемы для документов прихода, возврата прихода, расхода, возврата расхода
- Валидатор схемы для документов коррекции прихода, коррекции расхода
1. Отказ обусловлен скоростью выполнения.
Базовая реализация, которая была начата, подразумевала синглтон, который кешировал однажды полученную схему.
Практика показала, что этот единичный запрос может существенно тормозить работу сервера и в течение долгого времени
не отдавать ответ клиенту.
2. Такая валидация подходит в том случае, если бы при разработке использовалась концепция IoC.
До версии пакета 2.0.0 таких серьёзных имзенений не планируется.
+14 -4
View File
@@ -5,16 +5,21 @@
"type": "library",
"keywords": [
"54-fz",
"54-фз",
"kkt",
"ккт",
"e-commerce",
"cash",
"cash register",
"payment",
"payment system",
"atol",
"atol-online"
"атол",
"atol-online",
"атол онлайн"
],
"homepage": "https://github.com/anthonyaxenov/atol-online",
"readme": "https://github.com/anthonyaxenov/atol-online/blob/master/README.md",
"authors": [
{
"name": "Anthony Axenov",
@@ -25,10 +30,16 @@
"support": {
"source": "https://github.com/anthonyaxenov/atol-online",
"issues": "https://github.com/anthonyaxenov/atol-online/issues",
"chat": "https://discord.gg/mFYTQmp"
"docs": "https://github.com/anthonyaxenov/atol-online/blob/master/docs/readme.md"
},
"funding": [
{
"type": "Yoomoney",
"url": "https://yoomoney.ru/to/41001685237530"
}
],
"require": {
"php": ">=7.2",
"php": ">=7.4",
"ext-json": "*",
"guzzlehttp/guzzle": "^6.5",
"psr/log": "^1.1",
@@ -40,7 +51,6 @@
"autoload": {
"classmap": [
"src/AtolOnline/Api/",
"src/AtolOnline/Api/Schemas/",
"src/AtolOnline/Exceptions/",
"src/AtolOnline/Entities/",
"src/AtolOnline/Traits/",
Generated
+646 -281
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -183,8 +183,8 @@ class Kkt extends Client
{
if (valid_strlen($url) > Constraints::MAX_LENGTH_CALLBACK_URL) {
throw new AtolCallbackUrlTooLongException($url, Constraints::MAX_LENGTH_CALLBACK_URL);
} elseif (preg_match(Constraints::PATTERN_CALLBACK_URL, $url)) {
throw new AtolInvalidCallbackUrlException();
} elseif (!preg_match(Constraints::PATTERN_CALLBACK_URL, $url)) {
throw new AtolInvalidCallbackUrlException('Callback URL not matches with pattern');
}
$this->kkt_config[$this->isTestMode() ? 'test' : 'prod']['callback_url'] = $url;
return $this;
+1 -1
View File
@@ -72,5 +72,5 @@ class Constraints
/**
* Регулярное выражание для валидации строки Callback URL
*/
const PATTERN_CALLBACK_URL = "^http(s?)\:\/\/[0-9a-zA-Zа-яА-Я]([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-\.\?\,\'\/\\\+&=%\$#_]*)?$";
const PATTERN_CALLBACK_URL = "/^http(s?)\:\/\/[0-9a-zA-Zа-яА-Я]([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-\.\?\,\'\/\\\+&=%\$#_]*)?$/";
}
+2 -2
View File
@@ -68,7 +68,7 @@ class CorrectionInfo extends Entity
*/
public function getNumber(): ?string
{
return $this->base_name;
return $this->base_number;
}
/**
@@ -165,7 +165,7 @@ class CorrectionInfo extends Entity
'type' => $this->getType() ?? '', // обязателен
'base_date' => $this->getDate() ?? '', // обязателен
'base_number' => $this->getNumber() ?? '', // обязателен
'base_name' => $this->getName() ?? '' // обязателен
'base_name' => $this->getName() ?? '' // не обязателен
];
}
}
+20
View File
@@ -362,6 +362,14 @@ class Document extends Entity
$array['client']['inn'] ?? null
));
}
if (isset($array['correction_info'])) {
$doc->setCorrectionInfo(new CorrectionInfo(
$array['correction_info']['type'] ?? null,
$array['correction_info']['base_date'] ?? null,
$array['correction_info']['base_number'] ?? null,
$array['correction_info']['base_name'] ?? null,
));
}
if (isset($array['items'])) {
foreach ($array['items'] as $ar_item) {
$item = new Item(
@@ -391,6 +399,18 @@ class Document extends Entity
$doc->payments->add($payment);
}
}
if (isset($array['vats'])) {
foreach ($array['vats'] as $vat_payment) {
$vat = new Vat();
if (isset($vat_payment['type'])) {
$vat->setType($vat_payment['type']);
}
if (isset($vat_payment['sum'])) {
$vat->setSum($vat_payment['sum']);
}
$doc->vats->add($vat);
}
}
if (isset($array['total']) && $array['total'] != $doc->calcTotal()) {
throw new AtolException('Real total sum not equals to provided in JSON one');
}
+2 -1
View File
@@ -50,7 +50,8 @@ class Vat extends Entity
}
/**
* Устанавливает размер НДС от суммы в копейках
* Устанавливает:
* размер НДС от суммы в копейках
*
* @param string $type Тип ставки НДС
* @param int $kopeks Копейки
@@ -33,7 +33,7 @@ class AtolAuthFailedException extends Exception
$message = $last_response->isValid()
? $message
: '['.$last_response->error->code.'] '.$last_response->error->text.
'. ERROR_ID: '.$last_response->error->error_ID.
'. ERROR_ID: '.$last_response->error->error_id.
'. TYPE: '.$last_response->error->type;
$code = $last_response->isValid() ? $code : $last_response->error->code;
parent::__construct($message, $code, $previous);
@@ -33,6 +33,7 @@ class AtolException extends Exception
*/
public function __construct($message = "", $code = 0, Throwable $previous = null)
{
$message = $message ?: $this->message;
if ($this->getFfdTags()) {
$message .= ' [FFD tags: '.implode(', ', $this->getFfdTags()).']';
}