# i-Free Money Mock Service — Callisto (разовые платежи, sandbox) > Мок-сервер партнёрского API биллинговой платформы Callisto / iFree. Эмулирует два > протокола разовых платежей: Merchant XML API v2.6 и Payment API v3 (REST JSON). > Среда тестовая: реальных списаний нет, тарификация эмулируется (инвойс хранится, > GetInvoice отдаёт реальные данные), коллбеки отправляются по-настоящему. > Версия сервиса — 2.108.4. **Канонический источник документации — https://i-free.money/developers/ru** (строится из OpenAPI-файлов, обновляется вместе с протоколом). Этот файл и help-страницы мока описывают песочные детали (тест-векторы подписи, песочные ручки, триггеры ошибок, MCP) и больше не обновляются по протоколу — при расхождении верьте порталу и OpenAPI-спекам. Подписки — отдельный сервис (Subscription Service), см. раздел «Другие сервисы». ## Аутентификация Схема HMAC-SHA256 v3 (одна для XML и JSON, отличается только формат timestamp): inner = HMAC_SHA256(secret, timestamp) signature = lowercase(HMAC_SHA256(secret, login + inner)) - XML — timestamp в формате `yyyyMMddHHmmss` UTC, передаётся в `
`, рядом `` и ``. - JSON — timestamp ISO-8601 UTC в заголовке `X-Timestamp`, рядом `X-Login`, `X-Signature`, `X-Signature-Version: 3`. - Допустимый дрейф времени — ±20 минут. Просрочка: XML `ResultCode=101`, JSON `401 AUTH_INVALID_TIMESTAMP`. - Тело запроса в подпись НЕ входит — подписываются только timestamp и login. Тестовые доступы: `login=demo_login`, `secret=demo_password`, `project_id=1001` (XML и JSON v3). Тест-векторы подписи — `https://pay-sandbox.digitalspb.com/sigtest.json`: зафиксированные вход и результат, включая промежуточный `inner` и негативные векторы. Прогоните их до первого сетевого вызова; контрольный вектор: `login=demo_login`, `secret=demo_password`, `timestamp=2026-02-10T17:56:37Z` → `signature=0c902262f3cfc2282b05a2ccf38f59cce766617badf15c458eb32547f0a0841e`. ## Эндпоинты - XML Merchant API v2.6 — `POST https://pay-sandbox.digitalspb.com/API/XML/InvoiceManagementService.ashx` (операция определяется корневым тегом `/`, не заголовком). - REST JSON Payment API v3 — `https://pay-sandbox.digitalspb.com/api/v3/projects/{project_id}/...` (инвойсы, контракты, `POST /billing/check`). ## MCP-сервер (для ИИ-агентов) Песочница отдаёт MCP-сервер: `https://pay-sandbox.digitalspb.com/mcp`, транспорт Streamable HTTP (`type: "http"`), авторизация не требуется. Через него агент читает документацию и делает вызовы песочницы сам — подпись, контракты, инвойсы, PIN, статус, возврат. - Инструменты документации: `list_doc_sections`, `get_docs` (`product` — `callisto` | `subscriptions`). - Подпись: `sign_request` (`protocol` — `json` | `xml` | `subscription`). - Живые вызовы: `check_billing`, `create_contract`, `authorize_contract`, `cancel_contract`, `create_invoice`, `get_invoice`, `authorize_invoice`, `cancel_invoice`, `refund_invoice` — каждый принимает `protocol` (`json` | `xml`). - Коллбеки: `callback_last` — последние события по вашим кредам со статусом доставки. Приёмник, туннель и свой HTTPS-адрес не нужны: журнал читается на стороне песочницы. - Ответы инструментов разобраны: `summary`, `next_step` (что делать дальше), `data` с расшифровкой статуса и кодов результата, `error` с подсказкой, `raw` — сырой ответ. - Креды по умолчанию — публичный партнёр песочницы `MCP_test` / `MCP_test_password`, проект `70`; передавать их не нужно, инструменты подставляют сами. Свои sandbox-доступы — аргументами `login`, `secret`, `project_id`. Прод-секреты в аргументы инструментов передавать нельзя: их видит ИИ-клиент пользователя. - Лимиты на IP: 60 запросов в минуту (всплеск 20), до 4 одновременных соединений. Инструкция по подключению (VS Code, Claude Code, Cursor, Claude Desktop) — в разделе «MCP-сервер для ИИ-агентов» справочника: https://pay-sandbox.digitalspb.com/help.md ## Документация - [Вся документация одним файлом](https://pay-sandbox.digitalspb.com/llms-full.txt): этот индекс плюс полный справочник — один запрос, весь контекст. Если вы ИИ-агент и собираетесь писать интеграцию, начните с него. - [Однофайловый клиент, Python](https://pay-sandbox.digitalspb.com/client.py): copy-paste клиент без зависимостей — подпись HMAC-SHA256 v3 с прогоном тест-векторов до первого сетевого вызова, CreateInvoice → AuthorizeInvoice → GetInvoice, проверка подписи коллбека. Копируйте реализацию подписи отсюда, а не пишите по памяти. Node.js-версия — `https://pay-sandbox.digitalspb.com/client.js`. - [Справочник в Markdown](https://pay-sandbox.digitalspb.com/help.md): полная документация — сценарии оплаты (мобильный биллинг, банковская карта, СБП), все методы с таблицами полей, эмуляция ошибок, коллбеки, справочники кодов. Машинная копия HTML-страницы, содержит все варианты примеров (XML/JSON, curl/PHP/Python). - [Справочник в Markdown, EN](https://pay-sandbox.digitalspb.com/help.md?lang=en): то же на английском. - [OpenAPI XML API v2.6](https://pay-sandbox.digitalspb.com/openapi.yaml): спецификация XML-протокола, канонический адрес песочницы. JSON-копия — `https://pay-sandbox.digitalspb.com/openapi.json`, английская версия — `?lang=en`. - [OpenAPI Payment API v3](https://pay-sandbox.digitalspb.com/openapi/callisto_json_v3.yaml): спецификация REST JSON. JSON-копия — `/openapi/callisto_json_v3.json`, английская версия — `?lang=en`. - [Postman-коллекция](https://pay-sandbox.digitalspb.com/postman.json): готовые запросы с pre-request script, который считает подпись HMAC-SHA256 v3 сам. Импортируется и в Insomnia. - [Карта сайта](https://pay-sandbox.digitalspb.com/sitemap.xml): все страницы документации списком; правила обхода — `https://pay-sandbox.digitalspb.com/robots.txt`. ## Ошибки JSON v3 Каждый ответ об ошибке содержит `error.next_step` — императивную инструкцию, что сделать дальше (например, «возьмите свежий X-Timestamp: допустимый дрейф ±20 минут»). Читайте её и правьте запрос по ней. Ветвитесь в коде по `error.code`: тексты `message` и `next_step` могут меняться, поле `next_step` — песочное, в боевом контракте его нет. ## Если вы знаете Stripe / ЮKassa — что здесь иначе - `Idempotency-Key` и `Idempotence-Key` игнорируются (оба написания, молча). Идемпотентность — уникальный `merchant_order_id` + проверка `GET /invoices?merchant_order_id=` перед пересозданием; пока у клиента есть незакрытый инвойс, новый отклоняется `409 INVOICE_ALREADY_EXISTS`. - Деньги — только вложенным объектом `order.price{amount, currency, vat_included}`; `amount` — строка `"100.00"`, не число. - Уведомление по умолчанию — конверт платформы `{id, type, created_at, project_id, data}`: событие об оплате — `type: "payment.updated"`, исход читается из `data.invoice.payment_status`. Прежний конверт песочницы (флаг проекта `json_callback_format = legacy`): `event_type: "payment.completed"` (`event` — deprecated-алиас), статус — `processed`, признак оплаты — `payment_status: "PAID"`. Значений `payment.success` и `paid` не существует. - Подпись коллбека без второй пары ключей проекта (`Login2Merchant`/`Password2Merchant`) покрывает только метку времени, не тело: статус подтверждать `GET /invoices/{id}`. С парой ключей конверт платформы подписывается версией 4 по сырому телу. - Ретраи коллбеков: сетка платформы 2→2→5→5→10→10 секунд, максимум 7 попыток (дальше боевая сетка идёт 60s×14, 300s×21, 600s×132 — сутки, песочница обрывает доставку по минутному окну), успех — только `2xx`; дедупликация по `event_id`. - Регистрации вебхука через API нет: callback URL задают администраторы песочницы. Полная таблица расхождений — раздел «Если вы знаете Stripe или ЮKassa» справочника. ## Песочные ручки - `test_info.expected_billing_result` (JSON) / `` (XML) — `Success` | `Failed` | `SuccessSequencePayment` | `FailedSequencePayment`: задаёт исход тарификации. - `test_info.callback_delay_seconds` (0–60, по умолчанию 10) — задержка первой отправки коллбека. - `test_info.callback_url` — свой адрес коллбека вместо настроенного у проекта; доступен только партнёрам с включённым флагом, только `https`, приватные адреса запрещены. - `test_info.force_http_status` (JSON, `createInvoice`) — `403` | `500` | `503`: попросить отказ инфраструктуры, чтобы проверить свою обработку. Сами по себе они в песочнице не случаются. Отказ приходит до создания счёта — клиент не занимается дедупликацией. Коды, достижимые обычным сценарием (`400`, `401`, `404`, `409`, `422`), ручка не выдаёт. - `MerchantOrderID` / `merchant_order_id`, содержащий `ERR_NNN` (например `ERR_210`, `ERR_500`, `ERR_RANDOM`), возвращает соответствующий код ошибки. - Последние 4 цифры номера карты в карточном флоу: `0001`–`0005` — отказы банка (недостаточно средств, блокировка, лимит, отказ, истёк срок). - PIN для `POST /invoices/{invoice_id}/authorize` — `1234`, три попытки. Подробности каждой ручки — в разделе «Песочные ручки (test_info)» справочника. ## Другие сервисы - [Subscription Service — подписки](https://subs-sandbox.digitalspb.com/llms.txt): отдельный XML-сервис с собственной подписью и своим набором методов. ## Дополнительно - [HTML-версия справочника](https://pay-sandbox.digitalspb.com/help): та же документация для человека. - [Swagger UI](https://pay-sandbox.digitalspb.com/docs): интерактивный просмотр всех трёх OpenAPI-спек.