Переводы

Notice: Эта статья посвящена тому, как проводить переводы через Gate и какие запросы и оповещения при этом актуальны.

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

Общая информация

Перевод — это тип платежа, в рамках которого на основании одного исходного запроса для перевода денежных средств от отправителя к получателю последовательно выполняются две операции: списание средств отправителя и зачисление средств получателю. При этом в разных случаях отправителем и получателем могут выступать как одни и те же, так и разные пользователи, для списания и зачисления средств могут использоваться различные платёжные инструменты, а мерчант каждый раз выступает в роли посредника, предоставляющего сервис для таких переводов.

Схемы проведения

Чтобы провести перевод через Gate, необходимо:

  1. Отправить запрос к конечной точке/v2/payment/money_transfer .
  2. При необходимости выполнить вспомогательные процедуры (такие как Аутентификация 3‑D Secure).
  3. Принять от платёжной платформы оповещение о результате перевода.

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

Рис. 1. Проведение перевода
  1. Пользователь (отправитель перевода) на стороне веб-сервиса инициирует перевод.
  2. От веб-сервиса на заданный URL Flashpay передаётся запрос на проведение платежа.
  3. Запрос на проведение платежа поступает в платёжную платформу.
  4. В платёжной платформе выполняется приём запроса с проверкой его корректности.
  5. От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности.
  6. В платёжной платформе выполняется обработка запроса.
  7. От платёжной платформы к платёжной системе отправителя направляется запрос на списание средств.
  8. На стороне платёжной системы отправителя выполняется обработка запроса на списание средств.
  9. От платёжной системы отправителя в платёжную платформу направляется уведомление о результате.
  10. В платёжной платформе выполняется обработка полученного результата.
  11. От платёжной платформы к платёжной системе получателя направляется запрос на зачисление средств.
  12. На стороне платёжной системы получателя выполняется обработка запроса на зачисление средств.
  13. От платёжной системы получателя в платёжную платформу направляется уведомление о результате.
  14. От платёжной платформы к веб-сервису направляется оповещение о результате платежа.
  15. От веб-сервиса пользователю направляется результат проведения перевода.

Формат запросов

При формировании запросов на перевод в общем случае необходимо руководствоваться спецификацией конечной точки /v2/payment/money_transfer, а в случае с переводом с одной платёжной карты на другую (что можно считать типовым вариантом перевода) необходимо учитывать следующее:

  1. POST-запрос должен отправляться к конечной точке - /v2/payment/money_transfer
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения запроса:
      • project_id — идентификатор проекта, полученный от Flashpay при интеграции;
      • payment_id — идентификатор платежа, уникальный в рамках проекта мерчанта;
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Работа с подписью к данным);
    • customer — объект, содержащий сведения об отправителе:
      • id — идентификатор пользователя (отправителя) в рамках проекта мерчанта;
      • ip_address — актуальный IP-адрес;
      • country — код страны адреса пользователя в формате ISO 3166-1 alpha-2;
      • city — название города проживания пользователя (или иного населенного пункта);
      • first_name — имя пользователя;
      • last_name — фамилия пользователя;
      • zip — почтовый индекс пользователя;
      • address — название улицы и номер дома (с обозначением корпуса или строения, где это актуально) в адресе проживания пользователя;
      • phone — номер телефона отправителя перевода, который должен передаваться в случаях, если зачисление средств выполняется на карту платёжной системы Visa, выпущенную в Бразилии или Катаре;
    • recipient_customer — объект, содержащий сведения о получателе:
      • first_name — имя получателя;
      • last_name — фамилия получателя;
      • phone — номер телефона получателя;
      • email — адрес электронной почты получателя;
    • payment — объект, содержащий сведения о переводе:
      • sender_payment_method — код платёжного метода для операции списания;
      • recipient_payment_method — код платёжного метода для операции зачисления;
      • sender_amount — сумма, списываемая с отправителя, в дробных единицах валюты;
      • sender_currency — код валюты для списываемой суммы в формате ISO-4217 alpha-3;
      • recipient_amount — сумма, зачисляемая получателю, в дробных единицах валюты;
      • recipient_currency — код валюты для зачисляемой суммы в формате ISO-4217 alpha-3.
  3. В запросе должны содержаться сведения о платёжном инструменте отправителя. При передаче реквизитов в явном виде — следующие данные в объекте sender:
    • pan — номер платёжной карты (без пробелов и иных разделителей);
    • year — номер года, в котором заканчивается срок действия карты (в четырёхзначном формате YYYY по григорианскому календарю)
    • month — номер месяца, в котором заканчивается срок действия карты (в виде числа, без ведущего нуля);
    • card_holder — имя и фамилия держателя карты (в соответствии с указанными на карте);
    • cvv — код проверки подлинности карты.
  4. В запросе должны содержаться сведения о платёжном инструменте получателя. При передаче реквизитов в явном виде — следующие данные в объекте recipient:
    • pan — номер платёжной карты (без пробелов и иных разделителей);
    • card_holder — имя и фамилия держателя карты (в соответствии с указанными на карте).
  5. Дополнительно могут использоваться любые другие параметры, указанные в спецификации.

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

