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

# Тестирование платежных продуктов

# Тестовые карты

Данные карт для всех платежных запросов на тестовом (sandbox) окружении.

Параметр Значение Комментарий
Срок действия Любой Позднее текущего месяца в формате ММ/ГГ
Имя держателя карты CARD HOLDER
CVV 123
Номер карты 4929509947106878 Для имитации успешных транзакций без 3DSecure
Номер карты 4692065455989192 Для имитации успешных транзакций с 3DSecure
Номер карты 4485913187374384 Для имитации неуспешных транзакций без 3DSecure
Номер карты 4556058936309366 Для имитации неуспешных транзакций с 3DSecure
Номер карты 5192618384533242 Для имитации интерактивной оплаты с принудительным переводом карты в payout-only

# Коллекция для Postman

Чтобы сделать процесс тестирования и ознакомления с возможностями платежного API удобнее, мы подготовили коллекции для Postman. Для работы с ними необходимо пройти следующие шаги:

  1. Загрузить и сохранить как файл коллекцию mandarin_api (opens new window).

  2. Установить и запустить программу Postman (opens new window).

  3. Импортировать коллекцию mandarin_api.postman_collection.json, выбрав "File" -> "Import..."

File -> Import...

Затем нажать на кнопку "Upload Files" и выбрать сохраненный файл коллекции.

Upload Files

  1. Прописать свои авторизационные данные в переменные коллекции. Для этого нужно нажать на "хлебные крошки" рядом с названием коллекции, затем выбрать пункт меню "Edit".

Edit

В открывшемся окне необходимо перейти на закладку "Variables" и прописать напротив переменных merchant_id и secret значения "Merchant id" и "Secret" из вашего личного кабинета.

Если вы пропишете авторизационные данные из тестового личного кабинета, то транзакция будет выполнена на тестовом (sandbox) окружении, а если из боевого - то на боевом (production).

Редактирование значений переменных коллекции

В заключение, надо сохранить изменения кнопкой "Update".

  1. Вы можете отправлять запросы!

Рекомендуем запускать их по порядку (нажатием на кнопку "Send"). При этом некоторые запросы в названии имеют префикс с восклицательным знаком:

  • ! Одностадийная оплата.
  • ! Двухстадийная оплата - Авторизация.
  • ! Токенизация полных карточных данных.

Для успешного завершения таких запросов нужно открыть в браузере ссылку, которая вернется в параметре ответа userWebLink. Иначе некоторые последующие запросы будут завершаться с ошибкой, поскольку ссылаются на их результаты.

Отправка запроса, получение

  1. Откройте в браузере ссылку userWebLink.

Нужно будет ввести данные карты:

  • Для тестового окружения: используйте номер карты 4692065455989192 для успешной операции, остальные данные - любые.

  • Для боевого окружения: вводите данные своей реальной карты. При этом с нее будут списаны денежные средства.

Потом нажмите на кнопку "Оплата".

Заполнение данных карты на платежной странице

Если вы запрашивали токенизацию, то на этом процесс завершен.

Если вы выполняли оплату, то откроется страница со успешным статусом оплаты.

Успешный статус

  1. Тестовый терминал не поддерживает авторизацию по токену карты. Поэтому запрос "% Двухстадийная оплата - Авторизация с использованием токена карты" будет неуспешен. Вы можете обговорить возможность авторизации по токену карты с вашим менеджером при заведении боевого терминала.

  2. Если результат выполнения запроса в Postman вас устраивает, то вы можете легко сгенерировать код для отправки этого запроса на любом языке программирования средствами Postman.

Для этого нажмите на кнопку "Code" в правой части окна (как на рисунке ниже). В открывшимся окне выберете язык программирования и скопируйте исходный код.

Генерирование code snippet

# Проверка баланса для выплат

Запрос возвращает константу 100500 на тестовом (sandbox) окружении.

GET https://secure.mandarinpay.com/api/account/channels/{name}/balance

В качестве значения {name} необходимо передать параметр из таблицы ниже:

Параметр Описание параметра
psb_direct Для запроса баланса расчетного счета, открытого в ПАО Промсвязьбанк (ПСБ)

# Тестирование выплат через СБП

Особенности работы сервиса выплат через СБП в тестовом режиме:

  • Для активации тестового режима необходимо обратиться в Службу поддержки (opens new window);

  • Запрос на получение списка банков возвращает список из 5 банков;

  • Для успешного запроса с ФИО и получения статуса выплаты success необходимо использовать телефон +79001234567, при использовании иного теелфона будет получен статус транзакции fail;

  • Для успешного запроса без ФИО и получения статуса выплаты success необходимо использовать телефон +79007654321, при использовании иного теелфона будет получен статус транзакции fail. На запрос статуса в ответе возвращается ФИО Иван Иванович Иванов;

