Документация (API)


Запросы должны отправлять в формате json.

Внимание! Есть тип людей, которые любят понимать все сразу в коде, для них есть сразу готовые скрипты и библиотеки (на php), где вы можете сразу все протестить. Найдете их вот в этой новости. Скрипта там два. Первый - это просто php скрипт, для работы достаточно его просто выполнить. Второй - это php+html форма.

Для валидации запросов, в запросе обязательно должны быть прописаны:

  1. kassaid
  2. kassatoken

Эти данные вы сможете получить, только в личном кабинете, предварительно заключив договор с нами (либо получив тестовые данные для входа - пишите на mail@nanokassa.ru)

Разберем пример запроса.

Незашифрованный запрос в общем виде должен выглядеть следующим образом:

{
    "kassaid": "123456",
    "kassatoken": "12345678912345678912345678912345",
    "cms": "ss7-7.3.0.209",
    "check_send_type": "email",
    "name_zakaz":"заказ 51",
    "check_vend_address": "Адрес установки автомата (Данный параметр необходим только для вендинга)",
    "check_vend_mesto": "Место установки автомата (Данный параметр необходим только для вендинга)",
    "check_vend_num_avtovat": "Номер автомата (Данный параметр необходим только для вендинга)",
    "products_arr": [{
        "name_tovar": "\u041a\u0430\u0440\u0442\u043e\u043d\u043d\u0430\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0430 2, 11112",
        "price_piece_bez_skidki": 7744,
        "skidka": 1297,
        "kolvo": 2,
        "price_piece": 7095,
        "summa": 14191,
        "stavka_nds": 6,
        "priznak_sposoba_rascheta": 4,
        "priznak_predmeta_rascheta": 1,
        "priznak_agenta": "none",
        "phone_oper_perevoda": "",
        "operation_plat_agenta": "",
        "phone_oper_priem_plat": "",
        "name_oper_perevoda": "",
        "address_oper_perevoda": "",
        "inn_oper_perevoda": "",
        "phone_postavshika": "",
        "name_postavshika": "",
        "discount": {
            "type": "amount",
            "value": 12.97
        }
    }, {
        "name_tovar": "\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430",
        "price_piece_bez_skidki": 155,
        "skidka": 26,
        "kolvo": 2,
        "price_piece": 142,
        "summa": 284,
        "stavka_nds": 6,
        "priznak_sposoba_rascheta": 4,
        "priznak_predmeta_rascheta": 4,
        "priznak_agenta": "none",
        "phone_oper_perevoda": "",
        "operation_plat_agenta": "",
        "phone_oper_priem_plat": "",
        "name_oper_perevoda": "",
        "address_oper_perevoda": "",
        "inn_oper_perevoda": "",
        "phone_postavshika": "",
        "name_postavshika": "",
        "discount": {
            "type": "amount",
            "value": 0.26
        }
    }, {
        "name_tovar": "\u041a\u0430\u0440\u0442\u043e\u043d\u043d\u0430\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0430 2, 11112",
        "price_piece_bez_skidki": 2277,
        "skidka": 191,
        "kolvo": 1,
        "price_piece": 2086,
        "summa": 2086,
        "stavka_nds": 6,
        "priznak_sposoba_rascheta": 4,
        "priznak_predmeta_rascheta": 1,
        "priznak_agenta": "none",
        "phone_oper_perevoda": "",
        "operation_plat_agenta": "",
        "phone_oper_priem_plat": "",
        "name_oper_perevoda": "",
        "address_oper_perevoda": "",
        "inn_oper_perevoda": "",
        "phone_postavshika": "",
        "name_postavshika": "",
        "discount": {
            "type": "amount",
            "value": 1.91
        }
    }, {
        "name_tovar": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430: PickPoint",
        "price_piece": 30000,
        "summa": 30000,
        "kolvo": 1,
        "stavka_nds": 6,
        "priznak_sposoba_rascheta": 4,
        "priznak_predmeta_rascheta": 1,
        "priznak_agenta": "none",
        "phone_oper_perevoda": "",
        "operation_plat_agenta": "",
        "phone_oper_priem_plat": "",
        "name_oper_perevoda": "",
        "address_oper_perevoda": "",
        "inn_oper_perevoda": "",
        "phone_postavshika": "",
        "name_postavshika": "",
        "deliveryposition": "yes"
    }],
    "oplata_arr": {
        "rezhim_nalog": "2",
        "money_nal": 0,
        "money_electro": 46561,
        "money_predoplata": 0,
        "money_postoplata": 0,
        "money_vstrecha": 0,
        "kassir_inn": "",
        "kassir_fio": "",
        "client_email": "support@nanokassa.ru",
        "client_phone": "123"
    },
    "itog_arr": {
        "priznak_rascheta": 1,
        "itog_cheka": 46561
    }

Давайте его подробнее опишем.

  • Как мы уже упомянули, kassaid и kassatoken выдаются в личном кабинете после заключения договора. [string]
  • В переменной cms мы указываем от какой cms идет взаимодействие [string]. Параметр обязательный, иначе мы не сможем понять, как ваш запрос обрабатывать. Особенно это касается вендинговых автоматов и платежных систем. Если у вас запрос типовой, то можете использовать стандартное значение «wordpress». 
  • В объекте check_send_type мы указываем, куда мы будем отправлять чек. Возможные значения: email; phone. Если вы указали email, то онлайн кассе будет отправлена информация о том, что чек клиенту необходимо отправить на электронную почту. Если вы указали phone, то онлайн кассе будет отправлена информация о том, что чек клиенту необходимо отправить посредством смс. Непосредственно чек клиенту как правило отправляет уже ОФД. То есть вы нам говорите, как нужно отправить чек клиенту, мы эту информацию транслируем онлайн-кассе, онлайн касса эту информацию транслирует ОФД, и ОФД уже отправляет чек клиенту. (За смс бывает ОФД берет дополнительные деньги, уточните эту информацию у вашего ОФД) [email,phone]
  • В массиве products_arr описываются товары, которые подлежат фискализации. К нему подробное описание тут.
  • В массиве oplata_arr описываются дополнительные данные об оплате.
  • В массиве itog_arr описываются итоги по чеку.


Подробнее разберем products_arr.

  • (1) В переменной name_tovar, нужно указать наименование товара/услуги необходимого для фискализации [string] [max 65 symb].
  • (2) В переменной price_piece_bez_skidki, необходимо указать стоимость предмета расчета за 1 шт. без скидок (в копейках)
  • (3) В переменной skidka, необходимо указать скидку, которая получилась (в копейках)
  • (4) В переменной kolvo, необходимо указать количество предметов расчета [float]
  • (5) В переменной price_piece, необходимо указать стоимость предмета расчета за 1шт. с учетом всех скидок и прч. Эта цифра должна быть окончательной и она попадет в чек онлайн кассы.
  • (6) В переменной summa, необходимо указать сумму стоимости всего количества предметов расчета (внимательно изучите первый товар, чтобы правильно понимать корреляцию между кол-вом, стоимостью одной штуки, и суммой) (в копейках)
  • (7) В переменной stavka_nds, необходимо указать ставку НДС, которая применяется именно к данной позиции предмета расчета (товару/услуге) [int]:
    • 1 - НДС 18%
    • 2 - НДС 10%
    • 3 - НДС 18/110
    • 4 - НДС 10/110
    • 5 - НДС 0%
    • 6 - НДС не облагается
  • (8) В переменной priznak_sposoba_rascheta необходимо указать каким способом оплачивается данные товар [int]:
    • 1 - Полная предварительная оплата до момента передачи предмета расчета
    • 2 - Частичная предварительная оплата до момента передачи предмета расчета
    • 3 – Аванс
    • 4 - Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета
    • 5 - Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит
    • 6 - Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит
    • 7 - Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита)
  • (9) В переменной priznak_predmeta_rascheta необходимо указать, к чему относится данный предмет расчета (предмет расчет содержит сведения ...):
    • 1 - о реализуемом товаре, за исключением подакцизного товара
    • 2 - о реализуемом подакцизном товаре
    • 3 - о выполняемой работе
    • 4 - об оказываемой услуге
    • 5 - о приеме ставок при осуществлении деятельности по проведению азартных игр
    • 6 - о выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению азартных игр
    • 8 - о выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению лотерей
    • 9 - о предоставлении прав на использование результатов интеллектуальной деятельности или средств индивидуализации
    • 10 - об авансе, задатке, предоплате, кредите, взносе в счет оплаты, пени, штрафе, вознаграждении, бонусе и ином аналогичном предмете расчета
    • 11 - о вознаграждении пользователя, являющимся платежным агентом
    • 12 - о предмете расчета, состоящем из предметов, каждому из которых может быть присвоено значение от «1» до «11»
    • 13 - о предмете расчета, не относящемуся к предметам расчета, которым может быть присвоено значение от «1» до «12»
  • (10) В переменной priznak_agenta важно указать признак агента. Если пользователь ККТ не является платежным агентом по данному предмету расчета, то этот параметр необходимо передать как «none». Если этот параметр не «none» то параметры 11-18 передавать нужно обязательно [string]
    • 0 - Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным агентом
    • 1 - Оказание услуг покупателю (клиенту) пользователем, являющимся банковским платежным субагентом
    • 2 - Оказание услуг покупателю (клиенту) пользователем, являющимся платежным агентом
    • 3 – Оказание услуг покупателю (клиенту) пользователем, являющимся платежным субагентом
    • 4 - Осуществление расчета с покупателем (клиентом) пользователем, являющимся поверенным
    • 5 - Осуществление расчета с покупателем (клиентом) пользователем, являющимся комиссионером
    • 6 - Осуществление расчета с покупателем (клиентом) пользователем, являющимся агентом и не являющимся банковским платежным агентом
  • (11) В переменной phone_oper_perevoda необходимо указать телефон оператора перевода (БПА, БПСА) [string]
  • (12) В переменной operation_plat_agenta небходимо указать операцию платежного агента (БПА, БПСА) [string]
  • (13) В переменной phone_plat_agent необходимо указать телефон платежного агента (ПА, ПСА) [string]
  • (14) В переменной phone_oper_priem_plat необходимо указать телефон оператора по приему платежей (ПА, ПСА) [string]
  • (15) В переменной name_oper_perevoda необходимо указать наименование оператора перевода (БПА, БПСА) [string]
  • (16) В переменной address_oper_perevoda необходимо указать адрес оператора перевода (БПА, БПСА) [string]
  • (17) В переменной inn_oper_perevoda необходимо указать ИНН оператора перевода (БПА, БПСА) [string]
  • (18) В переменной phone_postavshika необходимо указать телефон поставщика (для всех типов агента)
  • (19) В переменной name_postavshika необходимо указать наименование поставщика (для всех типов агента)
  • (20) В переменной discount необходима информация о скидке - массив из двух переменных:
    • (21) В переменной type необходимо указать тип скидки на этот предмет расчета (amount на сумму например) [string]
    • (22) В переменной value необходимо указать стоимость скидки на этот товар [float]

