Skip to content

Asynchronous transaction processing

Asynchronous transaction processing allows you to save your resources because you do not need to keep the connection with Demo PSP, and you can make a status request at the appropriate time.

Also, asynchronous operation mode allows you to avoid timeout errors if the payment method provider or bank processes a request for a long time.

The flow of asynchronous transaction processing

  1. Send request for asynchronous transaction processing URL
  2. Get response with the status of an asynchronous task and status_url, response_url
  3. Check the status and/or request the result of an asynchronous task
  4. Process webhook or request a transaction status by tracking_id.

Request parameters

Request parameters in asynchronous transaction processing have the same parameters as in synchronous (standard) mode:

The only difference is that the URL for the request has an additional section async. For example:

URL for processing authorization requests in synchronous mode:

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

URL for processing authorization requests in asynchronous mode:

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

Response parameters

Parameter Type Description
status string Asynchronous task processing status (avoid confusion with transaction processing status)
request_id string ID that used to search request.
status_url string URL to get request processing status.
response_url string URL to get request processing result.
Example of the response
{
  "status": "processing",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76",
  "status_url": "https://demo-gateway.begateway.com/async/status/a2ac9f8e-1b22-486b-be46-528e48be6c76",
  "response_url": "https://demo-gateway.begateway.com/async/result/a2ac9f8e-1b22-486b-be46-528e48be6c76"
}

Check the status of an asynchronous task

To get a request status, send a GET request to the status_url, that was received in response to the asynchronous request.

Info

Depending on your integration implementation, you can skip this step and immediately request the result of the asynchronous task via a request to response_url.

Example of the response for an asynchronous task, that is still in the process
{
  "status": "processing",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}
Example of the response for an asynchronous task that is completed
{
  "status": "completed",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76",
  "response_url": "https://demo-gateway.begateway.com/async/result/a2ac9f8e-1b22-486b-be46-528e48be6c76"
}
Example of the response if the provided request_id is not found in the system
{
  "status": "unknown",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}
Example of the response if an error occurred an asynchronous task processing
{
  "message": "We're sorry, but something went wrong"
}

Get the result of an asynchronous task

To get a result of processing of an asynchronous task, send a GET request to the response_url received in the response to the asynchronous request.

Successful processing of an asynchronous task

An asynchronous task is successfully completed, if the standard response to a request to response_url is returned.

If the transaction status is incomplete, send a status query request with the tracking_id value. Alternatively, set up webhooks to check the transaction status and result.

Example of the response if the provided request_id is not found in the system
{
  "status": "unknown",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}
Example of the response for an asynchronous task, that is still in the process
{
  "status": "processing",
  "request_id": "a2ac9f8e-1b22-486b-be46-528e48be6c76"
}

Availability of the result of an asynchronous task

If the result of an asynchronous task, requested from status_url or response_url, has a 200 status code, then it will be stored in the system within 24 hours since the creation of the asynchronous task. After 24 hours, the result of the asynchronous task will become unavailable. Further, for repeated requests, a response with a 404 code will be returned:

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

If the response of an asynchronous task has a status code other than 200, then a response with an error description will be returned once. Further, for repeated requests, a response with a 404 code will be returned:

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