Перейти к основному содержимому

Формирование второго чека

Формирование второго чека

В формате ФФД 1.2 магазины, принимающие оплаты с признаками способа расчета «аванс», «предоплата» или «предоплата 100%», должны после поставки товара или оказания услуги выбить итоговый кассовый чек с признаком способа расчета «полный расчёт».

Важно

Сервис доступен только магазинам и партнёрам, которые принимают платежи и проводят фискализацию через Robokassa. Услуга бесплатна, но на одну операцию можно выбить не более двух чеков.

Для второго (итогового) чека параметр payment_method принимает значение full_payment, а в параметре operation нужно передавать только значение sell.

Пример запроса

Основные параметры совпадают с первым фискальным чеком. Дополнительно требуются параметры ниже.

{
"merchantId": "robokassa_sell",
"id": "14",
"originId": "13",
"operation": "sell",
"sno": "osn",
"url": "https://www.robokassa.ru/",
"total": 100,
"items": [
{
"name": "Товар",
"quantity": 1,
"sum": 100,
"tax": "none",
"payment_method": "full_payment",
"payment_object": "commodity",
"nomenclature_code": "04620034587217"
}
],
"client": {
"email": "test@test.ru",
"phone": "71234567890"
},
"payments": [
{
"type": 2,
"sum": 100
}
],
"vats": [
{
"type": "none",
"sum": 0
}
]
}

Параметры запроса

ПараметрЗначение
merchantIdОбязателен. Идентификатор магазина в Robokassa, указанный при создании магазина.
idОбязателен. Номер заказа для итогового чека. Целое число от 1 до 9223372036854775807, не должно совпадать с originId.
originIdОбязателен. Номер заказа (InvId), по которому уже есть чек и требуется сформировать второй чек. Целое число.
operationОбязателен. Тип чека. Для итогового чека всегда sell.
urlОбязателен. Адрес сайта, на котором совершена продажа.
totalОбязателен. Итоговая сумма чека в рублях. Положительное число: целая часть до 8 знаков, дробная — до 2.
client.emailОбязателен, если не передан client.phone. Email покупателя.
client.phoneОбязателен, если не передан client.email. Телефон покупателя.
payments.typeОбязателен. Тип платежа. Для зачёта аванса используйте значение 2 — предварительная оплата.
payments.sumОбязателен. Сумма платежа. Положительное число с целой частью до 8 знаков и дробной до 2.
vats.typeНеобязателен. Налоговая ставка: none, vat0, vat5, vat7, vat10, vat110, vat20, vat22, vat120, vat122, vat105, vat107.
vats.sumНеобязателен. Сумма налога для соответствующего товара.

Формирование запроса в BASE64

  1. Закодируйте тело запроса в base64 без символов =.
  2. Добавьте пароль магазина (Пароль #1) к полученной строке и вычислите Signature по выбранному алгоритму (например, MD5).
  3. Закодируйте Signature в base64 и удалите символы =.
  4. Соберите финальный запрос: <тело_в_base64>.<signature_в_base64>.
  5. Отправьте POST-запрос на URL https://ws.roboxchange.com/RoboFiscal/Receipt/Attach.

Пример запроса

eyJtZXJjaGFudElkIjogInJvYm9rYXNzYV9zZWxsIiwiaWQiOiAiMTQiLCJvcmlnaW5JZCI6ICIxMyIsIm9wZXJhdGlvbiI6ICJzZWxsIiwKInNubyI6ICJvc24iLCJ1cmwiOiAiaHR0cHM6Ly93d3cucm9ib2thc3NhLnJ1LyIsInRvdGFsIjogMTAwLCJpdGVtcyI6IFt7Im5hbWUiOiAi0KLQvtCy0LDRgCIsInF1YW50aXR5IjogMSwic3VtIjogMTAwLCJ0YXgiOiAibm9uZSIsInBheW1lbnRfbWV0aG9kIjogImZ1bGxfcGF5bWVudCIsInBheW1lbnRfb2JqZWN0IjogImNvbW1vZGl0eSJ9XSwiY2xpZW50IjogeyJlbWFpbCI6ICJ0ZXN0QHRlc3QucnUiLCJwaG9uZSI6ICI3MTIzNDU2Nzg5MCJ9LCJwYXltZW50cyI6IFt7InR5cGUiOiAyLCJzdW0iOiAxMDB9XSwidmF0cyI6IFt7InR5cGUiOiAibm9uZSIsInN1bSI6IDB9XX0.MzAwMTU4NjIwMTE0M2RhNDIzMjg5NmM0NDI0NGJkYmI

Ответ на формирование чека

Успешный ответ сервиса:

{
"ResultCode": "0",
"ResultDescription": "ok"
}
ПараметрЗначение
ResultCodeСтатус получения данных. Возможные значения:
1 — ожидание регистрации,
2 — чек зарегистрирован,
3 — ошибка регистрации,
1000 — внутренняя ошибка запроса.
ResultDescriptionОписание результата обработки.

Получение статуса чека

Создайте запрос в кодировке UTF-8:

{
"merchantId": "robokassa_state",
"id": "34"
}
ПараметрЗначение
merchantIdИдентификатор магазина, указанный при создании.
idИдентификатор операции.

Вычислите Signature тем же способом, что и для формирования чека, и отправьте POST-запрос на https://ws.roboxchange.com/RoboFiscal/Receipt/Status.

Пример ответа статуса

{
"Code": "0",
"Description": "ok",
"Statuses": [
{
"Id": "245932797",
"Code": "Done",
"Description": "Done",
"FnNumber": "7381440800567076",
"FiscalDocumentNumber": "3054",
"FiscalDocumentAttribute": "2382159011",
"Num": "1",
"FiscalType": "Income",
"FiscalDate": "21.11.2025 15:51:00"
}
]
}
ПараметрЗначение
CodeКод обработки запроса.
DescriptionОписание результата обработки запроса.
StatusesМассив со статусами фискализации. Если запрос обработан с ошибкой, возвращается null.

Коды поля Code в ответе:

ЗначениеОписание
0Запрос обработан успешно.
1000Некорректный запрос.
1001Некорректная подпись запроса.

Поля объекта в Statuses:

ПараметрЗначение
IdИдентификатор записи о статусе.
CodeСтатус фискализации второго чека. Возвращается строковым значением.
DescriptionТекстовое описание статуса.
FnNumberНомер фискального накопителя.
FiscalDocumentNumberФискальный номер документа.
FiscalDocumentAttributeФискальный признак документа.
NumПорядковый номер чека в ответе.
FiscalTypeТип фискального события.
FiscalDateДата и время формирования фискального чека.

Возможные значения Statuses[].Code:

СтатусВнутренний кодОписание
None0Фискализация еще не началась. Состояние до начала обработки чека.
Wait1Фискализация запущена, ожидается выдача чека.
Done2Чек успешно зарегистрирован.
Fail3При фискализации произошла ошибка.
NotProvided4Чек не будет сформирован, например если схема фискализации не выбрана или операция отменена.