Подробнее разберем oplata_arr.

  • В переменной rezhim_nalog нужно указать режим налогообложения [int]
    • 0 – Общая
    • 1 - Упрощенная доход
    • 2 - Упрощенная доход минус расход
    • 3 - Единый налог на вмененный доход
    • 4 - Единый сельскохозяйственный налог
    • 5 - Патентная система налогообложения
  • В переменной money_nal необходимо указать сумму денег которую получили Наличными без запятых и точек (в копейках)
  • В переменной money_electro необходимо указать сумму денег которую получили Элетронными без запятых и точек (в копейках)
  • В переменной money_predoplata необходимо указать сумму денег которую получили Предоплатой (зачетом аванса) без запятых и точек (в копейках)
  • В переменной money_postoplata необходимо указать сумму денег которую получили Постоплатой (в кредит) без запятых и точек (в копейках)
  • В переменной money_vstrecha необходимо указать сумму денег которую получили Встречным представлением без запятых и точек (в копейках)
  • В переменной kassir_inn можно указать ИНН кассира (данный параметр при автоматическом режиме ККТ можно не указывать)
  • В переменной kassir_fio можно указать ФИО кассира (данный параметр при автоматическом режиме ККТ можно не указывать)
  • В переменной client_email необходимо указать электронную почту клиенту, куда придет электронный чек. Должен пройти стандартную валидацию на email.
  • В переменной client_phone необходимо указать сотовый телефон клиента, куда придет чек посредством СМС. Должен содержать только цифры (без плюса)


