Оповещения (callbacks) в Payment Page

Оповещение (callback) — это техническое сообщение, которое платежная платформа Rocketpay отправляет на заданный URL-адрес мерчанта, чтобы сообщить определенную информацию, например результат выполнения платежа.

Как выглядит оповещение в Rocketpay

Оповещение представляет собой HTTP-запрос, отправляемый методом POST на URL-адрес, который вы предоставляете Rocketpay в процессе интеграции.

Параметры оповещения передаются в теле запроса в формате JSON, при этом массив параметров преобразуется в одну строку. Вы можете настраивать, какие параметры должны передаваться в теле запроса. Для этого обращайтесь в службу поддержки Rocketpay.

Вот пример данных из тела оповещения типового формата. Содержимое JSON-строки в этом примере разбито на несколько строк для удобства чтения.

Рис.: Пример данных из оповещения типового формата

{
    "project_id": 1234,
    "payment": {
        "id": "payment_47",
        "type": "purchase",
        "status": "success",
        "date": "2022-03-25T11:08:45+0000",
        "method": "mobile",
        "sum": {
            "amount": 10000,
            "currency": "USD"
        },
        "description": ""
    },
    "customer": {
        "id": "customer_123"
    },
    "operation": {
        "id": 28,
        "type": "sale",
        "status": "success",
        "date": "2022-03-25T11:08:45+0000",
        "created_date": "2022-03-25T11:08:05+0000",
        "request_id": "9e32835fb27907e0b08569d7d150e387a16a80e336c5117242b5cf60a4e17839",
        "sum_initial": {
            "amount": 10000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 10000,
            "currency": "USD"
        },
        "code": "0",
        "message": "Success",
        "provider": {
            "id": 12345,
            "payment_id": "123abc123-321",
            "auth_code": ""
        }
    },
    "signature": "U7HQO7ToISZhMPKdM4Xr4DSX2UuHp99rHrtaxkUKQtoYzFvoB3cs9CRd4xeYG2Q=="
}

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

Рис.: Пример данных из оповещения в индивидуально настроенном формате

{
    "project_id": 1234,
    "payment": {
        "id": "payment_47",
        "type": "purchase",
        "status": "success",
        "date": "2022-03-25T11:08:45+0000",
        "method": "mobile",
        "sum": {
            "amount": 10000,
            "currency": "USD"
        },
        "description": ""
    },
    "customer": {            // объект с расширенной информацией о пользователе
        "id": "customer_123",
        "email": "johndoe@example.com",
        "phone": "491234567890",
        "first_name": "John",
        "last_name": "Doe"
    },
    "operation": {
        "id": 28,
        "type": "sale",
        "status": "success",
        "date": "2022-03-25T11:08:45+0000",
        "created_date": "2022-03-25T11:08:05+0000",
        "request_id": "9e32835fb27907e0b08569d7d150e387a16a80e336c5117242b5cf60a4e17839",
        "sum_initial": {
            "amount": 10000,
            "currency": "USD"
        },
        "sum_converted": {
            "amount": 10000,
            "currency": "USD"
        },
        "code": "0",
        "message": "Success",
        "provider": {
            "id": 12345,
            "payment_id": "123abc123-321",
            "auth_code": ""
        }
    },
    "signature": "U7HQO7ToISZhMPKdM4Xr4DSX2UuHp99rHrtaxkUKQtoYzFvoB3cs9CRd4xeYG2Q=="
}

Оповещения от Rocketpay содержат подпись. Подробнее о том, как проверить подпись в оповещении, см. раздел Подписывание и проверка подписи.

Когда Rocketpay отправляет оповещения

Платежная платформа отправляет вашей системе оповещения, когда:

  • изменяется статус платежа. Это может быть связано, например, с перенаправлением пользователя, отображением пользователю инструкции для оплаты, прохождением процедуры аутентификации 3-D Secure пользователем, запросом у пользователя данных, недостающих для проведения платежа и т. д. Подробнее о статусах различных операций см. раздел Типы платежей, операции и платежи.

    Если вы проводите платежи с использованием Payment Page, данные оповещения для вас несут информационный характер. Ваша система должна отвечать на них кодом состояния HTTP 200 OK и не выполнять других действий. Вы можете отказаться от получения этих оповещений, если необходимо. Для этого обращайтесь в службу поддержки Rocketpay;

  • создан, удален или истек токен для банковской карты. Пример такого оповещения см. в разделе Оповещение (callback);
  • завершена обработка операции в платежной платформе.

