Callback
При изменении статуса платформа отправляет POST запрос идентичный ответу по при создании сделки.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"order": "ext-123",
"merchant": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"state": "created",
"amount_cents": 1000,
"amount_currency": "RUB",
"rate": 88.23,
"payment_data": {
"name": "Артур Абрамов",
"number": "+79990000000",
"bank_name": "Сбербанк",
"url": "https://pay.example.com/payment/3fa85f64"
}
}
Верификация подписи входящего callback
Каждый callback содержит заголовок Signature — HMAC-SHA256 подпись тела запроса.
Как проверить
- Возьми raw body запроса (до парсинга JSON)
- Вычисли HMAC-SHA256 от body используя свой secret_key
- Сравни результат с заголовком Signature
PHP
$signature = hash_hmac('sha256', file_get_contents('php://input'), $secretKey);
$isValid = hash_equals($signature, $request->header('Signature'));
Python
import hmac, hashlib
signature = hmac.new(secret_key.encode(), raw_body, hashlib.sha256).hexdigest()
is_valid = hmac.compare_digest(signature, request.headers['Signature'])
Node.js
const crypto = require('crypto');
const signature = crypto.createHmac('sha256', secretKey).update(rawBody).digest('hex');
const isValid = crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(req.headers['signature']));