Баримт бичиг / Гарын авлага
Вебхүүк хүлээн авах
Гарын үсэгтэй үйл явдал аваад итгэхээсээ өмнө баталгаажуул.
Вебхүүк Business буюу түүнээс дээш багцад бий. Тохиргоо, Вебхүүк хэсэгт эсвэл POST /v1/workspaces/WORKSPACE/webhooks-оор эндпойнт үүсгэ. Гарын үсгийн нууц (az_whsec_...) үүсгэхэд буцна.
Юу илгээгдэх вэ
az холбоос, лийд, борлуулалт, түнш элсэлт, шимтгэл, төлбөр, шагналт даалгаврын JSON үйл явдал илгээнэ. Хүргэлт хамгийн багадаа нэг удаа тул үйл явдлын id-г санаж давтагдсаныг үл тооц. 10 секундэд 2xx төлвөөр хариул. Дахин чиглүүлэлт бүтэлгүйтэл гэж тооцогдож, бүтэлгүйтсэн хүргэлтийг дахин оролдоно.
Толгой
| Толгой | Утга |
|---|---|
Az-Signature | t=<unix секунд>,v1=<hex>, нууц солих үед хоёр дахь v1 |
Az-Event-Id | Давтагдашгүй үйл явдлын id, давхардлыг шүүхэд |
Az-Event-Type | Жишээ нь link.created |
Az-Delivery-Id, Az-Attempt | Энэ хүргэлт ба оролдлогын дугаар |
Гарын үсэг шалгах
v1 нь нууцыг бүтнээр нь түлхүүр, "<t>." + түүхий бие-г мессеж болгосон HMAC-SHA256-ийн жижиг hex. t одооноос таван минутаас илүү зөрсөн хүсэлтийг татгалз, тогтмол хугацаанд харьцуул.
import crypto from 'node:crypto';
export function verify(header, rawBody, secret, tolerance = 300) {
const parts = header.split(',').map((p) => p.split('='));
const t = Number(parts.find(([k]) => k === 't')?.[1]);
if (!t || Math.abs(Date.now() / 1000 - t) > tolerance) return false;
const expected = crypto.createHmac('sha256', secret).update(`${t}.`).update(rawBody).digest('hex');
return parts.some(([k, v]) => k === 'v1' && v?.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(v), Buffer.from(expected)));
}
Задлахаасаа өмнө түүхий биеийг үргэлж унш. Гарын үсэг буруу бол дэлгэрэнгүйгүйгээр 400 хариул.