Адреса для приема оповещений

Оповещения отправляются на URL-адрес, который вы предоставляете Rocketpay в процессе интеграции. Если у вас есть несколько проектов, вы можете предоставить для каждого проекта отдельный URL-адрес, на который Rocketpay будет отправлять оповещения.

Вы можете предоставить Rocketpay отдельные URL-адреса, чтобы получать оповещения с определенной информацией по платежу. Например, чтобы оповещения об успешном завершении платежа платежная платформа отправляла на один адрес, а об отклонении — на другой. Вы также можете использовать отдельный URL-адрес для получения оповещений по платежам определенного типа или платежам, проведенным с использованием конкретного платежного метода.

Вы можете самостоятельно указать дополнительные адреса для приема оповещений в Dashboard. Для этого в Dashboard перейдите в раздел Проекты и выберите вкладку Оповещения. Инструменты в Dashboard позволят вам определить, в каких случаях и на какие адреса Rocketpay будет отправлять вашей системе оповещения. Подробнее о том, как задать адреса для отправки оповещений в Dashboard, см. раздел Правила отправки оповещений.

Обратите внимание, что ваша система должна принимать оповещения только с IP-адреса, полученного от команды интеграции Rocketpay. Чтобы уточнить IP-адрес, с которого Rocketpay отправляет оповещения, обратитесь в службу поддержки Rocketpay.

Адреса для приема оповещений по конкретному платежу

Вы можете указать отдельный URL-адрес для приема оповещений по конкретному платежу. Для этого добавьте в запрос на открытие страницы оплаты параметр merchant_callback_url и задайте в качестве значения URL-адрес, на который Rocketpay будет отправлять оповещения. После этого все оповещения по этому платежу (и только по нему) будут отправляться на указанный URL-адрес независимо от того, какой URL-адрес для приема оповещений задан для вашего проекта.

Вы также можете указать в запросе параметры с URL-адресами, на которые Rocketpay будет отправлять оповещения с результатом конкретного платежа:

  • merchant_success_callback_url — URL-адрес, на который Rocketpay отправит callback-оповещение о результате платежа, если он будет успешно проведен;
  • merchant_decline_callback_url — URL-адрес, на который Rocketpay отправит callback-оповещение о результате платежа, если он будет отклонен.

Эти параметры приоритетнее параметра merchant_callback_url и URL-адреса, указанного в настройках вашего проекта. Так, если задать значения обоих параметров — merchant_callback_url и merchant_success_callback_url, то в случае успеха Rocketpay отправит оповещение с результатом платежа на URL-адрес, указанный в merchant_success_callback_url, игнорируя как параметр merchant_callback_url, так и URL-адрес, указанный для вашего проекте в платежной платформе. Аналогичная ситуация с параметром merchant_decline_callback_url , но с поправкой на то, что речь идет об итоговом оповещении об отклонении платежа.

Рис.: Пример данных из запроса на оплату с указанием URL-адресов для отправки оповещений по этому платежу

EPayWidget.run(
    {
        project_id: 1234,
        payment_id: 'payment_47',
        customer_id: 'customer_123',
        customer_first_name: 'John',
        customer_last_name: 'Doe',
        customer_email: 'johndoe@example.com',
        merchant_callback_url: 'http://example.com/callback/default',
        merchant_success_callback_url: 'http://example.com/success',
        merchant_decline_callback_url: 'http://example.com/decline',
        payment_currency: 'USD',
        payment_amount: 10000,    
        signature: 'kUi2x9dKHAVNU0FYldJrxh4yo+52Kt8KU+Y19vySO\/RLUkDJrOcZzUCwX6R\/ekpZhkIQg=='
    }
)

Как отреагировать на оповещение

