🔔 Уведомления
Callback уведомления
Система отправляет POST запросы на ваш callbackURL при изменении статуса транзакции.
Заголовки callback запросов:
Content-Type: application/jsonUser-Agent: Platix-Callback/1.0Структура PayIn callback
json
{
"id": "e42e0768-d913-4b4b-8708-f94cfeaf0777",
"externalID": "test_merchant_id_1",
"trackerID": "e42e0768-d913-4b4b-8708-f94cfeaf0777",
"status": "COMPLETED",
"amount": "1000",
"commission": "100",
"currency": "RUB",
"bank": "Озон Банк (OZON)",
"method": "CARD",
"receiver": "2200154965960000",
"holder": "Иванов Иван Иванович",
"description": "Тестовая транзакция",
"timestamp": "2024-01-01T12:00:00Z"
}Структура PayOut callback
json
{
"id": "f5ef6b73-0952-4602-a306-82ef1f755f85",
"externalID": "test_merchant_id_2",
"trackerId": "f5ef6b73-0952-4602-a306-82ef1f755f85",
"status": "COMPLETED",
"amount": "5000",
"commission": "355",
"currency": "RUB",
"bank": "Озон Банк (OZON)",
"method": "CARD",
"receiver": "4000000000000000",
"holder": "Иванов Иван Иванович",
"description": "Тестовая транзакция",
"timestamp": "2024-01-01T12:00:00Z"
}Параметры callback
| Параметр | Тип | Описание |
|---|---|---|
| externalID | string | Ваш уникальный ID транзакции |
| trackerId | string | Опциональный ID для отслеживания |
| status | string | Новый статус транзакции |
| amount | string | Сумма транзакции |
| commission | string | Комиссия |
| currency | string | Валюта транзакции |
| bank | string | Банк |
| method | string | Метод платежа/выплаты |
| receiver | string | Реквизиты получателя |
| holder | string | Имя держателя карты |
| description | string | Описание транзакции |
| timestamp | string (ISO 8601) | Время изменения статуса |
Безопасность
🛡️Проверка IPОграничьте доступ к callback URL только с IP-адресов Platix
🔒HTTPSИспользуйте только защищённые HTTPS URL для callback
✅ВалидацияПроверяйте корректность полученных данных
🔁ИдемпотентностьКорректно обрабатывайте дублирующиеся уведомления
⏱️ТаймаутОтвечайте на callback запросы в течение 30 секунд
Повторные попытки: В случае ошибки система выполнит до 3 повторных попыток. Ваш сервер должен отвечать
HTTP 200 для подтверждения получения.Обработка callback
Node.js / Express
javascript
const express = require('express');
const app = express();
app.use(express.json());
app.post('/callback', (req, res) => {
const { externalID, status, amount, currency, method, timestamp } = req.body;
if (!externalID || !status) {
return res.status(400).json({ error: 'Invalid data' });
}
// Обновляем статус в вашей системе
updateTransactionStatus(externalID, status);
// Обязательно отвечаем 200
res.status(200).send('OK');
});
app.listen(3000);PHP
php
<?php
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if ($data && isset($data['externalID'], $data['status'])) {
updateTransactionStatus($data['externalID'], $data['status']);
http_response_code(200);
echo 'OK';
} else {
http_response_code(400);
echo 'Invalid data';
}
?>Python / Flask
python
from flask import Flask, request
app = Flask(__name__)
@app.route('/callback', methods=['POST'])
def callback():
data = request.get_json()
if data and 'externalID' in data and 'status' in data:
update_transaction_status(data['externalID'], data['status'])
return 'OK', 200
return 'Invalid data', 400
if __name__ == '__main__':
app.run(port=3000)