Рис. 2. Пример тела запроса на перевод
{
  "general":{
    "project_id": 440694,
    "payment_id": "ORDER_9777113840",
    "signature": "QsbTriwuNYLzqDYMm/roHPirhlvRpsuCm4yt0yiWNhWviXsmTvE8TKjsEdzQXrakGLIzA1G/eHzOno5HQLEusA=="
    },
  "recipient":{
    "number": "4242424242424242"
    },
  "sender":{
    "pan":"4314220000000056",
    "year":2024,
    "month":10,
    "card_holder":"Gio Boccaccio",
    "cvv":"334"
    },
  "payment":{
    "sender_amount": 10000,
    "sender_currency": "RUB",
    "sender_payment_method":"card",
    "recipient_amount": 10000,
    "recipient_currency": "TRY",
    "recipient_payment_method":"bank-transfer/turkey"
    },
  "customer":{       
    "id": "Vally",
    "first_name": "Orhan",
    "last_name": "Pamuk",
    "ip_address": "1.0.4.0"
    },
  "recipient_customer":{       
    "first_name": "Fatma",
    "last_name": "Aliye",
    "phone": "3572437356",
    "email": "test@example.com"
    }
}

Формат оповещений

Для оповещения о результате проведения перевода используется типовой формат, описание которого представлено в статье Работа с оповещениями.

В следующем примере содержится информация о проведении перевода на 1103,40 KGS.

Рис. 3. Пример тела оповещения о проведении перевода
{
    "payment": {
        "date": "2025-07-11T12:17:54+0000",
        "method": "card",
        "sum":{                                //сумма и валюта для зачисления
            "amount": 110340,
            "currency": "KGS"
        },
        "id": "TEST-a758f-d60e1fbedac9",
        "type": "money_transfer",
        "status":"success",                    //статус платежа
        "description": ""
    },
    "customer": {
        "id": "id_123"
    },
    "project_id": 123456,
    "transaction_id": 4229011111725,
    "account": {
        "token": "8ebc66******5bda"
    },
    "operation": {
        "provider": {
            "id": 17171,
            "payment_id": "",
            "auth_code": "",
            "endpoint_id": 17171
        },
        "id": 4223333361,
        "type": "payout",                     
        "status": "success",                  //статус операции
        "date": "2025-07-11T12:17:54+0000",
        "sum_initial": {                      //сумма и валюта списания
            "amount": 110340,
            "currency": "KGS"
        },
        "created_date": "2025-07-11T12:13:20+0000",
        "request_id": "136b7768d6d0f61ce0b37df10db5d31e2c583b3b-6119161ce395c4f85580ce8564cd5c33fa93af79-00004230",
        "sum_converted": {
            "amount": 110340,
            "currency": "KGS"
        },
        "code": "0",
        "message": "Success",
        "provider_result_message": "4438605b-7ed5-4b8a-b8b6-c1e432bdd49a"
    },
    "signature": "hcRRMWCZVFn2EMJF/DyioPnI0A7Rx8/pd8/RxCpfR925AzD********E2MNYJS+6ggxIrA=="
}

