Оплата в две стадии

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

В рамках платежной платформы оплата в две стадии проводится, как описано в разделеСхема и статусы разовой оплаты в две стадии: с инициированием первой стадии такой оплаты по запросу со стороны веб-сервиса мерчанта и затем второй стадии — по запросу или автоматически по истечении заданного срока.

Для настройки автоматического запуска второй стадии оплаты, то есть автоматического списания средств или отмены их блокировки, обращайтесь к специалистам технической поддержки (support@rocketpay.kz). При этом срок блокировки и тип операции, которую необходимо выполнить по истечении этого срока, указываются со стороны мерчанта.

Информацию о возможности проведения такой оплаты необходимо уточнять у службы технической поддержки support@rocketpay.kz.

При проведении разовой оплаты в две стадии реквизиты платежного инструмента могут указываться в одной из следующих форм:

  • Реквизиты (в явном виде). Это базовая форма, при использовании которой необходимо обеспечить предоставление реквизитов пользователем, а затем передать эти реквизиты в платежную платформу в запросе на проведение платежа.
  • Идентификатор реквизитов В этом случае веб-сервис передаетидентификатор, однозначно связанный с реквизитами платежного инструмента на стороне платежной платформы. (Подробнее см. Сохранение платежных данных.)
  • Токен реквизитов В отличие от базового способа, вместо полных реквизитов передается токен. Для использования этого способа необходимо провести исходный платеж. Подробнее об использовании токена см. Использование токенов.

Ограничения

При проведении оплат в две стадии необходимо учитывать, что в соответствии с требованиями международных платежных систем Visa, Mastercard срок, на который можно заблокировать средства пользователя, ограничивается. И для различных типов карт этот срок определяется с учетом разных условий:

  • Для карт Visa Electron:
    1. если блокировка средств выполняется в рамках повторяемой оплаты или с ее регистрацией — 4 дня;
    2. если блокировка средств выполняется не в рамках повторяемой оплаты и без ее регистрации, а присвоенный мерчанту код Merchant Category Code (MCC) соответствует одному из следующих: 3351–3500, 3501–3999, 4411, 7011, 7512, 7513 — 35 дней;
    3. в других случаях — 11 дней.
  • Для других карт платежной системы Visa:
    1. если блокировка средств выполняется в рамках повторяемой оплаты или с ее регистрацией — 7 дней;
    2. если блокировка средств выполняется не в рамках повторяемой оплаты и без ее регистрации, а присвоенный мерчанту код Merchant Category Code (MCC) соответствует одному из следующих: 3351–3500, 3501–3999, 4411, 7011, 7512, 7513 — 38 дней;
    3. в других случаях — 14 дней.
  • Для карт Maestro — 6 дней.

Максимально допустимый срок блокировки средств отсчитывается от момента формирования в платежной платформе Rocketpay операции блокировки (auth). За полчаса до истечения этого срока в зависимости от параметров, указанных сотрудниками Rocketpay, автоматически выполняется одна из следующих операций: списание заблокированных средств пользователя (capture) или отмена блокировки средств (cancel). После этого к веб-сервису направляется оповещение, описание формата которого представлено в разделе Структура оповещения. Для уточнения информации и изменения типа операции следует обратиться к курирующему менеджеру Rocketpay.

В случаях, когда в платежной платформе настроено автоматическое списание или отмена блокировки средств в указанный со стороны мерчанта срок, но этот срок превышает максимально допустимый, списание или отмена выполняются в соответствии с максимально допустимым сроком. Допустим, в соответствии с пожеланиями мерчанта настроена автоматическая отмена блокировки по истечении десяти дней. Тогда для блокировки средств, выполненной с использованием карты Maestro (с максимально допустимым сроком в шесть дней), по истечении шести дней выполняется автоматическая отмена.

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

