Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

Подключение онлайн кассы. Настройка API, HTTP; POST, Контейнер JSON


Приложения 1

Просмотр приложений доступен только зарегистрированным пользователям.
  • Сергей Назаренко
    29 октября 2019, 23:59 |

    А у Вас более весомой документации по API взаимодействия с кассами нет?

    А то по тому, что Вы перечислили - сложно что-то оценивать.


    И еще в файл Вашей конфигурации заглянуть бы, чтобы понимать как у Вас сейчас информация о кассах в базе хранится.

  • Andrey Shamilov
    11 ноября 2019, 20:17 |

    Добрый вечер. Сергей.


    В связи с загруженностью, не смог во время отреагировать на заданный Вами вопрос, на данный момент вопрос по интеграции онлайн кассы приоритетный.

    imageВысылаю Вам фото самой онлайн кассы (ОС - Android)


    а так же  полный текст APİ,  

    Описание API SmartOne Cashbox


    В качестве транспорта для API выступает HTTP  проткол, порт  по умолчанию 8008, запросы отправляются методом POST.  Запрос имеет два параметра: data - сообщение и sign - подпись. Контейнером сообщения является JSON. Строка с json кодируется Base64, знаки «равно» экранируются с помощью urlencode.

    Подпись генерируется как base64encode от sha1 (в hex) от параметра data + merchantID. Параметр merchantID выдается при регистрации кассы.

    Протокол включает а себя следующие запросы:

    • /sale - отправка счета продажи в SmartOne Cashbox для оплаты и фискализации
    • /refund - отправка счета возврата
    • /check_status - проверка состояния счета (только при работе с кассой)
    • /x_report – X отчет
    • /open_shift – открытие смены
    • /close_shift – закрытие смены
    • /deposit – внесение в кассу
    • /withdraw - инкассация


    • Отправка счета в SmartOne Cashbox
    • /sale

    Параметры:

    {

     "docNumber":  string, номер документа в системе учета,

     "employeeName": string, ФИО кассира,

     "amount":  integer, сумма документа в копейках,

     "currency": string, наименование валюты,

     "items": список товаров/услуг по счету

        [{

         "itemId": string, код товара/услуги в системе учета

                 "itemName": string, наименование товара/услуги

                 "itemQRCode": QR-code системы идентификации товара

                 "itemQty": integer, кол-во*1000

                 "itemAmount": integer, сумма к оплате в копейках

                 "discount": integer, сумма скидки в копейках

                 "itemTaxes": список налогов по позиции

                 [{

                      "taxName": string, наименование налога

                      "taxPrc": integer, процент налога*100

                   }

                   …

                 ]

            }

            ...

        ],


        "payments" : {   блок оплаты

                   "cashAmount": integer, сумма оплаты наличными в копейках

                   "cashlessAmount": integer, сумма оплаты безналичными в копейках

                   "otherAmount": integer, сумма оплаты прочими видами оплат в копейках

        }


    }

    Необязательные параметры: скидка, qr-code, налоги


    Возврат:

    {

     "status": "success" | "error"

     "code": integer, код ошибки:

                   0 – нет ошибки

                   1 – ошибка авторизации

                   2 – некорректный формат JSON

                   3 – не переданы обязательныве параметры

                   4 – сумма по документу не соответсвует сумме по позициям

                   5 – внутрення ошибка

                   6 – не открыта смена

                   7 – тип оплаты не поддерживается

                   8 – документ не полностью оплачен (при автоматической фискализации)

    "message": string, текст ошибки, опционально

    "documentID": integer, код документа в системе SmartOne Cashbox (при использовании кассы)


    "fiscalID": string, фискальный код документа (использовать для возврата)

    }


    • Отправка счета возврата в SmartOne Cashbox
    • /refund

    • Параметры запроса аналогичны счету продажи, дополнительно должен передаваться код документа продажи, товар которого возвращается:
    • "parentDocID ": string, фискальный код документа продажи
    • Параметры возврата аналогичны счету продажи.





    • Проверка состояния счета (только при работе с кассой)
    • /check_status

    Параметры:

    { "documentID": код счета }


    Возврат:

    {

       "status": "success" | "error"

       "code": integer, код ошибки:

                   0 – нет ошибки

                   1 – ошибка авторизации

                   2 – некорректный формат JSON

                   3 – не переданы обязательныве параметры


      "docStatus": integer:

                   0 – счет не закрыт

                   1 – счет закрыт


      "cashAmount": integer, сумма оплаты наличными в копейках

      "cashlessAmount": integer, сумма оплаты безналичными в копейках

      "transactionID": string, код транзакции оплаты картой

      "authCode": string, код авторизации

      "cardNum": string, номер платежной карты (в зависмости от платежной системы)

      "otherAmount": integer, сумма оплаты прочими видами оплат в копейках

      + блок записей счета, описанный в запросе /sale

    }


    • X отчет
    • /x_report

    Параметры:

    { "shiftID": код смены (только при работе с кассой), необязательный, по умолчанию – текущая открытая }


    Возврат:

    {

      "status": "success" | "error"

       "code": integer, код ошибки:

                   0 – нет ошибки

                   1 – ошибка авторизации

                   2 – некорректный формат JSON

                   6 – смена не найдена (по указанному коду или нет открытой смены в случае

                   отсутствия кода)

                   7 – тип оплаты не поддерживается (на кассе нет наличной оплаты)

      "shiftID": integer: код смены  (только при работе с кассой)

      "saleCount": integer: кол-во чеков продажи

      "saleSum": integer: сумма продаж

      "saleCashSum": integer: сумма продаж нал

      "saleCashlessSum": integer: сумма продаж безнал

      "saleCreditSum": integer: сумма продаж кредит

      "saleBonusSum": integer: сумма продаж бонусами

      "saleVatAmounts": integer: сумма налогов с продаж

      "depositCount": integer: кол-во внесений в кассу

      "depositSum": integer: итоговая сумма внесений за смену в копейках

      "withdrawCount": integer: кол-во инкассаций

      "withdrawSum": integer: итоговая сумма инкассаций за смену в копейках

      "moneyBackCount": integer: кол-во чеков возвратов

      "moneyBackSum": integer: сумма возвратов

      "moneyBackCashSum": integer: сумма возвратов нал

      "moneyBackCashlessSum": integer: сумма возвратов безнал

      "moneyBackCreditSum": integer: сумма возвратов кредит

      "moneyBackBonusSum": integer: сумма возвратов бонусами

      "moneyBackVatAmounts": integer: сумма налогов с возвратов

             }


    • Открытие смены
    • /open_shift

    Параметры:

    { "employeeName": string, ФИО кассира,

      "pincode": пин-код (опционально)}


    Возврат:

    {

      "status": "success" | "error"

      "shiftID": код смены(только при работе с кассой)

      "code": integer, код ошибки:

                   0 – нет ошибки

                   2 – некорректный формат JSON

                   5 – внутрення ошибка

                   6 – смена уже открыта

    }



    • Закрытие смены
    • /close_shift

    Параметры:

    { "employeeName": string, ФИО кассира }


    Возврат:

    {

      "status": "success" | "error"

      "code": integer, код ошибки:

                   0 – нет ошибки

                   2 – некорректный формат JSON

                   5 – внутрення ошибка

                   6 – не открыта смена

      отчет по смене: (см. X-отчет)

    }


    • Внесение
    • /deposit

    Параметры:

    {  

      "docNumber":  string, номер документа в системе учета, необязательно

      "employeeName": string, ФИО кассира,

      "amount":  integer, сумма документа в копейках,

      "currency": string, наименование валюты,

    }


    Возврат:

    {

      "status": "success" | "error"

      "code": integer, код ошибки:

                   0 – нет ошибки

                   2 – некорректный формат JSON

                   5 – внутрення ошибка

                   6 – не открыта смена

    "documentID": integer, код документа в системе SmartOne Cashbox

    "fiscalNum": string, фискальный код документа

    }


    • Икассация
    • /withdraw

    • Параметры запроса аналогичны запросу на внесение.






    • Пример



    • - merchant ID:
    • 9662a13f5b4f46dbb1751bbbf86ed402

    • - данные запроса:
    • {"docNumber":  "123","employeeName": "Иванов","amount":  15000,"currency": "AZN",
    •  "items": [{"itemId": "1111", "itemName": "Семечки", "itemQRCode": "", "itemQty": 2000,
    •  "itemAmount": 15000,"discount": 0,"itemTaxes": [{"taxName": "НДС","taxPrc": 1800}]}],
    •  "payments" : {"cashAmount": 15000,"cashlessAmount": 0,"otherAmount": 0}}

    • - параметр data:
    • eyJkb2NOdW1iZXIiOiAgIjEyMyIsImVtcGxveWVlTmFtZSI6ICLQmNCy0LDQvdC+0LIiLCJhbW91bnQiOiAgMTUwMDAsImN1cnJlbmN5IjogIkFaTiIsCiAiaXRlbXMiOiBbeyJpdGVtSWQiOiAiMTExMSIsICJpdGVtTmFtZSI6ICLQodC10LzQtdGH0LrQuCIsICJpdGVtUVJDb2RlIjogIiIsICJpdGVtUXR5IjogMjAwMCwKICJpdGVtQW1vdW50IjogMTUwMDAsImRpc2NvdW50IjogMCwiaXRlbVRheGVzIjogW3sidGF4TmFtZSI6ICLQndCU0KEiLCJ0YXhQcmMiOiAxODAwfV19XSwKICJwYXltZW50cyIgOiB7ImNhc2hBbW91bnQiOiAxNTAwMCwiY2FzaGxlc3NBbW91bnQiOiAwLCJvdGhlckFtb3VudCI6IDB9fQ%3D%3D

    • - sha1:
    • fce95529d72466191683e02b17a8b1204c165a49

    • - параметр sign:
    • ZmNlOTU1MjlkNzI0NjYxOTE2ODNlMDJiMTdhOGIxMjA0YzE2NWE0OQ%3D%3D



    Прошу ознакомиться.

  • Сергей Назаренко
    11 ноября 2019, 20:50 |

    /sale

      "itemQRCode": QR-code системы идентификации товара

    В каком формате передается этот QR-код?

    Строка, которую касса сама закодирует в соответствующий код?

    Или закодированная в Base64 картинка с уже готовым кодом?

  • Andrey Shamilov
    11 ноября 2019, 22:33 |

    Касса сама закодирует, так как в кассе встроен Token-генератор QR кода

  • Сергей Назаренко
    11 ноября 2019, 20:56 |

    /sale

    "currency": string, наименование валюты

    Названия валют как-то регламентируются?

    Или произвольное название передавать нужно (как в справочнике Валют будет написано), которое просто на печать выводится и нигде не проверяется?

  • Andrey Shamilov
    11 ноября 2019, 22:33 |

    Только одна Валюта АЗН (Азербайджанский манат)

  • Сергей Назаренко
    11 ноября 2019, 22:37 |

    Точно "АЗН" (кирилицей)?
    В примере "AZN".

  • Andrey Shamilov
    11 ноября 2019, 23:10 |

    нет латинецей - AZN

  • Сергей Назаренко
    11 ноября 2019, 21:27 |

    /sale

    "itemQty": integer, кол-во*1000

    Точно умножить на 1000?

    Т.е. если продаем 10 буханок хлеба, то выгружаем itemQty = 10 000?

    Кстати. В API нигде не указывается единица измерения количества.
    Нужно все переводить в базовые единицы измерения номенклатуры?
    Или это не важно - выгружаем указанное в документе количество (1 контейнер тапочек - значит itemQty = 1 000)?

  • Andrey Shamilov
    11 ноября 2019, 22:35 |

    1000 имеется в виду 1.000 три знака после точки. Единицу измерения необходимо будет передавать из справочника номенклатура.

  • Сергей Назаренко
    11 ноября 2019, 22:38 |

    Так нет ни метода выгрузки номенклатуры на кассу. Ни поля для указания единицы измерения, при выгрузке документа.

  • Andrey Shamilov
    11 ноября 2019, 23:15 |

    Просмотрел чек, единицу измерения передавать не нужно.

  • Сергей Назаренко
    11 ноября 2019, 23:32 |

    И пересчитывать количество в базовую единицу тоже не нужно? Сколько в документе указано (хоть штук, хоть вагонов) - столько и выгружаем?

  • Andrey Shamilov
    11 ноября 2019, 23:34 |

    Совершенно верно.

  • Сергей Назаренко
    11 ноября 2019, 21:41 |

    /sale

    "taxName": string, наименование налога

    Названия налогов как-то регламентируются?

    Или, как и с названием валюты, можно все, что угодно передавать - оно просто на печать пойдет (без каких-либо проверок)?

  • Andrey Shamilov
    11 ноября 2019, 23:04 |

    По видом налогооблажения отвечу после уточнения с компанией продающей кассовый апарат.

  • Сергей Назаренко
    11 ноября 2019, 22:10 |

    /withdraw

    Не приведен формат возвращаемых данных.
    Что возвращает данный метод?

  • Andrey Shamilov
    11 ноября 2019, 23:23 |

    Данное APİ было представлено со стороны продавца онлайн кассы. Можем с Вами вывести список необходимых вопросов для уточнения. Завтра я запишу небольшой видеообзор по кассе, по интерфейсу и функциональности, предоставлю распечатываемый на данный момент чек (с переводом на русский язык)

  • Сергей Назаренко
    11 ноября 2019, 23:39 |

    Из ключевых вопросов к производителю остаются:

    1. По названиям налогов (см. выше).

    2. По возвращаемому методом "/withdraw" значению.
    3. По единицам измерения номенклатуры (странно не различать проданных 10 штук от 10 вагонов).

    И еще интересуют вопросы:
    4. Как на кассу попадает номенклатура?

    5. Об авторизации. Большинство методов могут возвращать код ошибки "1 – ошибка авторизации". Но при этом, я нигде не заметил информации о том, как во время отправки запросов эта авторизация производится?


    Видеообзор по кассе, наверное, не обязательно. Если Вы его для других целей делать будете, то взглянуть на него не помешает. Но если специально для разработчика интеграции кассы с 1С, то в нем нет необходимости, так как разработчика больше интересует программный интерфейс, чем пользовательский.

  • Сергей Назаренко
    11 ноября 2019, 22:17 |

    И еще в файл Вашей конфигурации заглянуть бы, чтобы понимать как у Вас сейчас информация о кассах в базе хранится.

    Вы на это так и не отреагировали.

    Причем, после прочтения спецификации, меня начала интересовать не только информация о кассах, но и состав и структура документов в конфигурации.

  • Andrey Shamilov
    11 ноября 2019, 23:10 |

    База новая, внедрение базы с онлайн кассами планируется одновременно. Файл dt предоставлю. Вид деятельности - Продажа одежды и обуви, в связи с чем планируется использование характеристик номенклатур, дисконтные и бонусные карты,  подарочные сертификаты,

  • Сергей Назаренко
    11 ноября 2019, 23:44 |

    Мне бы заглянуть в нее до того, как я оценю задачу. Если не в базу (dt), то хотя бы в конфигурацию (cf).

  • Andrey Shamilov
    11 ноября 2019, 23:25 |

    Как нам заявил продавец, драйвера у данного аппарата отсутствуют, связь осуществляется только по İP (протоколу http, порт 8008).

  • Сергей Назаренко
    11 ноября 2019, 23:43 |

    Связь по IP посредством HTTP-запросов - это идеальный вариант для взаимодействия с кассой из 1С. С драйверами часто проблемы разные бывают.

  • Andrey Shamilov
    11 ноября 2019, 23:29 |

    Есть ли у Вас Skype или Whats Up для более быстрого обмена и уточнения информации. Мой Whats Up +994 55 855 50 88

  • Сергей Назаренко
    11 ноября 2019, 23:42 |

    По новым правилам, за контакты в обсуждении задачи, можно на несколько дней "немым" стать. Так что поаккуратнее.

    Ватсапа у меня нет. Но есть Скайп. Напишите мне в личные сообщения (я Вам написать не могу, т.к. у Вас заблокированы входящие сообщения), и я Вам там сообщу свой Скайп.

