Оповещения (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 могут поступать с задержкой.
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), может отличаться в зависимости от типа операции и конфигурации оповещений. В этом разделе приведены описания параметров, используемых в типовых случаях.
| Параметр | Описание | tree |
|---|---|---|
|
account |
Объект, содержащий данные банковской карты или учетной записи пользователя | 10 |
|
card_holder |
Имя владельца банковской карты | 10-10 10 |
|
expiry_month |
Месяц срока действия банковской карты | 10-20 10 |
|
expiry_year |
Год срока действия банковской карты | 10-30 10 |
|
id |
Идентификатор сохраненной карты в Gate | 10-40 10 |
|
number |
Маскированный номер банковской карты или учетной записи пользователя. Пример: |
10-50 10 |
|
token |
Токен банковской карты пользователя. Токен генерируется автоматически при успешной оплате при условии, что эта возможность была активирована при подключении | 10-60 10 |
|
type |
Тип банковской карты или наименование оператора мобильной связи, который использовался для оплаты. Доступные значения типов карт см. в разделе Поддерживаемые типы платежных карт. |
10-70 10 |
|
avs_data |
Объект, который содержит данные для AVS-проверки (Address Verification Service). Подробнее см. Проверка Address Verification Service | 30 |
|
avs_post_code |
Почтовый индекс пользователя | 30-10 30 |
|
avs_street_address |
Адрес пользователя | 30-20 30 |
|
avs_result |
Результат AVS-проверки (Address Verification Service). Подробнее см. в разделе Проверка Address Verification Service | 40 |
|
bank |
Объект, содержащий данные о банке-эмитенте карты пользователя | 50 |
|
name |
Наименование банка-эмитента карты пользователя | 50-10 50 |
|
customer |
Объект, содержащий информацию о пользователе, совершающем платеж | 70 |
|
billing |
Объект, содержащий информацию о платежном адресе пользователя | 70-10 70 |
|
address |
Платежный адрес пользователя | 70-10-10 70-10 |
|
city |
Город платежного адреса пользователя | 70-10-20 70-10 |
|
country |
Страна платежного адреса пользователя в формате ISO 3166-1 alpha-2. Пример: |
70-10-30 70-10 |
|
postal |
Индекс платежного адреса пользователя | 70-10-40 70-10 |
|
region |
Район, область, край или республика платежного адреса пользователя | 70-10-50 70-10 |
|
city |
Город пользователя. Пример: |
70-20 70 |
|
country |
Страна пользователя в формате ISO 3166-1 alpha-2, переданная в начальном запросе. Пример: |
70-30 70 |
|
day_of_birth |
Дата рождения пользователя в формате ДД-ММ-ГГГГ. Пример: |
70-40 70 |
|
first_name |
Имя пользователя. Пример: |
70-50 70 |
|
id |
Уникальный идентификатор пользователя в проекте | 70-60 70 |
|
ip_address |
IP-адрес пользователя, переданный в начальном запросе | 70-70 70 |
|
last_name |
Фамилия пользователя. Пример: |
70-80 70 |
|
middle_name |
Отчество пользователя. Пример: |
70-90 70 |
|
phone |
Телефон пользователя. Целое значение: от 4 до 24 цифр | 70-100 70 |
|
decision |
Строка, содержащая решение системы Risk Control System о прохождении платежа. | 80 |
|
decision_message |
Массив строк, содержащих сообщения от Risk Control System о прохождении платежа. Пример: |
90 |
|
display_data |
Объект, содержащий переданные от внешней платежной системы данные для отображения пользователю QR-кода для оплаты | 100 |
|
errors |
Массив сообщений об ошибках, связанных с проведением платежа | 110 |
|
ErrorItem |
Объект, содержащий информацию об одной ошибке | 110-10 110 |
|
code |
Код ошибки | 110-10-10 110-10 |
|
description |
Параметр, описывающий причину ошибки | 110-10-10 110-10 |
|
field |
Параметр, в котором допущена ошибка, если удалось определить неверный параметр | 110-10-20 110-10 |
|
message |
Сообщение, уточняющее причину ошибки | 110-10-30 110-10 |
|
interface_type |
Объект, содержащий информацию об источнике запроса на проведение платежа | 120 |
|
id |
Параметр, уточняющий, какой интерфейс использовался для отправки запроса на проведение платежа. Возможные значения:
|
120-10 120 |
|
user |
Параметр, уточняющий пользователя Dashboard. отправившего запрос на проведение платежа. Пример: |
120-20 120 |
|
operation |
Объект, содержащий информацию об операции, по которой отправлено оповещение | 130 |
|
code |
Унифицированный код ответа Gate. Подробнее о кодах ответов см. Статусы операций и коды ответов | 130-10 130 |
|
created_date |
Дата и время создания операции | 130-20 130 |
|
date |
Дата и время последнего обновления статуса операции в Gate | 130-30 130 |
|
eci |
Индикатор, отображающий результат аутентификации пользователя с использованием 3‑D Secure. Подробнее см. Коды Electronic Commerce Indicator | 130-40 130 |
|
id |
Уникальный идентификатор операции в Gate | 130-50 130 |
|
message |
Унифицированное сообщение Gate. Подробнее см. в Статусы операций и коды ответов | 130-60 130 |
|
provider |
Объект, который содержит информацию внешнего провайдера о результате выполнения платежа | 130-70 130 |
|
auth_code |
Код авторизации, полученный от внешнего провайдера | 130-70-10 130-70 |
|
date |
Дата и время завершения обработки платежа внешним провайдером. Пример: |
130-70-20 130-70 |
|
endpoint_id |
CRC32-идентификатор платежного шлюза внешнего провайдера. В некоторых случаях из-за особенностей платежных систем и провайдеров у этого параметра может быть тип integer |
130-70-30 130-70 |
|
id |
Внешний провайдер, через который была проведена операция | 130-70-40 130-70 |
|
payment_id |
Уникальный идентификатор платежа в системе внешнего провайдера | 130-70-50 130-70 |
|
request_id |
Уникальный идентификатор последнего запроса, относящегося к данной операции, в Gate | 130-80 130 |
|
status |
Статус проведенной операции. Подробнее о возможных статусах операций см. Статусы операций и коды ответов. | 130-90 130 |
|
sum_converted |
Объект, содержащий валюту платежной системы и сумму операции, переведенной в эту валюту | 130-100 130 |
|
amount |
Сумма операции в дробных единицах валюты платежной системы | 130-100-10 130-100 |
|
currency |
Валюта платежной системы в формате ISO 4217 alpha-3 | 130-100-20 130-100 |
|
sum_initial |
Объект, содержащий сумму и валюту операции, переданные в запросе | 130-110 130 |
|
amount |
Сумма операции, переданная в начальном запросе, в дробных единицах валюты | 130-110-10 130-110 |
|
currency |
Валюта операции в формате ISO 4217 alpha-3, переданная в начальном запросе | 130-110-20 130-110 |
|
type |
Тип проведенной операции | 130-120 130 |
|
payment |
Объект, содержащий данные о платеже | 140 |
|
date |
Дата и время последнего обновления статуса платежа в Gate. Пример: |
140-20 140 |
|
description |
Описание платежа, переданное в начальном запросе | 140-30 140 |
|
id |
Уникальный идентификатор платежа в вашей системе | 140-40 140 |
|
is_new_attempts_available |
Флаг, указывающий на возможность проведения повторной оплаты:
Этот параметр передается при включении повторных оплат при подключении через Payment Page |
140-50 140 |
|
method |
Платежный метод. Пример: |
140-60 140 |
|
merchant_refund_id |
Уникальный идентификатор возврата в системе мерчанта. Пример: |
140-61 140 |
|
operation_fee |
Объект, содержащий информацию о комиссии за операцию, начисленной Rocketpay | 140-70 140 |
|
amount |
Сумма комиссии за операцию в дробных единицах валюты, если она включена в общую сумму платежа | 140-70-10 140-70 |
|
currency |
Валюта, в которой начислена комиссия, в формате ISO 4217 alpha-3. Пример: |
140-70-20 140-70 |
|
sum_with_surcharge |
Общая сумма операции и надбавленной комиссии в дробных единицах валюты | 140-70-30 140-70 |
|
surcharge_amount |
Сумма надбавленной к сумме платежа комиссии в дробных единицах валюты. Применяется для МФО | 140-70-40 140-70 |
|
surcharge_currency |
Валюта, в которой начислена надбавленная к сумме платежа комиссия, в формате ISO 4217 alpha-3 | 140-70-50 140-70 |
|
region |
Регион страны, где проводится операция по банковской карте. Доступные значения см. в справочнике Коды регионов | 140-80 140 |
|
status |
Статус платежа Пример: |
140-90 140 |
|
sum |
Объект, содержащий сумму платежа и с учетом возвратов валюту, переданную в начальном запросе | 140-100 140 |
|
amount |
Сумма платежа с учетом возвратов, в дробных единицах валюты | 140-100-10 140-100 |
|
currency |
Валюта платежа в формате ISO 4217 alpha-3, переданная в начальном запросе Пример: |
140-100-20 140-100 |
|
timeout_attempts |
Время (в секундах), оставшееся до окончания периода, в течение которого возможно проведение повторной оплаты. Параметр передается при включении повторных оплат при подключении через Payment Page | 140-110 140 |
|
type |
Тип проведенного платежа Пример: |
140-120 140 |
|
project_id |
Уникальный идентификатор проекта в Gate | 150 |
|
provider_extra_fields |
Объект, содержащий поступившие от внешней платежной системы данные, необходимые для завершения платежа или для отчетности | 160 |
|
recurring |
Объект, содержащий данные регистрации платежа как рекуррентного. Объект передается, если в начальном запросе на оплату было передано значение recurring_register=1 и оплата успешно проведена | 170 |
|
currency |
Валюта рекуррентного платежа в формате ISO 4217 alpha-3. Пример: |
170-10 170 |
|
id |
Идентификатор рекуррентного платежа | 170-20 170 |
|
register_payment_id |
Идентификатор рекуррентного платежа на стороне мерчанта | 170-30 170 |
|
status |
Статус повторяемой оплаты. Возможные значения:
|
170-40 170 |
|
type |
Тип рекуррентного платежа. Возможные значения:
|
170-50 170 |
|
valid_thru |
Дата истечения срока действия идентификатора рекуррентного платежа | 170-60 170 |
|
redirect_data |
Объект, содержащий данные для перенаправления пользователя в платежный метод для проведения платежа | 180 |
|
body |
Дополнительные данные для перенаправления. Если этот параметр не содержит данных, он представлен в оповещении как пустой массив ( Если он параметр какие-то данные, то присутствует в оповещении как JSON-объект ( |
180-10 180 |
|
method |
Метод отправки запроса: POST или GET
|
180-20 180 |
|
url |
URL-адрес для перенаправления пользователя | 180-30 180 |
|
signature |
Подпись оповещения. Подробнее о проверке подписей оповещений см. | 190 |