ssitdikov / atol
ATOL PHP API Client. Данная библиотека предназначена для работы с сервисом АТОЛ Онлайн
Installs: 3 866
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 1
Forks: 6
Open Issues: 3
Requires
- php: >=7.1
- ext-json: *
- guzzlehttp/guzzle: ~6.0
Requires (Dev)
- codacy/coverage: ^1.4
- php-coveralls/php-coveralls: ^2.1
- phpmd/phpmd: ^2.6
- phpunit/phpcov: ^5.0
- phpunit/phpunit: ^7.5
README
АТОЛ Онлайн
О проекте
Данная библиотека предназначена для работы с сервисом АТОЛ Онлайн.
Установка
Предполагается установка с использованием composer
composer require ssitdikov/atol
Пример использования
Запрос токена
$client = new ApiClient(); try { /** * @var TokenResponse $token */ $token = $client->getToken( new TokenRequest('login', 'password') ); } catch (\Exception $e) { // smth with exception }
Операция продажи
//... $token = $client->getToken(); try { $uuid = '00001/11-2017'; $groupId = 'GroupId'; // Позиции чека $itemA = new Item('Товар 1', 1200.50, 1, Vat::TAX_NONE); $itemB = new Item('Товар 2', 3200.50, 1, Vat::TAX_NONE); $totalSum = 4401.00; // Виды оплат $paymentElectr = new Payment(Payment::PAYMENT_TYPE_ELECTR, 4400.00); $paymentCredit = new Payment(Payment::PAYMENT_TYPE_CREDIT, 1.00); // Налоги $vat = new Vat(Vat::TAX_VAT20, round($totalSum * 20 / 120, 2)); // Организация $companyINN = "1111111111"; // Адрес магазина // В случае мобильного приложения URL приложения в кабинете (см что указано в кабинете АТОЛ) $companyAddress = "test.mystore.dev"; $companyEmail = "company@mail.ru"; $company = new Company($companyINN, $companyAddress, $companyEmail, ReceiptSno::RECEIPT_SNO_OSN); // Покупатель $buyerEmail = "buyer@mail.ru"; $buyerPhone = "+79170123456"; $buyer = new Client($buyerEmail, $buyerPhone); // Формирование чека $receipt = new Receipt(); $receipt->setClient($buyer) ->setCompany($company) ->setItems([$itemA, $itemB]) ->setVats([$vat]) ->setPayments([$paymentElectr, $paymentCredit]); // Куда АТОЛу стучаться с результатом $callback_url = 'http://test.mystore.dev/callback/api/url'; $info = new Info($callback_url); /** * @var OperationResponse $operation */ $operation = $client->doOperation( new OperationRequest($groupId, OperationRequest::OPERATION_SELL, $uuid, $receipt, $info, $token) ); // Идентификатор фискального чека $uuidAtol = $operation->getUuid(); } catch (\Exception $e) { // ... }
Операция продажи через агента и поставщика
//... $token = $client->getToken(); try { $uuid = '00001/03-2022'; $groupId = 'group_code'; // Позиции чека $itemA = new Item('Товар 1', 1200.50, 1, Vat::TAX_NONE); $itemB = new Item('Товар 2', 3200.50, 1, Vat::TAX_NONE); $totalSum = 4401.00; // Виды оплат $paymentElectr = new Payment(Payment::PAYMENT_TYPE_ELECTR, 4400.00); $paymentCredit = new Payment(Payment::PAYMENT_TYPE_CREDIT, 1.00); // Налоги $vat = new Vat(Vat::TAX_VAT20, round($totalSum * 20 / 120, 2)); // Заполнение данных по агенту // Атрибуты оператора перевода. $moneyTransferOperatorName = "ООО Оператор-Перевода"; $moneyTransferOperatorPhones = ["+79170123456"]; $moneyTransferOperatorAddress = "г. Москва"; $moneyTransferOperatorINN = "3333333333"; $moneyTransferOperator = new MoneyTransferOperator( $moneyTransferOperatorName, $moneyTransferOperatorPhones, $moneyTransferOperatorAddress, $moneyTransferOperatorINN ); // Атрибуты оператора по приему платежей. $receivePaymentsOperatorPhones = ["+79170123456"]; $receivePaymentsOperator = new ReceivePaymentsOperator($receivePaymentsOperatorPhones); // Атрибуты платежного агента. // Наименование операции. Максимальная длина строки – 24 символа. $payingAgentOperation = "ООО Агент"; $payingAgentPhones = ["+79170123456"]; $payingAgent = new PayingAgent($payingAgentOperation, $payingAgentPhones); // Атрибуты поставщика. // Обязателен если указывается AgentInfo $supplierInfoName = "ООО Поставщик"; $supplierInfoPhones = ["+79170123456"]; $supplierInfoINN = "2222222222"; $supplierInfo = new SupplierInfo($supplierInfoName, $supplierInfoPhones, $supplierInfoINN); // Агент $agentInfo = new AgentInfo(); $agentInfo->setType(AgentInfo::ANOTHER) ->setPayingAgent($payingAgent) ->setReceivePaymentsOperator($receivePaymentsOperator) ->setMoneyTransferOperator($moneyTransferOperator); // Организация $companyINN = "1111111111"; // Адрес магазина // В случае мобильного приложения URL приложения в кабинете (см что указано в кабинете АТОЛ) $companyAddress = "test.mystore.dev"; $companyEmail = "company@mail.ru"; $company = new Company($companyINN, $companyAddress, $companyEmail, ReceiptSno::RECEIPT_SNO_OSN); // Покупатель $buyerEmail = "buyer@mail.ru"; $buyerPhone = "+79170123456"; $buyer = new Client($buyerEmail, $buyerPhone); // Важно! Агент применяется или ко всему чеку ИЛИ к позициям. // Если агент по предметам расчета, иначе смотри ниже $itemA->setAgentInfo($agentInfo); // Важно! Поставщик применяется или ко всему чеку ИЛИ к позициям. // Если поставщик по предметам расчета, иначе смотри ниже $itemA->setSupplierInfo($supplierInfo); // Чек $receipt = new Receipt(); $receipt->setCompany($company) ->setClient($buyer) ->setItems([$itemA, $itemB]) ->setPayments([$paymentElectr, $paymentCredit]) ->setVats([$vat]) // Если агент применяется ко всему чеку ->setAgentInfo($agentInfo) // Если поставщик применяется ко всему чеку ->setSupplierInfo($supplierInfo); // Куда АТОЛу стучаться с результатом $callbackUrl = 'http://test.mystore.dev/callback/api/url'; $info = new Info($callbackUrl); /** * @var OperationResponse $operation */ $operation = $client->doOperation( new OperationRequest($groupId, OperationRequest::OPERATION_SELL, $uuid, $receipt, $info, $token) ); $uuidAtol = $operation->getUuid(); } catch (\Exception $e) { // ... }
Получить отчет по операции
//... $token = $client->getToken(); //... $uuidAtol = $operation->getUuid(); try { $groupId = 'GroupId'; // Выдается АТОЛ $report = $client->getReport( new ReportRequest($groupId, $uuidAtol, $token) ); } catch (\Exception $e) { // smth with exception }