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

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

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

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

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

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

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

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

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

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

https://processing.ecomcharge.com/transactions/authorizations

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

https://processing.ecomcharge.com/async/transactions/authorizations

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

Параметр Тип Описание
status string Статус выполнения асинхронной задачи (не путать со статусом транзакции)
request_id string ID для поиска задачи.
status_url string URL для получения статуса выполнения задачи.
response_url string URL для получения результата выполнения задачи.
Пример ответа
{
  "status": "processing",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76",
  "status_url": "https://processing.ecomcharge.com/async/status/a2ac9f8e-1b22-486b-be46-528e48be6c76",
  "response_url": "https://processing.ecomcharge.com/async/result/a2ac9f8e-1b22-486b-be46-528e48be6c76"
}

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

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

Info

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

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

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

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

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

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

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

Пример ответа для асинхронной задачи, если request_id не найден в системе
{
  "status": "unknown",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}
Пример ответа для асинхронной задачи, которая в процессе выполнения
{
  "status": "processing",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}

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

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

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

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

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