Ваша система должна ответить на оповещение кодом состояния HTTP 200 OK, если она успешно приняла его. При этом, ваша система не должна ограничивать время приема оповещений, потому что оповещения от Rocketpay могут поступать с задержкой.

Внимание: В некоторых случаях Rocketpay отправляет повторные оповещения о результате платежа по уже выполненным платежам. Если ваша система получила такое оповещение, она должна ответить на него кодом состояния HTTP 200 OK и не предоставлять повторных услуг или дополнительных товаров в рамках этого платежа.

Если ваша система приняла оповещение с ошибкой, она должна ответить на него кодом состояния HTTP, соответствующим ошибке, например 400 Bad Request (если вам не удалось преобразовать строку параметров в массив) или 500 Internal Server Error (если оповещение пришло на неправильный URL-адрес). Несмотря на то что ваша система приняла оповещение с ошибкой, она должна быть готова принять последующие оповещения, относящиеся к этому же платежу.

Если ваша система не ответила на оповещение кодом состояния HTTP 200 OK, Rocketpay будет отправлять вам оповещения снова по следующему расписанию:

  • 6 попыток с интервалом в 10 секунд;
  • далее 62 попытки в течение четырех часов с увеличивающимся интервалом (интервал увеличивается в соответствии с формулой 70 + 10·1,12n-4, где n — порядковый номер попытки отправки);
  • потом каждые 4 часа до достижения максимального количества попыток.

Всего Rocketpay отправляет 120 оповещений в течение 11 суток. Расписание отправки оповещений может незначительно изменяться в зависимости от загрузки системы.

Параметры оповещения

Набор параметров, передаваемых в оповещении (callback), может отличаться в зависимости от типа операции и конфигурации оповещений. В этом разделе приведены описания параметров, используемых в типовых случаях.

Внимание: Подпись должна рассчитываться на основе всех параметров оповещения.
Табл. 1. Объекты и параметры оповещений
Параметр Описание tree

account
object

Объект, содержащий данные банковской карты или учетной записи пользователя 10

card_holder
string

Имя владельца банковской карты 10-10 10

expiry_month
string

Месяц срока действия банковской карты 10-20 10

expiry_year
string

Год срока действия банковской карты 10-30 10

id
integer

Идентификатор сохраненной карты в Gate 10-40 10

number
string

Маскированный номер банковской карты или учетной записи пользователя.

Пример: 424242***4242

10-50 10

token
string

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

type
string

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

10-70 10

avs_data
object

Объект, который содержит данные для AVS-проверки (Address Verification Service). Подробнее см. Проверка Address Verification Service 30

avs_post_code
string

Почтовый индекс пользователя 30-10 30

avs_street_address
string

Адрес пользователя 30-20 30

avs_result
string

Результат AVS-проверки (Address Verification Service). Подробнее см. в разделе Проверка Address Verification Service 40

bank
object

Объект, содержащий данные о банке-эмитенте карты пользователя 50

name
string

Наименование банка-эмитента карты пользователя 50-10 50

customer
object

Объект, содержащий информацию о пользователе, совершающем платеж 70

billing
object

Объект, содержащий информацию о платежном адресе пользователя 70-10 70

address
string

Платежный адрес пользователя 70-10-10 70-10

city
string

Город платежного адреса пользователя 70-10-20 70-10

country
string

Страна платежного адреса пользователя в формате ISO 3166-1 alpha-2.

Пример: RU

70-10-30 70-10

postal
string

Индекс платежного адреса пользователя 70-10-40 70-10

region
string

Район, область, край или республика платежного адреса пользователя 70-10-50 70-10

city
string

Город пользователя.

Пример: Дубна

70-20 70

country
string

Страна пользователя в формате ISO 3166-1 alpha-2, переданная в начальном запросе.

Пример: RU

70-30 70

day_of_birth
string

Дата рождения пользователя в формате ДД-ММ-ГГГГ.

Пример: 24-12-1978

70-40 70

first_name
string

Имя пользователя.

Пример: Инна

70-50 70

id
string

Уникальный идентификатор пользователя в проекте 70-60 70

ip_address
string

