Для того чтобы произвести интеграцию с кассой “Онлайн Кассой Атол“ вам потребуется 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));
}