Webhooks · HMAC
ARIS уведомляет маркетплейс о каждом изменении статуса сделки. Каждый запрос подписан HMAC-SHA256 — обязательно проверяйте подпись.
Установить webhook URL
curl -X POST https://arisdoc.cloud/api/mkt/webhook \
-H "X-Aris-Key: mk_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://your-marketplace.com/aris/webhook"}'
В ответ — секрет для HMAC-подписи:
{ "ok": true, "url": "https://your-marketplace.com/aris/webhook", "secret": "whsec_…" }
Получаемые события
| Событие | Когда | |---------------------|---------------------------------------------------| | deal.approved | Покупатель согласовал условия | | deal.rejected | Покупатель отклонил | | deal.escrow_hold | Деньги захолдированы | | deal.paid | Сделка раскрыта (released) | | deal.refunded | Возврат покупателю | | deal.disputed | Открыт спор |
Формат тела
{
"event": "deal.approved",
"id": "f51c…",
"external_id": "order-100245",
"title": "Арматура А500С 12мм, 20т",
"amount": 1480000,
"currency": "RUB",
"status": "approved",
"buyer_email": "buyer@example.com",
"seller_email": "supplier@zavod.ru"
}
Проверка подписи
import crypto from "node:crypto";
function verify(body, signature, secret) {
const expected = crypto.createHmac("sha256", secret).update(body).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}
app.post("/aris/webhook", express.raw({ type: "application/json" }), (req, res) => {
if (!verify(req.body, req.headers["x-aris-signature"], process.env.ARIS_WEBHOOK_SECRET)) {
return res.status(401).end();
}
const event = JSON.parse(req.body);
// ... handle event
res.status(200).end();
});
JSON.parse → JSON.stringify подпись не сойдётся из-за нормализации пробелов.Доставка и ретраи
- Таймаут на стороне ARIS: 6 секунд
- Любой статус кроме
2xxсчитается ошибкой и попадает в лог доставок - Повторных попыток в MVP нет — отслеживайте статус через
/admin/marketplaces/{slug}/logили подключите свой ретрай