Для проведения оплаты в две стадии через Gate со стороны веб-сервиса необходимо:

  1. Отправить запрос на предварительную блокировку к конечной точке /v2/payment/card/auth[/форма указания реквизитов платежного инструмента].
  2. При необходимости выполнить вспомогательные процедуры, инициируемые со стороны платежной платформы. Это может быть один из вариантов аутентификации пользователя или дополнение информации о платеже.
    • Аутентификация 3-D Secure. Такая аутентификация предназначена для обеспечения безопасности проведения оплаты с использованием платежных карт через интернет. Подробная информация об этой процедуре представлена в разделе Аутентификация по протоколу 3‑D Secure 1.
    • Аутентификация по инициативе мерчанта. Такая аутентификация предназначена для обеспечения дополнительной безопасности оплаты с использованием платежных карт. Подробная информация об этой процедуре представлена в разделе Аутентификация по инициативе мерчанта.
    • Дополнение информации о платеже. Эта процедура используется, когда по запросу одной из сторон, участвующих в проведении платежа, требуется предоставить дополнительную информацию. Подробная информация о процедуре представлена в разделе Дополнение информации о платеже.
  3. Принять от платежной платформы оповещение о результате предварительной блокировки.
  4. Отправить запрос на списание средств, содержащий требуемые параметры и подпись, к конечной точке /v2/payment/card/capture или на отмену блокировки — к конечной точке /v2/payment/card/cancel.
  5. Принять от платежной платформы оповещение о результате списания средств (или об отмене блокировки средств).
  6. При необходимости для проведенных оплат использовать дополнительную возможность — возврат средств по проведенной оплате. Возврат используется в ситуациях, когда в рамках проведенной оплаты необходимо частично или полностью вернуть средства пользователю. Подробная информация о возвратах представлена в разделе Возврат средств после оплаты.

Схема проведения оплаты в две стадии в базовом случае — без выполнения дополнительных процедур — со списанием заблокированных средств представлена далее.

Рис.: Проведение оплаты в две стадии в базовом случае

  1. Пользователь на стороне веб-сервиса инициирует оплату.
  2. От веб-сервиса на заданный URL Rocketpay передается запрос на предварительную блокировку средств.
  3. Запрос на проведение предварительной блокировки поступает в платежную платформу.
  4. В платежной платформе выполняется прием запроса с проверкой его корректности.
  5. Платежная платформа направляет в веб-сервис ответ с информацией о получении запроса и его корректности.
  6. В платежной платформе выполняются обработка этого запроса, его преобразование и отправка в международную платежную систему в соответствии с протоколом взаимодействия с ней.
  7. В международной платежной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
  8. На стороне эмитента выполняется обработка платежа и блокировка средств пользователя.
  9. От эмитента к международной платежной системе направляется уведомление о результате.
  10. От международной платежной системы к платежной платформе направляется уведомление о результате.
  11. Платежная платформа направляет в веб-сервис оповещение о результате.
  12. От веб-сервиса пользователю направляется результат оплаты.
  13. От веб-сервиса на заданный URL Rocketpay передается запрос на списание средств (или на отмену блокировки средств).
  14. Запрос на списание средств (или на отмену блокировки средств) поступает в платежную платформу.
  15. В платежной платформе выполняется прием запроса с начальной проверкой.
  16. Платежная платформа направляет в веб-сервис ответ с информацией о получении запроса и его корректности.
  17. В платежной платформе выполняются обработка этого запроса, его преобразование и отправка в международную платежную систему в соответствии с протоколом взаимодействия с ней.
  18. В международной платежной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
  19. На стороне эмитента выполняется обработка платежа и списание средств пользователя (или отмена предварительной блокировки средств).
  20. От эмитента к международной платежной системе направляется уведомление о результате.
  21. От международной платежной системы к платежной платформе направляется уведомление о результате.
  22. Платежная платформа направляет в веб-сервис оповещение о результате.
  23. В случае отмены блокировки от веб-сервиса пользователю направляется результат.

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

