Перейти к содержанию

Асинхронный режим обработки транзакций

Асинхронный режим позволяет экономить ваши ресурсы, потому что вам не нужно держать постоянное соединение c Demo PSP, а запрос статуса вы можете сделать в любое время в фоновом режиме.

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

Info

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

Обратите внимание: значение RequestID, переданное в заголовке запроса, нельзя использовать для получения информации о статусе транзакции. Для этого используйте request_id, полученный от системы Demo PSP.

Описание процесса работы с асинхронным режимом

  1. Отправить запрос на URL асинхронного режима обработки транзакций
  2. Получить ответ со статусом асинхронной задачи и status_url, response_url
  3. Проверить статус и/или запросить результат выполнения асинхронной задачи
  4. Обработать Webhooks или запросить статус выполнения транзакции по tracking_id.

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

Параметры запроса для асинхронного режима обработки транзакций такие же, как и для синхронных (стандартных) запросов:

Единственное отличие в URL адресах - они содержат дополнительную секцию async:

Пример URL для запроса авторизации в синхронном режиме:

https://demo-gateway.begateway.com/transactions/authorizations

Пример URL для запроса авторизации в асинхронном режиме:

https://demo-gateway.begateway.com/async/transactions/authorizations

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

Параметр Тип Описание
status string Статус выполнения асинхронной задачи (не путать со статусом транзакции)
request_id string Идентификатор задачи, генерируемый системой Demo PSP. Используется для получения информации о статусе задачи. Не путайте с RequestID, передаваемым в заголовке запроса для обеспечения идемпотентности.
status_url string URL для получения статуса выполнения задачи.
response_url string URL для получения результата выполнения задачи.
Пример ответа
{
  "status": "processing",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6",
  "status_url": "https://demo-gateway.begateway.com/async/status/e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6",
  "response_url": "https://demo-gateway.begateway.com/async/result/e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}

Проверка статуса выполнения асинхронной задачи

Для проверки статуса выполнения асинхронной задачи необходимо выполнить GET запрос на status_url, который был получен в ответе на отправку асинхронного запроса.

Info

В зависимости вашей реализации интеграции, данный шаг можно пропустить и запрашивать сразу результат выполнения асинхронной задачи через запрос на response_url.

Пример ответа для асинхронной задачи, которая в процессе выполнения
{
  "status": "processing",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}
Пример ответа для асинхронной задачи, которая выполнена
{
  "status": "completed",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6",
  "response_url": "https://demo-gateway.begateway.com/async/result/e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}
Пример ответа в случае, если request_id не найден в системе
 {
  "status": "unknown",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}
Пример ответа в случае ошибки в процессе выполнения асинхронной задачи
{
  "message": "We're sorry, but something went wrong"
}

Получение результата выполнения асинхронной задачи

Для получения результата выполнения асинхронной задачи выполнить GET запрос на response_url, который был получен в ответе на отправку асинхронного запроса.

Успешное выполнение асинхронной задачи

Асинхронная задача считается успешно выполненной, если в ответ на запрос на response_url возвращается стандартный ответ обрабатываемой транзакции.

Если статус транзакции incomplete, то далее для проверки статуса и получения результата выполнения транзакции использовать запрос статуса по tracking_id или Webhooks.

Пример ответа для асинхронной задачи, если request_id не найден в системе
{
  "status": "unknown",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}
Пример ответа для асинхронной задачи, которая в процессе выполнения
{
  "status": "processing",
  "request_id": "e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}

Доступность результата выполнения асинхронной задачи

Если результат выполнения асинхронной задачи, запрашиваемый по status_url или response_url, имеет статус код ответа 200, то он будет храниться в системе в течение 24 часов с момента создания асинхронной задачи. Через 24 часа результат выполнения асинхронной задачи станет недоступен и на повторные запросы будет возвращаться статус код 404 и ответ:

{​​​​​​​​
  "status":"unknown",
  "request_id":"e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}​​​​​​​​

Если ответ асинхронной задачи имеет статус код отличный от 200, то ответ с описанием ошибки будет возвращен один раз и далее на повторные запросы будет возвращаться статус код 404 и ответ:

{​​​​​​​​
  "status":"unknown",
  "request_id":"e9be15ab77a6b22a704aba9b5af0cccd6fdbb8e880620870ba5ed1c679f9e1b6"
}​​​​​​​​