Перейти к основному содержимому

Сценарий без использования виджета токенизации карты

Этот сценарий описывает отправку денежного перевода, если вы приняли решение получать и хранить данные банковских карт на своей стороне (необходимо выполнять дополнительные требования стандарта PCI DSS).

Общая схема денежного перевода

Общая схема денежного перевода

Шаг 1. Предварительный расчёт курса (опционально)

Перед стартом перевода вы можете запросить курс конвертации валюты с помощью метода calculate.

Конвертация может проходить по прямому или обратному курсу. Возможность запроса прямого или обратного курса может зависеть от направления и валюты перевода.

В ответ на запрос будет отправлен актуальный курс валюты, итоговая сумма списания и выплаты. Указанный курс не резервируется, является справочным и может измениться. Резервирование курса происходит после старта мультисессии.

Примеры запросов
curl -X POST \
https://demo.bank131.ru/api/v1/calculate \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"amounts": {
"source": {
"amount": 357912,
"currency": "RUB"
},
"destination": {
"amount": null,
"currency": "TRY"
}
}
}
Примеры ответов
{
"amounts": {
"source": {
"amount": 357913,
"currency": "RUB"
},
"destination": {
"amount": 131426,
"currency": "TRY"
},
"transfer_fee": {
"amount": 0,
"currency": "RUB"
},
"sms_fee": {
"amount": 0,
"currency": "RUB"
},
"payment": {
"amount": 5400,
"currency": "RUB"
}
},
"exchanges": {
"source": {
"amount": 357912,
"currency": "RUB"
},
"destination": {
"amount": null,
"currency": "TRY"
},
"rate": {
"fx_rate": 2.7233,
"quantity": 1
}
}
}

Шаг 2. Старт перевода

Отправьте запрос на старт перевода с помощью метода session/multi/init. После старта мультисессии будут произведены проверки отправителя и возможности выплаты получателю, рассчитан и зарезервирован итоговый курс валюты с сумой списания и выплаты.

Курс операции резервируется не более чем на 5 минут. При попытке провести операцию по истечении этого времени, сессия завершится ошибкой rate_has_changed.

Примеры запросов
curl -X POST \
https://demo.bank131.ru/api/v2/session/multi/init \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_list": [
{
"amount_details": { // Дублируется в payout_list, суммы и валюта должны совпасть
"amount": 37700,
"currency": "TJS"
},
"customer": {
"reference": "lucky"
},
"participant_details": {
"sender": {
"citizenship_country_iso3": "TRY",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"state": "Московская область",
"city": "Уренгой",
"postal_code": "119900",
"street": "Конаковская",
"building": "99",
"flat": "1",
"date_of_birth": "1998-03-15",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/"
},
"payment_details": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "4111111111111111"
}
}
}
}
],
"payout_list": [ // Дублируется в payment_list, суммы и валюта должны совпасть
{
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"date_of_birth": "2000-11-08",
"country_iso3": "TJK",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
},
"payout_details": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "2204320396205389"
}
}
}
}
]
}'
Примеры ответов
{
"status": "ok",
"session": {
"id": "ps_3808365",
"status": "in_progress",
"created_at": "2025-08-08T12:39:15.668563Z",
"updated_at": "2025-08-08T12:39:16.388348Z",
"payout_list": [
{
"id": "po_955259",
"status": "in_progress",
"created_at": "2025-08-08T12:39:16.439833Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"payment_metadata": {},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"payment_list": [
{
"id": "pm_2765898",
"status": "in_progress",
"created_at": "2025-08-08T12:39:16.439730Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
]
}
}

Дождитесь вебхука ready_to_confirm с информацией о готовности провести операцию по указанному курсу и итоговой суммой списания и выплаты.

В вебхуке в объекте confirm_information.exchanges будет передан актуальный курс валюты, итоговая сумма списания и выплаты.

Если выполняется перевод в Турцию с выдачей наличных, в вебхуке в объекте details будет код получения наличных tcn_code_encoded в кодировке BASE64. Отправитель должен самостоятельно сообщить его получателю, по коду будут выданы наличные в пункте выдачи. Код будет действителен, если вы получите вебхук payment_finished со статусом accepted.

Пример вебхука
{
"status": "ok",
"session": {
"id": "ps_3808364",
"status": "in_progress",
"created_at": "2025-08-08T12:30:02.616632Z",
"updated_at": "2025-08-08T12:30:04.489651Z",
"payout_list": [
{
"id": "po_955258",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401467Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"payment_list": [
{
"id": "pm_2765897",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401320Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
],
"next_action": "confirm"
},
"confirm_information": {
"exchanges": [
{
"id": "pm_2765897",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 306237,
"currency": "RUB"
}
},
{
"id": "po_955258",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
}
]
}
}

Шаг 3. Подтверждение перевода

Проверьте данные перевода и подтвердите его методом session/confirm. На подтверждение сессии отводится не более 5 минут. Вы можете отменить перевод с методом session/cancel.

Пример запроса
curl -X POST \
https://demo.bank131.ru/api/v2/session/confirm \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3808364",
"confirm_information": {
"exchanges": [
{
"id": "pm_2765897",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
},
{
"id": "po_955258",
"source": {
"amount": 37700,
"currency": "TJS"
},
"destination": {
"amount": 306237,
"currency": "RUB"
},
"fx_rate": "8.123",
"commission": {
"amount": 0,
"currency": "RUB"
}
}
]
}
}'
Пример ответа
{
"status": "ok",
"session": {
"id": "ps_3808364",
"status": "in_progress",
"created_at": "2025-08-08T12:30:02.616632Z",
"updated_at": "2025-08-08T12:32:05.891206Z",
"payments": [
{
"id": "po_955258",
"status": "pending",
"created_at": "2025-08-08T12:30:03.401467Z",
"payment_method": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"payment_metadata": {},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"country_iso3": "TJK",
"date_of_birth": "2000-11-08",
"citizenship_country_iso3": "TJK",
"contacts": {
"phone": {
"full_number": "+43523452345",
"country_iso3": "TJK",
"operator_code": "352",
"short_number": "3452345"
},
"email": "recipient@test.tr"
}
}
}
}
],
"acquiring_payments": [
{
"id": "pm_2765897",
"status": "in_progress",
"created_at": "2025-08-08T12:30:03.401320Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"amounts": {},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530",
"country_iso3": "TJK",
"operator_code": "937",
"short_number": "6151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
],
"actions": {
"confirm": "2025-08-08T12:32:05.949621Z"
}
}
}

После подтверждения сессии у отправителя будут заморожены денежные средства для списания, необходимо подтвердить списание через 3D Secure:

  • Дождитесь вебхука action_required с ссылкой на прохождение 3D Secure и перенаправьте пользователя на прохождение 3D Secure.
  • После успешного прохождения 3D Secure произойдет заморозка денежных средств на карте отправителя.
Пример вебхука
curl -X POST \
https://partner.ru \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "action_required",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"payment_list": [
{
"id": "pm_131",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user@131.ru"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "8801",
"bin": "220220",
"card_id": "05ee8cf7ee103444b384731d74b1b5c87fbb8f751fc3c452c9092fe1245bdc"
}
},
"amount_details": {
"amount": 15000,
"currency": "rub"
},
"amounts": {
"fee": {
"merchant_fee": {
"amount": 10,
"currency": "RUB"
}
}
},
"customer_interaction": {
"type": "redirect",
"redirect": {
"url": "https://bank131.ru?foo=bar",
"base_url": "https://bank131.ru",
"method": "POST",
"qs": {
"foo": "bar"
},
"params": {
"PaReq": "sdfew^//asdhbv",
"MD": "abc75daefnn"
}
}
},
"transaction_info": {
"rrn": "425307614918",
"auth_code": "057441"
}
}
]
}
}'

