Для того чтобы произвести интеграцию с кассой “Онлайн Кассой Атол“ вам потребуются IT-специалисты.
Ниже приведена официальная документация для взаимодействия с API сервисом кассы для регистрации чеков.
Очень важно изучить данную документацию, так как дальше будет рассмотрен пример кода на языке php для интегрирования с API сервисом онлайн-кассы.
Скачайте данный PDF файл и передайте его вашим техническим специалистам.
Весь процесс регистрации чеков состоит из следующих этапов:
- Получение token
- Регистрация чека.
Можно передать доп. параметр callback_url, на него в течении 300 секунд придет запрос со статусом обработки запроса регистрации чека - Обработка ответа:
- Получение ответа от онлайн-кассы на callback_url (если был указан)
- или запрос статуса обработки документа самостоятельно
Ниже простой пример кода, который вы сможете оптимизировать под свою cms. Это именно пример кода, на основании которого можно разработать свою логику работы с онлайн-кассой. Не стоит использовать данный код как готовое решение.
Когда модуль системы IntellectMoney изменил статус заказа на "оплачено", необходимо передать параметры этого заказа на онлайн кассу Атол. Подробнее в данном документе.
Для работы с кассой потребуется 3 файла:
- Atoll.class.php (Основной для отправки запросов)
- pay_test.php (Пример кода для чека прихода)
- atol_callback.php (Обработка ответа от онлайн-кассы)
<?php class Atol { public $api_version = 'v3'; public $login = 'логин'; public $pass = 'пароль'; public $group_code = 'группа'; public $inn = 'инн'; public $token = ''; function Send($url, $params=Array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); if ($params) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params, JSON_UNESCAPED_UNICODE)); } curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $res = curl_exec($ch); curl_close($ch); return json_decode($res, true); } public function getToken() { $rez = $this->Send('api_version.'/getToken'>https://online.atol.ru/possystem/'.$this->api_version.'/getToken', Array('login'=>$this->login, 'pass'=>$this->pass)); $this->token = $rez['token']; return $rez; } /* $operation - Тип документа o sell: чек «Приход»; o sell_refund: чек «Возврат прихода»; o sell_correction: чек «Коррекция прихода»; o buy: чек «Расход»; o buy_refund: чек «Возврат расхода»; o buy_correction: чек «Коррекция расхода». $params - параметры документа */ public function sendDoc($operation, $params) { $rez = $this->Send('api_version.'/'.$this->group_code.'/'.$operation.'?tokenid='.$this->token'>https://online.atol.ru/possystem/'.$this->api_version.'/'.$this->group_code.'/'.$operation.'?tokenid='.$this->token, $params); return $rez; } public function checkDoc($uuid) { $rez = $this->Send('api_version.'/'.$this->group_code.'/report/'.$uuid.'?tokenid='.$this->token'>https://online.atol.ru/possystem/'.$this->api_version.'/'.$this->group_code.'/report/'.$uuid.'?tokenid='.$this->token); return $rez; } }
Для отправки запроса на регистрацию чека и проверки регистрации чека напишем следующий код:
<?php include 'Atol.class.php'; /* Когда статус заказа был изменён модулем IntellectMoney, берём параметры заказа и передаём их в переменные ниже. */ $atol = new Atol(); if ($atol->getToken()['code'] <= 2) { $p = Array( 'timestamp' => date('d.m.Y H:i:s'), 'external_id' => 'test6', 'service' => Array( 'inn' => $atol->inn, 'payment_address' => 'intellectmoney.ru', 'callback_url ' => 'http://<ваш_сайт>/atol_callback.php', ), 'receipt' => Array( 'attributes' => Array( 'sno' => 'usn_income', 'email' => 'max-la@yandex.ru', 'phone' => '9127372410' ), 'items' => Array( Array( 'name' => 'Оплата брони 1-5446', 'price' => 1, 'quantity' => 1, 'sum' => 1, 'tax' => 'none', 'tax_sum' => 0 ) ), 'total' => 1, 'payments' => Array( Array( 'type' => 1, 'sum' => 1 ) ) ) ); $rez = $atol->sendDoc('sell', $p); /* Если статус регистрации ожидает обработки, будем делать запросы на проверку статуса, пока не будет получен положительный ответ */ if($rez['status'] == 'wait'){ $exit = false; while(!$exit){ $check_rez = $atol->checkDoc($rez['uuid']); $exit = $check_rez['status'] == 'done' ? true : false; sleep(10); } } }
Если при регистрации документа был передан параметр callback_url = http://<ваш_сайт>/atol_callback.php , тогда в течении 300 секунд на данный url может придти запрос со статусом регистрации чека. Ниже получаем ответ от сервера Атол.
<?php $rez = json_decode(file_get_contents('php://input'), true); /* Если статус регистрации не успешный, пишем ошибку в файл */ if($rez['status'] == 'fail'){ file_put_contents('atol.txt', json_encode($rez['error'], JSON_UNESCAPED_UNICODE)); }