# Получение списка банков

Авторизация - XAuth (opens new window).

Параметр Тип Обязателен Описание
bankName string Нет Наименование банка по которому необходимо проводить фильтрацию, можно указать неполное название, метод вернет все подходящие варианты. При фильтрации регистр игнорируется

Запрос на получение списка банков:

GET https://secure.mandarinpay.com/api/sbp/banks/

Ответ в случае успешного создания запроса:

{
    "banks": [
        {
            "bankId": "100000000008",
            "bankName": "Альфа-Банк",
            "bankBic": "044525593"
        },
        {
            "bankId": "100000000005",
            "bankName": "ВТБ",
            "bankBic": "044525187"
        },
        {
            "bankId": "100000000004",
            "bankName": "Т-Банк",
            "bankBic": "044525974"
        },
        {
            "bankId": "100000000007",
            "bankName": "Райффайзен Банк",
            "bankBic": "044525700"
        },
        {
            "bankId": "100000000111",
            "bankName": "Сбербанк",
            "bankBic": "044525225"
        }
    ]
}

Запрос на получение определённого банка:

GET https://secure.mandarinpay.com/api/sbp/banks?bankName=Сбербанк

Ответ в случае успешного создания запроса:

{
    "banks": [
        {
            "bankId": "100000000111",
            "bankName": "Сбербанк",
            "bankBic": "044525225"
        }
    ]
}

# Создание выплаты с ФИО

Параметр Обязателен
customerInfo Да
customerInfo.phone Да
customerInfo.email Да
customerInfo.firstName Да
customerInfo.lastName Да
customerInfo.middleName Да
payment Да
payment.action Да
payment.orderId Да
payment.price Да
target Да
target.sbp Да
target.sbp.bankId Да
target.sbp.bankBic Да

Запрос:

POST https://secure.mandarinpay.com/api/transactions
{
    "customerInfo": {
        "phone": "+79001234567",
        "email": "test@test.com",
        "firstName": "Иванов",
        "lastName": "Иван",
        "middleName": "Иванович"
    },
    "payment": {
        "orderId": "your_unique_order_id",
        "price": "10.00",
        "action": "payout"
    },
    "target": {
        "sbp": {
            "bankId": "100000000111",
            "bankBic": "044525225"
        }
    }
}

Ответ в случае успешного создания транзакции (200 ОК):

{
	"id": "43913ddc000c4d3990fddbd3980c1725"
}

Ответ в случае, если транзакция не создана (400 Bad request):

{
	"error": "Invalid request"  
}

Ответ в случае попытки создания выплаты с уже существующим значением orderId (400 Bad Request):

{
    "error": "Duplicate order id 5f2fdcf6-0b78-4dd7-be9f-212c7c058001 found for incomplete payout transaction",
    "errorCode": -2
}

# Создание выплаты без ФИО

Выплаты без ФИО осуществляются в два этапа - создание транзакции и её подтверждение или отмена после проверки статуса и данных.

Параметр Обязателен
customerInfo Да
customerInfo.phone Да
customerInfo.email Да
payment Да
payment.action Да
payment.orderId Да
payment.price Да
target Да
target.sbp Да
target.sbp.bankId Да
target.sbp.bankBic Да

Запрос:

POST https://secure.mandarinpay.com/api/transactions
{
    "customerInfo": {
        "phone": "+79007654321",
        "email": "test@test.com"
    },
    "payment": {
        "orderId": "your_unique_order_id",
        "price": "10.00",
        "action": "payout"
    },
    "target": {
        "sbp": {
            "bankId": "100000000111",
            "bankBic": "044525225"
        }
    }
}

Ответ в случае успешного создания транзакции (200 ОК):

{
	"id": "43913ddc000c4d3990fddbd3980c1725"
}

Ответ в случае, если транзакция не создана (400 Bad request):

{
	"error": "Invalid request"  
}

Ответ в случае попытки создания выплаты с уже существующим значением orderId (400 Bad Request):

{
    "error": "Duplicate order id 5f2fdcf6-0b78-4dd7-be9f-212c7c058001 found for incomplete payout transaction",
    "errorCode": -2
}

# Проверка статуса запроса без ФИО

Запрос на проверку статуса:

После создания выплаты без ФИО необходимо проверить статус, если телефон был указан тестовый из документации +79007654321, то статус будет success, если указан иной, то на запрос статуса будет получен fail

GET https://secure.mandarinpay.com/api/sbp/43913ddc000c4d3990fddbd3980c1725/status

Ответ в случае успеха:

{
    "status": "success",
    "fio": "Иван Иванович Иванов"
}

Ответ в случае неуспеха:

{
    "status": "fail",
    "fio": null
}

# Подтверждение выплаты без ФИО

Запрос на подтверждение выплаты:

После получения успешного статуса необходимо подтвердить выплату, чтобы получателю ушли средства.

POST https://secure.mandarinpay.com/api/sbp/43913ddc000c4d3990fddbd3980c1725/confirm

Ответ в случае успешного подтверждения выплаты (200 ОК)

# Отмена выплаты без ФИО

Выплату можно отменить, если еще не был отправлен запрос на подтверждение confirm.

Запрос на отмену выплаты:

POST https://secure.mandarinpay.com/api/sbp/43913ddc000c4d3990fddbd3980c1725/reject

Ответ в случае успешной отмены выплаты (200 ОК):

{
	"id": "43913ddc000c4d3990fddbd3980c1725"
}

# Тестирование упрощенной идентификации

Данные для запросов по упрощенной идентификации на тестовом (sandbox) окружении.

В этом случае СМС-сообщение с кодом для подтверждения номера телефона не отправляется. Нужно использовать код из таблицы ниже.

Параметр Значение Комментарий
firstName Полиграф
patronymic Полиграфович
lastName Шариков
smsCode 000000 Все цифры - нули. Количество цифр в СМС-коде
задается в настройках мерчанта

Остальные параметры могут быть любыми.

# Примеры запросов

Пример запроса на идентификацию по СНИЛС:

POST https://secure.mandarinpay.com/api/personidentification
{
	"firstName": "Полиграф",
	"patronymic": "Полиграфович",
	"lastName": "Шариков",
	"passportSeries": "0306",
	"passportNumber": "322484",
	"snils": "11201709284",
	"phone": "+79001234567"
}

Пример запроса на идентификацию по ИНН:

ОБРАТИТЕ ВНИМАНИЕ!

Параметр snils обязателен так же для запроса на идентификацию по ИНН, но в данном случае передается значение NULL.

POST https://secure.mandarinpay.com/api/personidentification
{
    "firstName": "Полиграф",
    "lastName": "Шариков",
    "patronymic": "Полиграфович",
    "passportSeries": "1111",
    "passportNumber": "111111",
    "snils": "",
    "inn": "501716749325",
    "phone": "+79001234567"
}

Ответ в случае успешного создания запроса (200 ОК):

{
	"id": "794d3cc7-a2b4-4579-9173-bafc7d7dc29d"
}

Пример запроса с передачей СМС-кода на проверку:

PUT https://secure.mandarinpay.com/api/personidentification/{id}

Ответ в случае успешного создания запроса (200 ОК):

{
	"smsCode": "000000"
}

Запрос статуса идентификации:

GET https://secure.mandarinpay.com/api/personidentification/{id}

Ответ в случае успешного завершения запроса (200 ОК):

Указаны данные Шариков Полиграф Полиграфович. Еще не произведен запрос с передачей кода на проверку.

{
    "id": "485fc237-a8b8-45f9-816d-fb7de3715e2b",
    "phoneVerified": null,
    "phoneVerificationFinished": false,
    "personVerified": true,
    "personVerificationFinished": true,
    "personVerificationError": "Sandbox mode"
}

Указаны данные Шариков Полиграф Полиграфович. Произведена отправка кода на проверку.

{
    "id": "485fc237-a8b8-45f9-816d-fb7de3715e2b",
    "phoneVerified": true,
    "phoneVerificationFinished": true,
    "personVerified": true,
    "personVerificationFinished": true,
    "personVerificationError": "Sandbox mode"
}

Указаны данные отличные от Шариков Полиграф Полиграфович. Произведена отправка кода на проверку.

{
    "id": "d3552b7c-80a6-4e0e-bf1f-ad0c7ff2d705",
    "phoneVerified": true,
    "phoneVerificationFinished": true,
    "personVerified": false,
    "personVerificationFinished": true,
    "personVerificationError": "Sandbox mode"
}

# Возможные ошибки

код ошибки 401 - Не пройдена авторизация запроса, проверьте корректность авторизации.

{
    "error": "Authentication error: "
}

код ошибки 400 - Значение id не указано для запроса статуса идентификации.

{
    "sessionId": [
        "The value '{id}\n' is not valid."
    ]
}

код ошибки 400 - В запросе на идентификацию не указан параметр snils.

{
    "snils": [
        "Required property 'snils' not found in JSON. Path '', line 9, position 1."
    ]
}

код ошибки 400 - Параметр snils содержит не допустимые символы или превышает размер поля.

{
    "snils": [
        "The field Snils must match the regular expression '[0-9]{11}'."
    ]
}

Ошибки 5xx - Ошибка на стороне сервера. (Встречается крайне редко)

# Тестирование сервиса Самозанятых

Тестирование сервиса СМЗ возможно только в режиме sandbox, для подключения данного режима обратитесь в Службу поддержки (opens new window) Для получения определенного статуса чека необходимо использовать один из двух тестовых ИНН:

Параметр Описание
185796979287 устанавливается статус SUCCESS при регистрации чека.
058104954632 устанавливается статус FAILED при регистрации чека.

# Подключение самозанятого

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

Параметр Обязательность Описание
inn Да Идентификационный номер налогоплательщика физического лица.
callback_url Да URL-адрес, на который будет отправлен ответ.
is_sandbox Да Параметр тестового режима: true;1;да;yes

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

curl --location 'https://api.psp.io/self-employed/v1/tin/bind' \
--header 'MID: 1234' \
--header 'Authorization: Bearer Nwii9xFAfHjAWkk6PPOFUmpheFe123' \
--data '{
    "is_sandbox": true,
    "inn": "185796979287",
    "callback_url": "https://webhook.site/28b30c34-9fbd-4e98-b1b7-e20a999d530b"
}'

В случае успешного выполнения, ответ будет включать в себя:

  • id: уникальный идентификатор запроса.
  • inn: привязанный идентификационный номер налогоплательщика.

Синхронный ответ:

{
  "id": "3ab4e73d-a197-4a2f-9b92-69ef07468b04",
  "inn": "185796979287"
}

Callback:

ОБРАТИТЕ ВНИМАНИЕ!

Необходимо заранее сообщить url для отправки коллбэков в Mandarin!

{
   "id": "80cf6b02-795f-486f-a515-562a41a87429",
   "inn": "185796979287",
   "status": 0,
   "message": null
}

Параметры Callback:

Параметр Тип Описание
id uuid Идентификатор запроса
inn string ИНН
status integer Статус ответа от СМЗ, возможные варианты:
0 - успех;
1 - завершен с ошибкой;
8 - окончен срок перманентного запроса в ФНС;
408 - ошибка timeout (долгий ожидание ответа от ФНС)
message string Текст ошибки на статусы: 1, 8, 408

# Проверка статуса самозанятого

При вызове метода проверки статуса (opens new window) самозанятого, нужно передавать параметры в querystring с результатами, которые вы хотите получить:

Query Params Value Description
is_sandbox true;
1;
да;
yes
Параметр тестового режима, использовать можно любое из перечисленных значений
state ACTIVE;
NOT_SELF_EMPLOYEE
Статус СМЗ, указать можно любой из этого списка (opens new window)

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

curl --location 'https://api.psp.io/self-employed/v1/tin/185796979287?is_sandbox=true&state=ACTIVE' \
--header 'MID: 1234' \
--header 'Authorization: Bearer Nwii9xFAfHjAWkk6PPOFUmpheFe123'

Пример ответа:

{
    "id": "test-d4dc85c1-765a-4865-bea6-01b215a333ed",
    "inn": "185796979287",
    "status": "ACTIVE"
}

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

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

Параметр Обязательность Описание
inn Да ИНН (идентификационный номер налогоплательщика), связанный с чеком.
цена Да Цена товара/услуги
title Да Название товара/услуги в чеке
is_sandbox Да Параметр тестового режима: true;1;да;yes

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

curl --location 'https://api.psp.io/self-employed/v1/receipts' \
--header 'MID: 1234' \
--header 'Authorization: Bearer Nwii9xFAfHjAWkk6PPOFUmpheFe123' \
--data '{
    "is_sandbox": true,
    "inn": "185796979287",
    "price": 100,
    "title": "Оплата заказа №1234"
}'

Синхронный ответ с тестовым ИНН 185796979287:

{
  "cheque_id": "20172zyc8z",
  "inn": "185796979287",
  "message": "",
  "session_id": "edccadd7-e5f9-4de2-8088-64e6adf0959b",
  "status": "success",
  "url": "https://lknpd.nalog.ru/api/v1/receipt/623406197779/20172zyc8z/print",
  "title": "Оплата заказа №1234"
}

Синхронный ответ с тестовым ИНН 058104954632:

{
  "cheque_id": null,
  "inn": "058104954632",
  "message": "Inactive TIN 058104954632 failed/ACTIVE",
  "session_id": "edccadd7-e5f9-4de2-8088-64e6adf0959b",
  "status": "failed",
  "url": null,
  "title": "Оплата заказа №1234"
}

Параметры ответа:

  • cheque_id - уникальный идентификатор созданного чека.
  • inn - ИНН, связанный с чеком.
  • message - дополнительная информация или сообщение об ошибке.
  • session_id - id созданного чека.
  • status - статус запроса, см. список статусов ниже.
  • url - URL-адрес для печати созданного чека.
  • title - Название товара/услуи, указанные в запросе.

Список статусов:

Статус Описание
success Чек успешно создан
failed Не удалось создать чек. Подробности ошибки можно проверить в полученном ответе (message).