В следующем примере содержится информация о том, что при проведении перевода операция списания была отклонена.

Рис. 4. Пример тела оповещения при отклонении списания средств
{
    "payment": {
        "date": "2025-07-03T12:46:46+0000",
        "method": "card",
        "sum": {                               //сумма и валюта для зачисления
            "amount": 1581370,
            "currency": "KGS"
        },
        "id": "c6b9a212-49c8-46c1-a2ef-723a7bc7913b",
        "type": "money_transfer",
        "status": "decline",                   //статус платежа
        "description": ""
    },
    "customer": {
        "id": ""
    },
    "project_id": 123456,
    "transaction_id": 32474444442133,
    "operation": {
        "provider": {
            "id": 1234,
            "payment_id": "",
            "auth_code": "",
            "endpoint_id": 12345
        },
        "id": 32474555552133,
        "type": "sale",
        "status": "decline",                  //статус операции
        "date": "2025-07-03T12:46:46+0000",
        "sum_initial": {                      //сумма и валюта списания
            "amount": 1450000,
            "currency": "RUB"
        },
        "created_date": "2025-07-03T12:46:44+0000",
        "request_id": "e9ce08af7b59ded5ab566ffa5414adbee41e5ca7-b3c212f516a734808d43261bc4b9b16c8879bb27-00032474",
        "sum_converted": {                    //сумма списания с учётом конвертации
            "amount": 1450000,
            "currency": "RUB"
        },
        "code": "402",
        "message": "RCS reject. Declined by Risk System",
        "provider_result_message": "Reject. User is Blacklisted"
    },
    "signature": "7e4BiLc++RpdU6JF7EpFXMQs+9E2x+vojwhFN*****TyoXByY237YhObdilSkPtyoQ=="
}

В следующем примере содержится информация о том, что при проведении перевода операция зачисления средств была отклонена и была выполнена отмена списания средств.

Рис. 5. Пример тела оповещения при отклонении зачисления средств
{
    "payment": {
        "date": "2025-07-11T12:09:23+0000",
        "method": "card",
        "sum": {                                //сумма и валюта для зачисления
            "amount": 10340,
            "currency": "KGS"
        },
        "id": "b9f12d84-7fe8-432a-960c-43f944d7baa6",
        "type": "money_transfer",
        "status": "refunded",                   //статус платежа
        "description": ""
    },
    "customer": {
        "id": "12345"
    },
    "project_id": 123456,
    "transaction_id": 8863012221737,
    "account": {
        "token": "3185c5******fec8"
    },
    "operation": {
        "provider": {
            "id": 1234,
            "payment_id": "TEST_12334",
            "auth_code": "",
            "endpoint_id": 12345,
            "date": "2025-07-11T15:09:13+0000"
        },
        "id": 8863013331737,
        "type": "refund",
        "status": "success",                     //статус операции
        "date": "2025-07-11T12:09:23+0000",
        "sum_initial": {                         //сумма и валюта списания
            "amount": 100000,
            "currency": "RUB"
        },
        "created_date": "2025-07-11T12:09:11+0000",
        "request_id": "refund_6870fee7dfdb46.45981500-00008864",
        "sum_converted": {                       //сумма списания с учётом конвертации
            "amount": 100000,
            "currency": "RUB"
        },
        "code": "0",
        "message": "Success",
        "provider_result_message": "Successful financial transaction"
    },
    "signature": "ifl3yDCTJ5ycd0RXAKBavEhvnaQvXy5******HaHDT371+xp0G6cQzR/ODTSb5IdUICQg9fA=="
}