API
API Filebird — интерфейс для передачи заказов из вашей системы в торговый канал Filebird и получения результата оплаты.
Что делает API
- принимает заказ из вашей системы
- инициирует оплату на стороне Filebird
- отправляет server-to-server уведомление о результате
- позволяет отобразить статус заказа на вашей стороне
Базовый сценарий
- Вы формируете заказ (
x_invoice_num) - Передаёте параметры операции в Filebird
- Покупатель переходит к оплате
- Filebird отправляет callback с результатом
- Вы сохраняете статус и показываете его пользователю
Важно
- оплату принимает Filebird
- вы не обрабатываете платёж на своей стороне
- финальный статус определяется только через callback
Базовый сценарий интеграции
Последовательность действий
- Партнёр формирует заказ на своей стороне и присваивает ему уникальный
x_invoice_num. - Партнёр формирует параметры торговой операции и подпись
x_fp_hash. - Web-ресурс партнёра перенаправляет покупателя в Filebird через HTML form POST.
- Покупатель переходит на платёжную страницу, предоставленную Filebird, и выполняет оплату с использованием платёжной инфраструктуры банка или платёжного провайдера.
- Filebird отправляет server-to-server уведомление на
x_relay_url. - Партнёр валидирует callback и фиксирует итоговый статус операции.
- Покупатель возвращается на web-ресурс партнёра.
- Web-ресурс партнёра показывает покупателю уже сохранённый статус заказа.
Архитектурные принципы
Источник истины
Финальный статус торговой операции определяется только через server-to-server уведомление.
Возврат покупателя не должен использоваться как источник финального статуса.
Stateless-модель
Интеграция должна строиться как stateless-контур.
Ключом торговой операции на стороне партнёра является x_invoice_num.
Основные сущности
Торговая операция
Совокупность действий по заказу, оплате и фиксации результата в системе Filebird.
Платёжная сессия
Технический набор параметров, который передаётся в момент перехода покупателя к оплате.
x_invoice_num
Уникальный идентификатор заказа на стороне партнёра.
Используется для:
- связи redirect → callback → return;
- поиска торговой операции;
- сопоставления результата оплаты с заказом партнёра;
- идемпотентной обработки уведомлений.
x_invoice_num не следует смешивать с x_fp_sequence:
x_invoice_numидентифицирует заказ;x_fp_sequenceиспользуется как технический параметр подписи.
x_fp_sequence
Технический идентификатор сделки, назначаемый web-ресурсом партнёра.
Может совпадать с номером счёта, но не обязан совпадать с x_invoice_num.
Допустимо использовать иное уникальное значение, применяемое при формировании подписи запроса.
x_fp_timestamp
Временная метка в формате Unix timestamp (UTC, количество секунд с 1 января 1970 года), используемая при формировании подписи запроса.
Статус торговой операции
Состояние заказа в интеграции партнёра после обработки server-to-server уведомления.
Типы данных
Безопасность
При запуске торговой операции
Рекомендуется:
- использовать только HTTPS;
- формировать подпись
x_fp_hash; - передавать уникальный
x_invoice_num; - передавать корректно нормализованную сумму;
- не формировать торговую операцию на стороне браузера без серверной подписи.
При обработке callback
Рекомендуется:
- проверять IP-адрес источника уведомления;
- проверять существование заказа по
x_invoice_num; - сверять сумму операции после нормализации;
- проверять подпись callback;
- учитывать повторную отправку уведомления;
- возвращать провайдеру короткий и однозначный ответ после успешной обработки.
Инициация торговой операции
Инициация оплаты выполняется через передачу параметров торговой операции в момент перехода покупателя к оплате.
Формат интеграции
- Протокол: HTTPS
- Метод: POST
- Формат: HTML form POST
- Endpoint: определяется параметрами подключения торгового канала
Типовой пример HTML form POST
Параметры торговой операции
Обязательные параметры
Необязательные параметры
Ниже перечислены поля, которые поддерживаются в подтверждённом интеграционном контуре и могут передаваться дополнительно.
Данные покупателя
Платёжный адрес покупателя
URL возврата
Дополнительные поля вне перечисленного набора могут поддерживаться торговым каналом, но не входят в данный подтверждённый контур торговой операции.
Состав корзины: x_line_item
Поле x_line_item передаёт сведения о корзине в момент запуска торговой операции.
Эти данные используются Filebird для:
- формирования состава торговой операции;
- отражения товарных позиций;
- формирования кассового чека и фискальных документов в рамках торговой модели.
Партнёр не осуществляет фискализацию.
Формат элемента
Где:
item_id— идентификатор позиции;item_name— наименование позиции;item_description— описание позиции;qty— количество;unit_price— цена за единицу;taxable— признак налогообложения.
Поле taxable
Рекомендуемые значения:
YN
Интерфейс также может принимать эквивалентные значения:
TRUEFALSETFYESNO10
Передача нескольких позиций
Каждая позиция корзины передаётся отдельным параметром x_line_item.
Пример:
HTML пример нескольких позиций
Подпись запроса: x_fp_hash
Подпись x_fp_hash формируется на стороне партнёра перед переходом к оплате.
Строка для подписи
Алгоритм
- алгоритм:
HMAC-MD5 - секрет: ключ торгового канала
Пример исходной строки
Пример генерации подписи на PHP
Практические требования
- сумма должна быть нормализована до формата, используемого в подписи;
- строка должна собираться строго в заданном порядке;
- секретный ключ не должен попадать на клиентскую сторону;
- подпись должна вычисляться сервером партнёра.
Redirect и callback
Интеграция использует два разных канала, которые нельзя смешивать.
Redirect
Используется для пользовательского сценария и интерфейса оплаты.
Callback
Используется для фиксации результата операции на стороне партнёра. Именно callback является источником истины.
Server-to-server уведомление
После завершения обработки торговой операции Filebird отправляет POST-запрос на x_relay_url.
Типовые параметры callback
Интерпретация результата
До получения callback торговая операция обычно находится в статусе pending.
Валидация callback
При обработке callback рекомендуется выполнять проверки в следующем порядке:
- Проверить наличие
x_invoice_num. - Найти заказ по
x_invoice_num. - Если заказ уже находится в финальном статусе
paid, вернуть успешный ответ без повторной обработки. - Проверить IP-адрес источника уведомления.
- Если
x_loginпередан в callback, сверить его с идентификатором торгового канала. - Сверить сумму операции после нормализации.
- Проверить подпись
x_MD5_Hash. - Сопоставить код результата со внутренним статусом.
- Сохранить результат операции.
- Вернуть подтверждение получения.
Подпись callback
Подпись x_MD5_Hash проверяется по алгоритму MD5.
Строка для проверки составляется в формате:
Где:
secret_key— секретный ключ торгового канала;x_login— идентификатор торгового канала;x_trans_id— идентификатор операции в системе провайдера;x_amount— сумма операции в нормализованном формате.
Важное замечание по x_login в callback
В составе server-to-server уведомления поле x_login может отсутствовать.
Если x_login передаётся, оно должно совпадать с идентификатором торгового канала.
Если x_login не передаётся, проверка подписи выполняется с использованием идентификатора канала из параметров подключения.
Идемпотентность callback
Server-to-server уведомление может быть отправлено повторно.
Если торговая операция уже переведена в финальный статус paid, повторный callback:
- не должен повторно изменять данные;
- не должен повторно запускать бизнес-логику;
- должен завершаться успешным ответом провайдеру.
Типовой успешный ответ
Возврат покупателя
После завершения оплаты покупатель возвращается на web-ресурс партнёра.
Важно
- возврат выполняется через браузер покупателя;
- данные возврата не должны использоваться как источник финального статуса;
- return flow нужен для UX, но не для фиксации результата торговой операции.
Рекомендуемый подход
- использовать одну техническую страницу возврата;
- передавать
x_invoice_numили эквивалентный идентификатор заказа; - считывать уже сохранённый статус из своей системы;
- показывать пользователю итоговый результат.
Если к моменту возврата callback ещё не обработан, страница может показывать промежуточный статус и выполнять повторное чтение состояния заказа на стороне партнёра.
Типовые ошибки интеграции
Quick Start
-
Получить параметры подключения торгового канала:
- идентификатор канала;
- endpoint для запуска торговой операции;
- разрешённые IP-адреса callback;
- секретный ключ.
-
На стороне web-ресурса партнёра сформировать заказ:
x_invoice_num;- сумму;
- валюту;
- состав корзины.
-
Сформировать технические поля подписи:
x_fp_sequence;x_fp_timestamp.
-
Сгенерировать подпись
x_fp_hash. -
Сформировать HTML form POST и перенаправить покупателя в Filebird.
-
Реализовать endpoint для
x_relay_url. -
Принимать callback и валидировать:
- IP;
- заказ;
- сумму;
- подпись.
-
Сохранять статус операции идемпотентно.
-
На странице возврата показывать уже сохранённый статус заказа.
Что понадобится для SDK
Для SDK на стороне партнёра должны быть стабильно реализованы:
- генерация
x_fp_sequence; - генерация
x_fp_timestamp; - генерация
x_fp_hash; - сборка HTML form POST;
- формирование параметров торговой операции;
- сериализация
x_line_item; - приём callback;
- валидация подписи callback;
- проверка IP и суммы;
- идемпотентное обновление статуса;
- маппинг результата операции во внутренний статус заказа.
Параметры подключения
Партнёр получает от Filebird параметры подключения торгового канала:
- идентификатор торгового канала;
- адрес для запуска торговой операции;
- секретный ключ;
- разрешённые IP-адреса server-to-server уведомлений.
