Иногда требуется в работе смотреть, ушел ли чек в ОФД или нет. При изучении API от ОФД-Я сделал несколько тестовых примеров, работают даже в пустой конфигурации, может, будут полезны кому. Внедрить в любую конфигурацию не составит труда.
Ссылки:
При использовании API, необходимо иметь Token. Получить его можно в личном кабинете в профиле пользователя.
Метод возвращает Список касс ККТ. Данные собираются из отчетов о регистрации и перерегистрации. Метод не учитывает переезда ККТ из одной торговой точки в другую. Параметр: ДатаОбслуживанияККТ
Пример:
-X POST https://api.ofd-ya.ru/ofdapi/v1/KKT
-H "Ofdapitoken: eyJpbm4iOlYtJTxMDAzMTQ3NSJdLCJ0ZXN0J yHTydWV9.YDXh76CYn4YTgXRaqqHA_T6kN2C1GJ_Qxzm_jiZYNE4"
-H "Content-Type: application/json"
-d '{"date":"1970-01-01"}'
Пример в 1С:
// Заголовок запроса.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Ofdapitoken", PublicAPI); //PublicAPI содержит токен
// Запрос
АдресЗапроса = "ofdapi/v1/KKT";
Запрос = Новый HTTPЗапрос(АдресЗапроса, Заголовки);
// Параметры запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("date", "1970-01-01"); //ДатаОбслуживанияККТ
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
тхтJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(тхтJSON);
// Соединение
Соединение = Новый HTTPСоединение("api.ofd-ya.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос); //POST запрос
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТекстОтвета, СтатусСообщения.Обычное);
Исключение
Соединение = Неопределено;
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
КонецПопытки;
Пример ответа (Responses):
{
"KKT" : {
"9999078900007902" : [ {
"address" : "109097, Москва, ул. Ильинка, 9",
"last" : "-/-/-",
"kktregid" : "0000024127035856",
"turnover" : 0,
"receiptCount" : 0
}, {
"address" : "Московская обл, г Балашиха, ул Заречная, д 26, кв 44",
"last" : "2017-01-15 30:48:00 +0000 UTC",
"kktregid" : "0000024127035856",
"turnover" : 0,
"receiptCount" : 0
} ],
"9999078900007588" : [ {
"address" : "153008, 37, 37 Ивановская обл, Иваново г, Лежневская ул, 55",
"last" : "-/-/-",
"kktregid" : "0000014473045293",
"turnover" : 0,
"receiptCount" : 0
}, {
"address" : "303240, Дмитровский р-н, г. Дмитровск, ул. Советская, д. 104, пом. 1",
"last" : "2017-01-15 30:48:00 +0000 UTC",
"kktregid" : "0000014473045293",
"turnover" : 0,
"receiptCount" : 0
} ]
},
"count" : 2
}
Метод возвращает данные по Кассовым чекам и БСО за сутки по номеру фискального накопителя.
Параметры: fiscalDriveNumber, date
Пример в 1С:
// Заголовок запроса.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Ofdapitoken", PublicAPI); //PublicAPI содержит токен
// Запрос
АдресЗапроса = "ofdapi/v1/documents";
Запрос = Новый HTTPЗапрос(АдресЗапроса, Заголовки);
// Параметры запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("fiscalDriveNumber", ЗаводскойНомерФН);
ПараметрыЗапроса.Вставить("date", "2021-04-19"); //дата получения данных
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
тхтJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(тхтJSON);
// Соединение
Соединение = Новый HTTPСоединение("api.ofd-ya.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос); //POST запрос
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТекстОтвета, СтатусСообщения.Обычное);
Исключение
Соединение = Неопределено;
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
КонецПопытки;
Пример ответа (Responses):
{
"count" : 2,
"items" : [ {
"dateTime" : 1592488140,
"provisionSum" : 0,
"fiscalDocumentFormatVer" : 2,
"code" : 3,
"fiscalDriveNumber" : "9999078900007902",
"shiftNumber" : 3,
"receivingDate" : 1592477641,
"operator" : "СИСТ. АДМИН.",
"requestNumber" : 1,
"fnsUrl" : "",
"ecashTotalSum" : 20000,
"fiscalDocumentNumber" : 11,
"ndsNo" : 20000,
"userInn" : "1453527421",
"kktRegId" : "1644003893045797",
"creditSum" : 0,
"cashTotalSum" : 0,
"appliedTaxationType" : 32,
"totalSum" : 20000,
"retailAddress" : "Ямало-Ненецкий АО, г Новый Уренгой, Восточный мкр, д 2 к 2в",
"fiscalSign" : 490561441,
"operationType" : 1,
"prepaidSum" : 0,
"items" : [ {
"quantity" : 1.0,
"productCode" : "AAUAAAJpOZI0MDQ1MDIzMjMy",
"price" : 20000,
"name" : "сигареты 1 пачка",
"sum" : 20000,
…
}
Метод по номеру фискального накопителя (номеру ФН) и номеру документа возвращает массив ФД и ссылки на их электронный вид на сайте ОФД-Я.
Параметры: fiscalDriveNumber, fiscalDocumentNumber
Пример в 1С:
// Заголовок запроса.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Ofdapitoken", PublicAPI); //PublicAPI содержит токен
// Запрос
АдресЗапроса = "ofdapi/v1/getChequeLink";
Запрос = Новый HTTPЗапрос(АдресЗапроса, Заголовки);
// Параметры запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("fiscalDriveNumber", ЗаводскойНомерФН);
ПараметрыЗапроса.Вставить("fiscalDocumentNumber", НомерФискальногоДокумента);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
тхтJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(тхтJSON);
// Соединение
Соединение = Новый HTTPСоединение("api.ofd-ya.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос); //POST запрос
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТекстОтвета, СтатусСообщения.Обычное);
Исключение
Соединение = Неопределено;
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
КонецПопытки;
Пример ответа (Responses):
{
"link": "https://ofd-ya.ru/r?QuSee6AWv_h5mg",
"fiscalDocument": {
"dateTime": 1507074180,
"ndsNo": 29000,
"code": 3,
"userInn": "1111111111",
"kktRegId": "0000381110029570",
"fiscalDriveNumber": "9910000100249119",
"shiftNumber": 142,
"cashTotalSum": 29000,
"operator": "_Кассир",
"totalSum": 29000,
"requestNumber": 47,
"retailAddress": "с.Москва,ул Нет улицы",
"ecashTotalSum": 0,
"fiscalDocumentNumber": 10323,
"fiscalSign": 111111,
"operationType": 1,
"taxationType": 8,
"items": [
{
"ndsNo": 29000,
"quantity": 1.0,
"price": 29000,
"name": "Вода \"Фода \"",
"sum": 29000
}
],
"user": "ООО \"Вода\""
}
},
{
…
}
Все примеры методов писать не стал, меняем адрес запроса и параметры запроса из описание API.