Информация о формате запросов и параметрах инициирования операций оплаты в две стадии с использованием платежных карт через Gate, а также о формате оповещений о результатах операций приведена далее; общая информация о работе с API — в разделе Общий порядок интеграции.

Структура запроса

Формат запросов в этом разделе представлен для проведения оплат в две стадии с использованием платежных карт. Необходимо учитывать, что проведение оплат в две стадии включает в себя отправку запросов на предварительную блокировку средств и на списание средств или отмену блокировки.

Запрос на предварительную блокировку

При формировании запросов необходимо учитывать следующее:

  1. POST-запрос должен отправляться к одной из следующих конечных точек:
  2. В запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения запроса:
      • project_id — идентификатор проекта, полученный от Rocketpay при интеграции;
      • payment_id — идентификатор платежа, уникальный в рамках проекта;
      • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Подписывание и проверка подписи);
    • customer — объект, содержащий сведения о пользователе:
      • ip_address — IP-адрес пользователя;
      • id — идентификатор пользователя в рамках проекта мерчанта;
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма оплаты в дробных единицах валюты без десятичной точки и пробелов за исключением случаев, когда у валюты нет дробной части. Если у валюты нет дробных единиц (то есть количество разрядов дробных единиц равно нулю), то в этом параметре нужно указывать сумму в основных единицах валюты. Подробнее о разрядах дробных единиц у валют см. Коды валют;
      • currency — валюта платежа в формате ISO-4217 alpha-3.
  3. В запросе должны содержаться сведения о платежной карте пользователя:
    • при передаче реквизитов карты в явном виде — следующие данные в объекте card:
      • pan — номер карты,
      • year — год окончания срока действия карты,
      • month — месяц окончания срока действия карты,
      • card_holder — имя держателя карты (в соответствии с указанным на карте),
      • cvv — код проверки подлинности карты (в соответствии с указанным на карте);
    • при передаче идентификатора — идентификатор, ассоциированный с реквизитами карты в платежной платформе, и код проверки подлинности карты в параметрах saved_account_id и cvv;
    • при передаче токена — токен и код проверки подлинности карты в параметрах token и cvv.
  4. В запросе должен содержаться объект return_url с адресами для перенаправления пользователя к веб-сервису:
    • success — URL для перенаправления после завершения платежа;
    • decline — URL для перенаправления после отклонения платежа.
  5. Если необходимо зачислить средства на электронный кошелек мерчанта, в объекте customer дополнительно должны использоваться следующие параметры:
    • first_name — имя пользователя,
    • last_name — фамилия,
    • address — адрес проживания (улица, номер дома),
    • email — адрес электронной почты,
    • city — город проживания (или иной населенный пункт),
    • state — регион проживания (штат, графство, кантон и т.д.).
  6. Дополнительно могут использоваться любые другие параметры, указанные в спецификации.

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

{
  "general": {
      "project_id": 42,
      "payment_id": "456789",
      "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
  },
    "customer": {
      "ip_address": "248.121.176.220",
      "id": "customer_12"
  },
    "payment": {
      "amount": 15000,
      "currency": "USD"
  },
    "return_url": {
        "success": "http://example.com/return",
        "decline": "http://example.com/decline"
  },
//при передаче реквизитов карты в явном виде:
    "card": {
      "pan": "4242424242424243",
      "year": 2025,
      "month": 8,
      "card_holder": "JOHN SMITH",
      "cvv": "123"
  }

//при передаче идентификатора ранее сохраненной платежной карты:
    "saved_account_id": 2345678,
    "cvv": "123"

//при передаче токена ранее сохраненной платежной карты:
    "token": "f365bb1729f9b72fd9c09703a751c979f3becc679f29c3e35c91d18070d15654",
    "cvv": "123"   
}

Запрос на списание заблокированных средств

