Page tree
Skip to end of metadata
Go to start of metadata

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

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

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

 

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

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

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

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

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

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

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


Atoll.class.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;
    }
}


Для отправки запроса на регистрацию чека и проверки регистрации чека напишем следующий код:

pay_test.php
<?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 может придти запрос со статусом регистрации чека. Ниже получаем ответ от сервера Атол.

atol_callback.php
<?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));
}