# Тестирование
# Тестирование платежных продуктов
# Тестовые карты
Данные карт для всех платежных запросов на тестовом (sandbox) окружении.
Параметр | Значение | Комментарий |
---|---|---|
Срок действия | Любой | Позднее текущего месяца в формате ММ/ГГ |
Имя держателя карты | CARD HOLDER | |
CVV | 123 | |
Номер карты | 4929509947106878 | Для имитации успешных транзакций без 3DSecure |
Номер карты | 4692065455989192 | Для имитации успешных транзакций с 3DSecure |
Номер карты | 4485913187374384 | Для имитации неуспешных транзакций без 3DSecure |
Номер карты | 4556058936309366 | Для имитации неуспешных транзакций с 3DSecure |
Номер карты | 5192618384533242 | Для имитации интерактивной оплаты с принудительным переводом карты в payout-only |
# Коллекция для Postman
Чтобы сделать процесс тестирования и ознакомления с возможностями платежного API удобнее, мы подготовили коллекции для Postman. Для работы с ними необходимо пройти следующие шаги:
Загрузить и сохранить как файл коллекцию mandarin_api (opens new window).
Установить и запустить программу Postman (opens new window).
Импортировать коллекцию
mandarin_api.postman_collection.json
, выбрав "File" -> "Import..."
Затем нажать на кнопку "Upload Files" и выбрать сохраненный файл коллекции.
- Прописать свои авторизационные данные в переменные коллекции. Для этого нужно нажать на "хлебные крошки" рядом с названием коллекции, затем выбрать пункт меню "Edit".
В открывшемся окне необходимо перейти на закладку "Variables" и прописать напротив переменных merchant_id
и secret
значения "Merchant id" и "Secret" из вашего личного кабинета.
Если вы пропишете авторизационные данные из тестового личного кабинета, то транзакция будет выполнена на тестовом (sandbox) окружении, а если из боевого - то на боевом (production).
В заключение, надо сохранить изменения кнопкой "Update".
- Вы можете отправлять запросы!
Рекомендуем запускать их по порядку (нажатием на кнопку "Send"). При этом некоторые запросы в названии имеют префикс с восклицательным знаком:
- ! Одностадийная оплата.
- ! Двухстадийная оплата - Авторизация.
- ! Токенизация полных карточных данных.
Для успешного завершения таких запросов нужно открыть в браузере ссылку, которая вернется в параметре ответа userWebLink
. Иначе некоторые последующие запросы будут завершаться с ошибкой, поскольку ссылаются на их результаты.
- Откройте в браузере ссылку
userWebLink
.
Нужно будет ввести данные карты:
Для тестового окружения: используйте номер карты
4692065455989192
для успешной операции, остальные данные - любые.Для боевого окружения: вводите данные своей реальной карты. При этом с нее будут списаны денежные средства.
Потом нажмите на кнопку "Оплата".
Если вы запрашивали токенизацию, то на этом процесс завершен.
Если вы выполняли оплату, то откроется страница со успешным статусом оплаты.
Тестовый терминал не поддерживает авторизацию по токену карты. Поэтому запрос "% Двухстадийная оплата - Авторизация с использованием токена карты" будет неуспешен. Вы можете обговорить возможность авторизации по токену карты с вашим менеджером при заведении боевого терминала.
Если результат выполнения запроса в Postman вас устраивает, то вы можете легко сгенерировать код для отправки этого запроса на любом языке программирования средствами Postman.
Для этого нажмите на кнопку "Code" в правой части окна (как на рисунке ниже). В открывшимся окне выберете язык программирования и скопируйте исходный код.
# Проверка баланса для выплат
Запрос возвращает константу 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 ). |