Интеграция API
Вебхуки
Обработка асинхронных уведомлений
Исходящие вебхуки (Webhooks)
Вебхуки позволяют бэкенду узнавать об оплате без постоянного опроса API.
Событие:
payment.succeeded— успешная оплата и зачисление на баланс мерчанта.
Как работают вебхуки
- Укажите Webhook URL в настройках магазина (
webhook_url). - При событии Datagio отправляет HTTP POST с JSON.
- Ваш сервер отвечает любым статусом
2xx.
HTTP-заголовки
X-Webhook-Event:payment.succeededX-Webhook-Signature: hex HMAC-SHA256 тела запроса (если заданwebhook_secret)
Те же значения дублируются в Datagio-Event и Datagio-Signature.
Проверка подписи
Подпись: hex(HMAC-SHA256(raw_body, webhook_secret)).
Пример (Node.js)
const crypto = require('crypto');
function verifyWebhook(requestBody, signatureHeader, webhookSecret) {
const computedSignature = crypto
.createHmac('sha256', webhookSecret)
.update(requestBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(computedSignature, 'utf8'),
Buffer.from(signatureHeader, 'utf8')
);
}
IP-адреса для фильтрации (IP Whitelisting)
Если фильтруете входящий трафик, разрешите POST с:
159.69.206.192— Hetzner (Нюрнберг)95.85.240.13— ММТС-9 (Москва)89.110.89.204— DataPro (Москва)
Формат уведомления (JSON)
| Поле | Тип | Описание |
|---|---|---|
event |
string | "payment.succeeded" |
data.payment_link_id |
string (UUID) | ID оплаченной ссылки |
data.id |
string (UUID) | То же, что payment_link_id |
data.shop_id |
integer | ID магазина |
data.order_id |
string | null | Ваш внешний ID заказа |
data.amount |
string | Цена товара, ₽ ("1000.00") |
data.merchant_credit |
string | Зачислено после комиссии, ₽ |
data.status |
string | "paid" |
data.paid_at |
string | Оплата, RFC3339 (+03:00) |
{
"event": "payment.succeeded",
"data": {
"payment_link_id": "9c0526fe-0e45-423d-91ca-368e98b8ea96",
"id": "9c0526fe-0e45-423d-91ca-368e98b8ea96",
"shop_id": 1,
"order_id": "ORDER-12345",
"amount": "1000.00",
"merchant_credit": "950.00",
"status": "paid",
"paid_at": "2026-09-17T18:00:00+03:00"
}
}
Доставка и повторы
- Успех — любой HTTP
2xx. - Иначе до 8 попыток с экспоненциальным backoff.
- Обрабатывайте идемпотентно по
data.payment_link_id.
[!IMPORTANT] Одно и то же уведомление может прийти повторно. Не зачисляйте заказ дважды.