Подробнее разберем itog_arr.

  • В переменной priznak_rascheta необходимо указать признак расчета [int]:
    • 1 - Приход - поддерживается на момент 01.01.2018
    • 2 - Возврат прихода - поддерживается на момент 01.01.2018
    • 3 - Расход - поддерживается на момент 01.09.2018
    • 4 - Возврат расхода- поддерживается на момент 01.09.2018
  • В переменной itog_cheka необходимо указать сумму чека с учетом всех скидок и всего всего (в копейках) (отдельно отметим, что очень важно чтобы суммы бились. То есть сумма всех товаров с учетом скидок должно равняться цифре в itog_cheka)

Про вендинг

В соотвествии с изменениями в законодательстве, и, соотвественно, «форматах фискальных документов» ФНС, одна ККТ может применяться в составе нескольких автоматических устройств (вендинг). В данном случае при регистрации ККТ не указываются следующие параметры: Адрес расчетов, место расчета, номер автомата. Эти параметры должны указываться в процессе формирования чека. Поэтому при каждом чеке, каждый автомат должен отправлять переменные.
В переменной check_vend_address указываем адрес установки автомата [string] [max 256 symb]
В переменной check_vend_mesto указываем адрес установки автомата [string] [max 256 symb]
В переменной check_vend_num_avtovat указываем адрес установки автомата [string] [max 20 symb]


  • В объекте test мы прописываем, тестовый это запрос или «боевой». Внимание! Не забывайте его указывать! Потому, что если вы его не указали, мы автоматически считаем его тестовым и не проведем через онлайн кассы. (Возможные значения: 0; 1) (1 -запрос тестовый, 0 - запрос боевой). Этот объект придется еще раз указывать - поэтому не забывайте о нем.

После этого нам необходимо зашифровать этот запрос. 

Первое шифрование.