IP-адрес пользователя, переданный в начальном запросе 70-70 70

last_name
string

Фамилия пользователя.

Пример: Малая

70-80 70

middle_name
string

Отчество пользователя.

Пример: Ивановна

70-90 70

phone
string

Телефон пользователя. Целое значение: от 4 до 24 цифр 70-100 70

decision
string

Строка, содержащая решение системы Risk Control System о прохождении платежа. 80

decision_message
array

Массив строк, содержащих сообщения от Risk Control System о прохождении платежа.

Пример: reject.message("RCS reject. Amount less than allowed")

90

display_data
object

Объект, содержащий переданные от внешней платежной системы данные для отображения пользователю QR-кода для оплаты 100

errors
array

Массив сообщений об ошибках, связанных с проведением платежа 110

ErrorItem
object

Объект, содержащий информацию об одной ошибке 110-10 110

code
integer

Код ошибки 110-10-10 110-10

description
string

Параметр, описывающий причину ошибки 110-10-10 110-10

field
string

Параметр, в котором допущена ошибка, если удалось определить неверный параметр 110-10-20 110-10

message
string

Сообщение, уточняющее причину ошибки 110-10-30 110-10

interface_type
object

Объект, содержащий информацию об источнике запроса на проведение платежа 120

id
integer

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

  • 1 — запрос поступил от API Gate;
  • 2–4 — запрос поступил от Rocketpay;
  • 5 — запрос поступил от Dashboard;
  • 6 — запрос поступил от Payment Page в модальном окне;
  • 7 — запрос поступил от Payment Page в iframe
120-10 120

user
string

Параметр, уточняющий пользователя Dashboard. отправившего запрос на проведение платежа.

Пример: johndoe@example.com

120-20 120

operation
object

Объект, содержащий информацию об операции, по которой отправлено оповещение 130

code
string

Унифицированный код ответа Gate. Подробнее о кодах ответов см. Статусы операций и коды ответов 130-10 130

created_date
string

Дата и время создания операции 130-20 130

date
string

Дата и время последнего обновления статуса операции в Gate 130-30 130

eci
string

Индикатор, отображающий результат аутентификации пользователя с использованием 3‑D Secure. Подробнее см. Коды Electronic Commerce Indicator 130-40 130

id
integer

Уникальный идентификатор операции в Gate 130-50 130

message
string

Унифицированное сообщение Gate. Подробнее см. в Статусы операций и коды ответов 130-60 130

provider
object

Объект, который содержит информацию внешнего провайдера о результате выполнения платежа 130-70 130

auth_code
string

Код авторизации, полученный от внешнего провайдера 130-70-10 130-70

date
string

Дата и время завершения обработки платежа внешним провайдером.

Пример: 2017-07-21T03:31:24+0000

130-70-20 130-70

endpoint_id
string (integer)

CRC32-идентификатор платежного шлюза внешнего провайдера.

В некоторых случаях из-за особенностей платежных систем и провайдеров у этого параметра может быть тип integer

130-70-30 130-70

id
integer

Внешний провайдер, через который была проведена операция 130-70-40 130-70

payment_id
string

Уникальный идентификатор платежа в системе внешнего провайдера 130-70-50 130-70

request_id
string

Уникальный идентификатор последнего запроса, относящегося к данной операции, в Gate 130-80 130

status
string

Статус проведенной операции. Подробнее о возможных статусах операций см. Статусы операций и коды ответов. 130-90 130

sum_converted
object

Объект, содержащий валюту платежной системы и сумму операции, переведенной в эту валюту 130-100 130

amount
integer

Сумма операции в дробных единицах валюты платежной системы 130-100-10 130-100

currency
string

Валюта платежной системы в формате ISO 4217 alpha-3 130-100-20 130-100

sum_initial
object

Объект, содержащий сумму и валюту операции, переданные в запросе 130-110 130

amount
integer

Сумма операции, переданная в начальном запросе, в дробных единицах валюты 130-110-10 130-110

currency

string

Валюта операции в формате ISO 4217 alpha-3, переданная в начальном запросе 130-110-20 130-110

type
string

Тип проведенной операции 130-120 130

