# BaaS

# Тестирование ЭСП

Для тестирования создания ЭСП используется отдельный sanbox сервис, которые в зависимости от переданных ФИО создает ЭСП для проведения успешных и неуспещных операций.

# Подключение к тестовому окружению

Перед началом интеграции обратитесь в Службу поддержки (opens new window) для получения:

  • client_id и client_secret OAuth-приложения;
  • доступа к Sandbox для API виртуальных счетов;
  • (опционально) настройки webhook URL для уведомлений о статусе кошельков.

Эти данные используются для получения access_token и выполнения запросов к API.

# Окружения API виртуальных счетов

Environment Base URL
Sandbox https://sandbox-payment-tokens.mandarin.io
Production https://payment-tokens.mandarin.io

# Скоупы OAuth

Для работы с виртуальными счетами запрашивайте скоупы через пробел, например:

payment-tokens:tokens.write payment-tokens:tokens.read payment-tokens:otp.write
Скоуп Назначение
payment-tokens:tokens.write Создание ЭСП
payment-tokens:tokens.read Проверка статуса ЭСП
payment-tokens:otp.write Отправка и подтверждение OTP

# Аутентификация

Запросы к API виртуальных счетов в тестовом окружении аутентифицируются по протоколу OAuth 2.0 (Bearer). Подробнее — в разделе Аутентификация запросов.

# Тестовые ФИО для создания ЭСП

В Sandbox результат создания кошелька зависит от переданных ФИО:

# Успешное создание кошелька

Поле Значение
first_name Успех
last_name Успешный
middle_name Успехович

# Ошибка создания кошелька

Поле Значение
first_name Неуспех
last_name Неуспешный
middle_name Неуспехович

# Создание виртуального счета (ЭСП)

Запрос

curl --request POST \
  --url https://sandbox-payment-tokens.mandarin.io/api/v1/tokens/generate \
--header 'Mid: {{mid}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data-raw '{
    "first_name": "Иван",
    "last_name": "Иванов",
    "middle_name": "Иванович",
    "birth_date": "1990-12-22",
    "citizenship": "RU",
    "registration_address": "г. Москва, ул. Петровка, д.2, кв.1",
    "living_address": "г. Москва, ул. Петровка, д.2, кв.1",
    "document": {
        "document_type": "Passport",
        "serial": "1234",
        "number": "123456",
        "issue_date": "2002-04-24T15:23:14.969Z",
        "birth_place": "г. Москва",
        "issuer": "ОВД района Фили Давыдково",
        "issue_code": "404-004",
        "expiration_date": null
    },
    "inn": "1234567890",
    "snils": "140-120-150 35",
    "phones": [
        {
            "phone": "79004001234",
            "type": "Personal"
        }
    ],
    "email": "ivanoff@mail.ru",
    "phone_check": true,
    "terms_agreement": true,
    "is_public_official_person": false,
    "presence_of_beneficiary": false,
    "beneficiary_information": false,
    "exist_fatf_government_bills": false,
    "affiliation_with_foreign_taxpayers": false
}'

Ответ в случае успешного запроса на создание виртуального счета (ЭСП) (200 ОК)

{
    "id": "06dca2f1-4e1c-44e7-8848-3e9e3adba875",
    "status": "Processing",
    "created_at": "2025-11-21T10:33:27.021823Z",
    "processed_at": null,
    "finished_at": null
}

# Тестирование card2wallet2account

Сценарий card2wallet2account (пополнение ЭСП с карты + частичный роутинг саб-мерчантам) тестируется в Sandbox. Техническое описание операции — в разделе BaaS.

# Чеклист перед первым тестовым платежом

  • ✓ Получены sandbox client_id, client_secret, MID
  • ✓ OAuth-токен запрашивается с нужными скоупами: secure:transactions.write payment-tokens:tokens.read (для создания ЭСП дополнительно: payment-tokens:tokens.write payment-tokens:otp.write)
  • ✓ Создан и активирован тестовый ЭСП (status = Success) — см. Тестовые ФИО
  • ✓ Создан хотя бы один accountId саб-мерчанта
  • ✓ Подключён сценарий card2wallet2account у менеджера Mandarin
  • ✓ Настроен callback URL (доступен извне или через туннель)
  • orderId уникален для каждого запроса

# Тестовые сценарии

# Сценарий Ожидание
1 Полный роутинг: price = 100, routing = 100 Успех, все средства распределены
2 Частичный роутинг: price = 100, routing = 50 Успех, 50 ₽ на саб-мерчанта, 50 ₽ на кошельке
3 Превышение: price = 100, routing = 150 Ошибка 400
4 ЭСП не активирован (status != Success) Ошибка при создании транзакции
5 Неверный accountId Ошибка при создании транзакции
6 Повторный orderId Ошибка или идемпотентный ответ (зависит от настроек)

# Проверка остатка на кошельке

После успешного платежа с частичным роутингом проверьте баланс:

curl --request GET \
  --url https://sandbox-payment-tokens.mandarin.io/api/v1/tokens/{{payment_token_id}}/wallet/balance \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Mid: {{mid}}'

При возникновении ошибок см. BaaS (ЭСП) в справочнике кодов ошибок.