Шаг 4. Отмена перевода (опционально)

При необходимости вы можете отменить перевод с помощью метода session/cancel.

Пример запроса
curl -X POST \
https://demo.bank131.ru/api/v2/session/cancel \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3808365"
}'
Пример ответа
{
"status": "ok",
"session": {
"id": "ps_3809232",
"status": "in_progress",
"created_at": "2025-08-11T10:14:54.779728Z",
"updated_at": "2025-08-11T10:14:58.370629Z",
"payout_list": [
{
"id": "po_955280",
"status": "pending",
"created_at": "2025-08-11T10:14:55.586736Z",
"payout_details": {
"type": "card",
"card": {
"brand": "mir",
"last4": "5389",
"country_iso3": "RUS"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"recipient": {
"full_name": "Sidor Sidorov Sidorovich",
"first_name": "Sidor",
"last_name": "Sidorov",
"middle_name": "Sidorovich",
"citizenship_country_iso3": "TJK"
}
}
}
],
"payment_list": [
{
"id": "pm_2766741",
"status": "pending",
"created_at": "2025-08-11T10:14:55.586645Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "1111",
"country_iso3": "POL"
}
},
"amount_details": {
"amount": 37700,
"currency": "TJS"
},
"participant_details": {
"sender": {
"full_name": "Ольга Зайцева Александровна",
"first_name": "Ольга",
"last_name": "Зайцева",
"middle_name": "Александровна",
"country_iso3": "RUS",
"city": "Уренгой",
"postal_code": "119900",
"building": "99",
"date_of_birth": "1998-03-15",
"street": "Конаковская",
"flat": "1",
"state": "Московская область",
"identity_document": {
"id_type": "Паспорт иностранного гражданина",
"id_number": "8008 579120",
"issue_date": "2020-03-01"
},
"citizenship_country_iso3": "TRY",
"contacts": {
"phone": {
"full_number": "+79376151530"
},
"email": "sender@test.com"
}
}
},
"payment_options": {
"return_url": "https://www.131.ru/",
"recurrent": false
}
}
]
}
}

Дождитесь вебхука payment_finished cо значением status = cancelled. Сессия отменена, если требуется повторить перевод, создайте сессию заново.

Шаг 5. Выплата получателю

Дождитесь вебхука payment_finished cо значением status = accepted. После выплаты с отправителя будет списана замороженная сумма.

Если в процессе выполнения перевода произойдет ошибка, в вебхуке payment_finished придет код ошибки. Список возможных ошибок

Пример вебхука
curl -X POST \
https://partner.ru \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "payment_finished",
"session": {
"id": "ps_3230",
"status": "accepted",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"payout_list": [
{
"id": "po_2018",
"status": "succeeded",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payout_details": {
"type": "bank_account",
"bank_account": {
"system_type": "ru",
"ru": {
"bic": "*******02",
"account": "****************5734",
"full_name": "***",
"description": "*****",
"is_fast": false
}
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"amounts": {
"fee": {
"merchant_fee": {
"amount": 10,
"currency": "RUB"
}
}
},
"fiscalization_details": {
"professional_income_taxpayer": {
"services": [
{
"name": "****",
"amount_details": {
"amount": "10000",
"currency": "rub"
},
"quantity": 1
}
],
"tax_reference": "*********628",
"receipt": {
"id": "**********",
"link": "https://lknpd.nalog.ru/api/v1/receipt/*****/print"
},
"payer_type": "foreign",
"payer_name": "******"
}
},
"transaction_info": {
"rrn": "425307614918",
"auth_code": "057441"
}
}
]
}
}'
ИИ-помощник