Callback

Callback об изменении статуса

При смене статуса платежа или вывода на Callback URL проекта отправляется POST-запрос. Укажите адрес в кабинете: «API и интеграция» → «Callback и подпись».

1. События

typeКогда
payment.succeededПлатёж оплачен
payment.failedОплата отклонена
payment.expiredИстёк срок оплаты
payment.cancelledПлатёж отменён через API
payout.processingВывод принят провайдером
payout.succeeded / payout.failedВывод исполнен / не исполнен
payout.unknownСтатус вывода уточняется
test.pingТестовое событие

2. Тело запроса

json
{
  "id": "evt_01k7x5…",
  "type": "payment.succeeded",
  "environment": "sandbox",
  "created_at": "2026-10-14T12:03:13.000Z",
  "data": { "id": "pay_01k7x3m9qz2hb8c4r6t1vw5yfe", "object": "payment", "status": "SUCCEEDED", "amount": 1000000, … }
}

3. Подпись

KeyValue
X-LC-Event-IdID события — обрабатывайте идемпотентно
X-LC-Event-TypeТип события
X-LC-TimestampUnix-время отправки
X-LC-Signaturev1=HEX(HMAC_SHA256(secret, timestamp + "." + body))

Проверяйте подпись по сырому телу запроса и отклоняйте события старше 5 минут. Секрет — в кабинете, разный для Sandbox и Production.

Node.js
import crypto from "node:crypto";

export function verify(rawBody, headers, secret) {
  const ts = Number(headers["x-lc-timestamp"]);
  if (Math.abs(Date.now() / 1000 - ts) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
  const got = String(headers["x-lc-signature"] || "").replace(/^v1=/, "");
  return expected.length === got.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(got));
}
Python
import hmac, hashlib, time

def verify(raw_body: bytes, headers, secret: str) -> bool:
    ts = int(headers["X-LC-Timestamp"])
    if abs(time.time() - ts) > 300:
        return False
    expected = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, headers["X-LC-Signature"].removeprefix("v1="))

4. Повторы

Ответьте 2xx в течение 10 секунд. Иначе доставка повторится до 8 раз: через 30 с, 2 мин, 10 мин, 30 мин, 1 ч, 3 ч, 6 ч. Адреса во внутренних сетях не принимаются, в Production — только HTTPS.