События вебхуков
Love&Pay отправляет уведомления о различных событиях на ваш webhook URL в реальном времени.
Формат уведомления
Все вебхуки отправляются методом POST с JSON payload:
{
"id": "evt_1234567890_abc123",
"event": "invoice.paid",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "PAID",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"paidAt": "2024-01-15T10:30:00.000Z",
"createdAt": "2024-01-15T10:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
Важно: ID счета передается в поле data.id, не data.invoiceId
Заголовки запроса
| Заголовок | Описание |
|---|
Content-Type | application/json |
x-webhook-signature | Подпись в формате sha256=xxx |
x-webhook-id | Уникальный ID вебхука |
x-webhook-timestamp | Unix timestamp отправки (миллисекунды) |
User-Agent | LovePay/1.0 |
Доступные события
События счетов
INVOICE_CREATED — Счёт создан
INVOICE_UPDATED — Данные счёта обновлены
INVOICE_PAID — Счёт оплачен успешно
INVOICE_CANCELLED — Счёт отменён
INVOICE_EXPIRED — Истёк срок действия счёта
События транзакций
TRANSACTION_CREATED — Создана транзакция
TRANSACTION_COMPLETED — Транзакция завершена успешно
TRANSACTION_FAILED — Транзакция не прошла
События счетов
INVOICE_CREATED
Отправляется при создании нового счёта.
{
"id": "evt_1234567890_abc123",
"event": "INVOICE_CREATED",
"timestamp": "2024-01-15T10:00:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "PENDING",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"createdAt": "2024-01-15T10:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
INVOICE_UPDATED
Отправляется при обновлении данных счёта.
{
"id": "evt_1234567890_def456",
"event": "INVOICE_UPDATED",
"timestamp": "2024-01-15T10:15:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "PENDING",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"createdAt": "2024-01-15T10:00:00.000Z",
"updatedAt": "2024-01-15T10:15:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
INVOICE_PAID
Отправляется при успешной оплате счёта. Это основное событие для подтверждения оплаты.
{
"id": "evt_1234567890_ghi789",
"event": "INVOICE_PAID",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "PAID",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"paidAt": "2024-01-15T10:30:00.000Z",
"createdAt": "2024-01-15T10:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
INVOICE_EXPIRED
Отправляется когда срок оплаты счёта истёк.
{
"id": "evt_1234567890_jkl012",
"event": "INVOICE_EXPIRED",
"timestamp": "2024-01-15T11:00:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "EXPIRED",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"createdAt": "2024-01-15T10:00:00.000Z",
"expiredAt": "2024-01-15T11:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
INVOICE_CANCELLED
Отправляется при отмене счёта.
{
"id": "evt_1234567890_mno345",
"event": "INVOICE_CANCELLED",
"timestamp": "2024-01-15T10:45:00.000Z",
"data": {
"id": "uuid-v4",
"invoiceNumber": "INV-12345",
"amount": 150000,
"currency": "RUB",
"status": "CANCELLED",
"customerEmail": "[email protected]",
"customerName": "Иван Иванов",
"customerPhone": "+79991234567",
"createdAt": "2024-01-15T10:00:00.000Z",
"cancelledAt": "2024-01-15T10:45:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
События транзакций
TRANSACTION_CREATED
Отправляется при создании новой транзакции.
{
"id": "evt_1234567890_pqr678",
"event": "TRANSACTION_CREATED",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"id": "transaction-uuid",
"invoiceId": "invoice-uuid",
"amount": 150000,
"currency": "RUB",
"status": "PENDING",
"createdAt": "2024-01-15T10:30:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
TRANSACTION_COMPLETED
Отправляется при успешном завершении транзакции.
{
"id": "evt_1234567890_stu901",
"event": "TRANSACTION_COMPLETED",
"timestamp": "2024-01-15T10:30:05.000Z",
"data": {
"id": "transaction-uuid",
"invoiceId": "invoice-uuid",
"amount": 150000,
"currency": "RUB",
"status": "COMPLETED",
"createdAt": "2024-01-15T10:30:00.000Z",
"completedAt": "2024-01-15T10:30:05.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
TRANSACTION_FAILED
Отправляется когда транзакция не прошла.
{
"id": "evt_1234567890_vwx234",
"event": "TRANSACTION_FAILED",
"timestamp": "2024-01-15T10:30:05.000Z",
"data": {
"id": "transaction-uuid",
"invoiceId": "invoice-uuid",
"amount": 150000,
"currency": "RUB",
"status": "FAILED",
"failureReason": "Недостаточно средств",
"createdAt": "2024-01-15T10:30:00.000Z",
"failedAt": "2024-01-15T10:30:05.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
## События KYC
### KYC_COMPLETED
Отправляется при успешном прохождении KYC верификации.
```json
{
"id": "evt_1234567890_kyc001",
"event": "KYC_COMPLETED",
"timestamp": "2024-01-15T14:00:00.000Z",
"data": {
"sessionId": "kyc_abc123",
"status": "COMPLETED",
"level": "basic",
"metadata": {
"userId": "user_123"
},
"completedAt": "2024-01-15T14:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
KYC_FAILED
Отправляется при неудачной KYC верификации.
{
"id": "evt_1234567890_kyc002",
"event": "KYC_FAILED",
"timestamp": "2024-01-15T14:00:00.000Z",
"data": {
"sessionId": "kyc_abc123",
"status": "FAILED",
"level": "basic",
"failureReason": "document_expired",
"metadata": {
"userId": "user_123"
},
"failedAt": "2024-01-15T14:00:00.000Z"
},
"partnerId": "partner-uuid",
"retryCount": 0
}
Обработка вебхуков
Требования к ответу
HTTP 200-299
Ваш сервер должен вернуть код 200-299 для подтверждения получения
Таймаут 30 секунд
Ответ должен быть получен в течение 30 секунд
Идемпотентность
Обрабатывайте события идемпотентно — они могут приходить повторно
Верификация
Всегда проверяйте подпись x-webhook-signature
Повторные попытки
При неудачной доставке (таймаут или код ≥400) Love&Pay автоматически повторяет отправку до 5 раз:
| Попытка | Задержка |
|---|
| 1 | 1 минута |
| 2 | 5 минут |
| 3 | 30 минут |
| 4 | 2 часа |
| 5 | 12 часов |
Количество повторных попыток отображается в поле retryCount в payload вебхука.