Актуальные фриланс-проекты в категории Базы данных и SQL

Нужен специалист 1С для доработок и разработки

Ищу специалиста по 1С для сотрудничества на фрилансе. В настоящее время уже работаю с подрядчиком, который обеспечивает поддержку и обслуживание системы 1С. Однако из-за загруженности подрядчика возникает необходимость в оперативном выполнении дополнительных задач, доработок и…

Базы данных и SQL ∙ 14 часов 1 минута назад ∙ 9 ставок

Восстановление инстаграм после блокировки

3 марта 2026 г заблокировали инстаграм с причиной нарушения правил. Считаю произошла какая то ошибка, так как страничка была личной с фото и видео личных поездок. Коментарии и тд я не писала нигде. Отправляла несколько раз на обжалование. Не могу скачать свои файлы, так как не…

Базы данных и SQLВеб-программирование ∙ 1 день 1 час назад ∙ 4 ставки

CRM система для ЖД Логистики

Создание CRm системы для Логистической компании в основном ЖД перевозки и автотранспорт , 1) Фин отчётность 2) обрабатывания Заявки 3) контрагенты 4) автоматическое выдача инвойсов актов по закрытию , можно сделать упращенную систему 1С-а ниже…

Базы данных и SQLУправление клиентами и CRM ∙ 1 день 13 часов назад ∙ 38 ставок

Устранить проблему неполного импорта данных из Excel-файлов спецификаций Новой Почты в 1С:

2000 UAH

Цель: Есть обработка в 1с по загрузке спецификации Новой почти. По непонятнім причинам перестало подгружать некоторіе табличніе данніе Нужно найти причину и Устранить проблему неполного импорта данных из Excel-файлов спецификаций Новой Почты в 1С: Малый Бизнес. Текущее…

Администрирование систем и сетейБазы данных и SQL ∙ 4 дня 8 часов назад ∙ 16 ставок

Система учета, планирования и продажи для грибной фермы

27 000 UAH

Это полный, финальный текст Технического задания (ТЗ). Он объединяет все ваши требования: 16 камер, 20 контрагентов, расписание по дням, учет тары, расчет рентабельности и обязательное деление на три сорта грибов. Вы можете полностью скопировать этот текст и отправлять…

Базы данных и SQLУправление клиентами и CRM ∙ 6 дней 12 часов назад ∙ 57 ставок

Заказчик
Проект опубликован
6 лет назад
721 просмотр