Запрос отправляется методом POST к конечной точке /v2/payment/card/capture и должен содержать следующие объекты и параметры:

  • general — объект, содержащий основные идентификационные сведения запроса:
    • project_id — идентификатор проекта, полученный от Rocketpay при интеграции;
    • payment_id — идентификатор платежа, уникальный в рамках проекта;
    • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Подписывание и проверка подписи).
  • Дополнительно могут использоваться любые другие параметры, указанные в спецификации.

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

{
    "general": {
        "project_id": 42,
        "payment_id": "456789",
        "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
    }
}

Запрос на отмену блокировки средств

Запрос отправляется методом POST к конечной точке /v2/payment/card/cancel и должен содержать следующие объекты и параметры:

  • general — объект, содержащий основные идентификационные сведения запроса:
    • project_id — идентификатор проекта, полученный от Rocketpay при интеграции;
    • payment_id — идентификатор платежа, уникальный в рамках проекта;
    • signature — подпись запроса, составленная после указания целевых параметров (подробнее — в разделе Подписывание и проверка подписи).
  • Дополнительно могут использоваться любые другие параметры, указанные в спецификации.

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

{
    "general": {
        "project_id": 42,
        "payment_id": "456789",
        "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
    }
}

Структура оповещения

Для оповещения о результате оплаты в две стадии используется стандартный формат, описание которого представлено в разделе Оповещения (callbacks) в Gate.

В следующем примере содержится информация о том, что в рамках проекта 42 для пользователя customer_12 заблокированы средства в размере 150,00 USD с платежной карты №555555******4445.

Рис.: Пример данных о проведенной блокировке средств