payment
object

Объект, содержащий данные о платеже 140

date
string

Дата и время последнего обновления статуса платежа в Gate.

Пример: 2017-07-27T15:19:13+0000

140-20 140

description
string

Описание платежа, переданное в начальном запросе 140-30 140

id
string

Уникальный идентификатор платежа в веб-сервисе 140-40 140

is_new_attempts_available
boolean

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

  • true — повторная оплата возможна;
  • false — повторная оплата невозможна.

Этот параметр передается при включении повторных оплат при подключении через Payment Page

140-50 140

method
string

Платежный метод.

Пример: card

140-60 140

merchant_refund_id
string

Уникальный идентификатор возврата в системе мерчанта.

Пример: refund_1

140-61 140

operation_fee
object

Объект, содержащий информацию о комиссии за операцию, начисленной Rocketpay 140-70 140

amount
string

Сумма комиссии за операцию в дробных единицах валюты, если она включена в общую сумму платежа 140-70-10 140-70

currency
string

Валюта, в которой начислена комиссия, в формате ISO 4217 alpha-3.

Пример: EUR

140-70-20 140-70

sum_with_surcharge
string

Общая сумма операции и надбавленной комиссии в дробных единицах валюты 140-70-30 140-70

surcharge_amount
string

Сумма надбавленной к сумме платежа комиссии в дробных единицах валюты. Применяется для МФО 140-70-40 140-70

surcharge_currency
string

Валюта, в которой начислена надбавленная к сумме платежа комиссия, в формате ISO 4217 alpha-3 140-70-50 140-70

region
string

Регион страны, где проводится операция по банковской карте. Доступные значения см. в справочнике Коды регионов 140-80 140

status
string

Cтатус платежа.

Пример: success

140-90 140

sum
object

Объект, содержащий сумму платежа с учетом возвратов и валюту, переданную в начальном запросе 140-100 140

amount
integer

Сумма платежа с учетом возвратов, в дробных единицах валюты 140-100-10 140-100

currency
string

Валюта платежа в формате ISO 4217 alpha-3, переданная в начальном запросе.

Пример: USD

140-100-20 140-100

timeout_attempts
string

Время (в секундах), оставшееся до окончания периода, в течение которого возможно проведение повторной оплаты. Параметр передается при включении повторных оплат при подключении через Payment Page 140-110 140

type  
string

Тип проведенного платежа.

Пример: purchase

140-120 140

project_id
integer

Уникальный идентификатор проекта в Gate 150

provider_extra_fields
object

Объект, содержащий поступившие от внешней платежной системы данные, необходимые для завершения платежа или для отчетности 160

recurring
object

Объект, содержащий данные регистрации платежа как рекуррентного. Объект передается, если в начальном запросе на оплату было передано значение recurring_register=1 и оплата успешно проведена 170

currency
string

Валюта рекуррентного платежа в формате ISO 4217 alpha-3.

Пример: USD

170-10 170

id
integer

Идентификатор рекуррентного платежа 170-20 170

register_payment_id
string

Идентификатор рекуррентного платежа на стороне мерчанта 170-30 170

status
string

Статус повторяемой оплаты. Возможные значения:

  • active— повторяемая оплата включена
  • canceled— повторяемая оплата отменена
170-40 170

type
string

Тип рекуррентного платежа. Возможные значения:

  • R — регулярная оплата
  • U — автооплата
  • C — экспресс-оплата (OneClick)
170-50 170

valid_thru
string

Дата истечения срока действия идентификатора рекуррентного платежа 170-60 170

redirect_data
object

Объект, содержащий данные для перенаправления пользователя в платежный метод для проведения платежа 180

body
object

Дополнительные данные для перенаправления.

Если этот параметр не содержит данных, он представлен в оповещении как пустой массив ("body": []).

Если он параметр какие-то данные, то присутствует в оповещении как JSON-объект ("body": {...}).

180-10 180

method
string

Метод отправки запроса: POST или GET 180-20 180

url
string

URL-адрес для перенаправления пользователя 180-30 180

signature
string

Подпись оповещения. Подробнее о проверке подписей оповещений см. 190