Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Для того чтобы произвести интеграцию с кассой “Онлайн Кассой Атол“ вам потребуется IT-специалисты.

Ниже приведена официальная документация для взаимодействия с API сервисом кассы для регистрации чеков.

Очень важно изучить данную документацию, так как дальше будет рассмотрен пример кода на языке php для интегрирования с API сервисом онлайн-кассы.Если Вы приобрели, либо собираетесь приобрести, "Онлайн Кассу Атол", то можете интегрировать её с нашим сервисом по средством API:

 

PDF
nameATOL-online Description.pdf

Скачайте данный PDF файл и передайте его вашим техническим специалистам.

Весь процесс регистрации чеков состоит из следующих этапов:

  1. Получение token
  2. Регистрация чека.
    Можно передать доп. параметр callback_url, на него в течении 300 секунд придет запрос со статусом обработки запроса регистрации чека
  3. Обработка ответа:
    1. Получение ответа от онлайн-кассы на callback_url (если был указан)
    2. или запрос статуса обработки документа самостоятельно

Ниже простой пример кода, который вы сможете оптимизировать под свою cms. Это именно пример кода, на основании которого можно разработать свою логику работы с онлайн-кассой. Не стоит использовать данный код как готовое решение.

, даже если она самописная. Ниже приведённый код можно использовать и отдельно от cms. Когда модуль системы IntellectMoney изменил статус заказа на "оплачено", необходимо передать параметры этого заказа на онлайн кассу Атол:

Сначала создайте XML файл

Code Block
languagexml
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<cms_params Company="ИП Пример" INN="инн" KPP="">
    <shop hostname="https://ваш_сайт/">
    <access login="логин" password="пароль" group_code="группа"/>
</shop>
</cms_params>

...

. Подробнее в данном документе.

Для работы с кассой потребуется 3 файла:

  1. Atoll.class.php (Инициализируем классОсновной для отправки запросов)
  2. pay_test.php (Реализуем класс на примере Пример кода для чека прихода)
  3. atol_callback.php (Получаем ответ)

Параметры строки запроса:
api_version: версия API сервиса (на данный момент, версия API – "v3")
group_code: идентификатор группы ККТ.
operation: тип операции, которая должна быть выполнена. Возможные типы операция:
sell: чек «Приход»;
sell_refund: чек «Возврат прихода»;
sell_correction: чек «Коррекция прихода»;
buy: чек «Расход»;
buy_refund: чек «Возврат расхода»;
buy_correction: чек «Коррекция расхода».

  1. Обработка ответа от онлайн-кассы)


Code Block
Code Block
languagephp
titleAtoll.class.php
linenumberstrue
<?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;
    }
}


Для отправки запроса на регистрацию чека и проверки регистрации чека напишем следующий кодВ Atoll.class.php мы инициализировали параметры для формирования чека, авторизацию в системе Атол и получили токена, отправку и проверку документа, далее реализуем:

Code Block
languagephp
titlepay_test.php
linenumberstrue
<?php

include 'Atol.class.php';

if ($_GET['act']=='check') {
    $atol = new Atol();
    if ($atol->getToken()['code'] != 2) {
        $rez = $atol->checkDoc($_GET['uuid']);
        ?>
        <p><a href="&fp=">Посмотреть'>https://lk.platformaofd.ru/web/noauth/cheque?fn=<?=$rez['payload']['fn_number']?>&fp=<?=$rez['payload']['fiscal_document_attribute']?>">Посмотреть чек</a></p>
        <p><a href="-.pdf">Скачать'>https://lk.platformaofd.ru/web/noauth/cheque/pdf-<?=$rez['payload']['fn_number']?>-<?=$rez['payload']['fiscal_document_attribute']?>.pdf">Скачать чек</a></p>
        <?php
        print_r($rez);
    }
} else {
*/ Когда статус заказа был изменён модулем 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'
Система налогообложения. Перечисление со значениями:
«osn» - общая СН;
«usn_income» - упрощенная СН (доходы);
«usn_income_outcome» - упрощенная СН (доходы минус расходы);
«envd» - единый налог на вмененный доход;
«esn» - единый сельскохозяйственный налог;
«patent» - патентная СН. 
                ),
                '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=$atol->sendDoc('sell', $p);
 sell: чек «Приход»;
 sell_refund: чек «Возврат прихода»;
 sell_correction: чек «Коррекция прихода»;
 buy: чек «Расход»;
 buy_refund: чек «Возврат расхода»;
 buy_correction: чек «Коррекция расхода». 
        ?>
['status'] == 'wait'){
        $exit = false;
        while(!$exit){
            $check_rez = $atol->checkDoc($rez['uuid']);
            <p><a$exit href="?act=check&uuid=<?=$rez['uuid']?>">Проверить чек</a></p>
= $check_rez['status'] == 'done' ? true : false;
           <?php sleep(10);
        print_r($rez);}
    }
}


Если при регистрации документа был передан параметр callback_url = http://<ваш_сайт>/atol_callback.php , тогда в течении 300 секунд на данный url может придти запрос со статусом регистрации чека. Ниже получаем ответ от сервера Атол, раскодируем, преобразуем в строку и записываем в файл.

Code Block
languagephp
titleatol_callback.php
linenumberstrue
<?php
include 'Atol.class.php';

file_put_contents('atol.txt', '!' . file_get_contents('php://input'). json_encode($_POST$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));
}