{
    "project_id": 42,
    "customer": {
        "id": "customer_12"
    },
    "payment": {
        "id": "456789",
        "type": "purchase",
        "status": "awaiting capture",
        "date": "2019-01-11T13:00:40+0000",
        "method": "card",
        "sum": {
            "amount": 15000,
            "currency": "USD"
        },
        "description": ""
    },
    "account": {
        "number": "555555******4445",
        "type": "mastercard",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "operation": {
        "id": 2777000002350,
        "type": "auth",
        "status": "success",
        "date": "2019-01-11T13:00:40+0000",
        "created_date": "2019-01-11T13:00:37+0000",
        "request_id": "e2fd233d27c064fbe01af291039e6478341a0489-3...9",
        "sum_initial": {
            "amount": 15000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 15000,
            "currency": "USD"
        },
        "provider": {
            "id": 120,
            "payment_id": "224750650",
            "date": "2019-01-11T13:00:39+0000",
            "result_code": "000",
            "result_message": "Approved",
            "auth_code": "505050",
            "endpoint_id": 120
        },
        "code": "0",
        "message": "Success",
        "description": "SUCCESS",
        "eci": "00"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}

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

Рис.: Пример данных об отказе в блокировке средств

{
    "project_id": 42,
    "customer": {
        "id": "customer_12",
        "phone": "44991234567"
    },
    "payment": {
        "id": "456789",
        "type": "purchase",
        "status": "decline",
        "date": "2019-01-11T13:00:40+0000",
        "method": "card",
        "sum": {
            "amount": 15000,
            "currency": "USD"
        },
        "description": ""
    },
    "account": {
        "number": "555555******4445",
        "type": "mastercard",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "operation": {
        "id": 6304000002973,
        "type": "auth",
        "status": "decline",
        "date": "2019-01-11T13:00:40+0000",
        "created_date": "2019-01-11T13:00:34+0000",
        "request_id": "63821f1e49b2b289d1dee0552082ed60b4108175-5...c",
        "sum_initial": {
            "amount": 15000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 15000,
            "currency": "USD"
        },
        "provider": {
            "id": 120,
            "payment_id": "239689120",
            "date": "2019-01-11T13:00:36+0000",
            "result_code": "101",
            "result_message": "Decline, expired card",
            "auth_code": "",
            "endpoint_id": 120
        },
        "code": "10106",
        "message": "Card expired",
        "description": "Bank cards. Operation was declined due to incorrect card expiry date entry",
        "eci": "00"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}

В следующем примере содержится информация о том, что в рамках проекта 42 с платежной карты №555555******4445 пользователя customer_12 списаны заблокированные ранее средства в размере 160,00 USD.

Рис.: Пример данных о списании заблокированных средств

{
    "project_id": 42,
    "payment": {
        "id": "456789",
        "type": "purchase",
        "status": "success",
        "date": "2019-01-11T15:54:40+0000",
        "method": "card",
        "sum": {
            "amount": 16000,
            "currency": "USD"
        },
        "description": ""
    },
    "account": {
        "number": "555555******4445",
        "type": "mastercard",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "customer": {
        "id": "customer_12"
    },
    "operation": {
        "id": 7178000006597,
        "type": "capture",
        "status": "success",
        "date": "2019-01-11T15:54:40+0000",
        "created_date": "2019-01-11T15:54:39+0000",
        "request_id": "d066dfd72443584e1a35bb5eed60415aeb15ccfa-1...0",
        "sum_initial": {
            "amount": 16000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 16000,
            "currency": "USD"
        },
        "provider": {
            "id": 120,
            "payment_id": "227307324",
            "date": "2019-01-11T15:54:40+0000",
            "auth_code": "919372",
            "endpoint_id": 120
        },
        "code": "0",
        "message": "Success"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}

В следующем примере содержится информация о том, что в рамках проекта 42 для пользователя customer_12 отменена блокировка средств в размере 160,00 USD на платежной карте №555555******4445.

Рис.: Пример данных об отмене блокировки средств

{
    "project_id": 42,
    "payment": {
        "id": "456789",
        "type": "purchase",
        "status": "canceled",
        "date": "2019-01-11T15:54:40+0000",
        "method": "card",
        "sum": {
            "amount": 16000,
            "currency": "USD"
        },
        "description": ""
    },
    "account": {
        "number": "555555******4445",
        "type": "mastercard",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "customer": {
        "id": "customer_12"
    },
    "operation": {
        "id": 18289000007021,
        "type": "cancel",
        "status": "success",
        "date": "2019-01-11T15:54:40+0000",
        "created_date": "2019-01-11T15:54:40+0000",
        "request_id": "25cdabfad200b82bf6740d6a8d01818c6e64804e-1...c",
        "sum_initial": {
            "amount": 16000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 16000,
            "currency": "USD"
        },
        "provider": {
            "id": 120,
            "payment_id": "239672146",
            "auth_code": "",
            "endpoint_id": 120
        },
        "code": "0",
        "message": "Success"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}

В следующем примере отмена блокировки средств была отклонена из-за указания некорректных данных карты.

Рис.: Пример данных об отказе в отмене блокировки средств

 {
    "account": {
        "number": "555555******4445",
        "type": "mastercard",
        "card_holder": "JOHN SMITH",
        "expiry_month": "08",
        "expiry_year": "2025"
    },
    "customer": {
        "id": "customer_12"
    },
    "payment": {
        "date": "2019-01-11T15:54:40+0000",
        "id": "456789",
        "method": "card",
        "status": "decline",
        "sum": {
            "amount": 16000,
            "currency": "USD"
        },
        "type": "purchase",
        "description": ""
    },
    "project_id": 42,
    "operation": {
        "id": 18397000002376,
        "type": "cancel",
        "status": "decline",
        "date": "2019-01-11T15:54:40+0000",
        "created_date": "2019-01-11T15:54:35+0000",
        "request_id": "7482145798366de3166bedd372552b3f0094eed2-6...3",
        "sum_initial": {
            "amount": 16000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 16000,
            "currency": "USD"
        },
        "provider": {
            "id": 120,
            "payment_id": "248013808",
            "date": "2019-01-10T22:37:10+0000",
            "auth_code": "876856",
            "endpoint_id": 120
        },
        "code": "10102",
        "message": "Incorrect data entered"
    },
    "signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}