Skip to content

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 подпись тела запроса.

Как проверить

  1. Возьми raw body запроса (до парсинга JSON)
  2. Вычисли HMAC-SHA256 от body используя свой secret_key
  3. Сравни результат с заголовком 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']));