VUZDevelopers
Webhooks

אימות חתימה (Signature verification)

סכימת ה-HMAC-SHA256 האמיתית שבה VUZ משתמש — מאומתת מול קוד המשלוח בפועל.

זו לא סכימת t=,v1= בסגנון Stripe שאולי ראיתם מתוארת במקומות אחרים. המימוש האמיתי חותם רק על ה-payload עצמו — כותרת חותמת הזמן נפרדת ואינה חלק מהחתימה.

הכותרות ש-VUZ שולח

Content-Type: application/json
User-Agent: VUZ-Webhook/1.0
X-Vuz-Signature: 5f3d8a1c9b...   (HMAC-SHA256 בקידוד hex)
X-Vuz-Timestamp: 1751371260      (שניות מאז epoch — לא חלק מהחתימה)
X-Vuz-Delivery-Id: 9c2f6b2e-...
X-Vuz-Event: document.finalized

נוסחת החתימה

signature = hex( HMAC_SHA256( endpoint_secret, JSON.stringify(payload) ) )

ה-endpoint_secret הוא הסוד שנוצר אקראית בעת יצירת ה-webhook. הקלט ל-HMAC הוא רק גוף ה-JSON המסודר — X-Vuz-Timestamp אינו חלק מהחתימה.

אמתו מול הבייטים הגולמיים של הבקשה, לא מול ערך שאתם מסדרים מחדש בעצמכם — JSON.stringify(JSON.parse(body)) עלול לשנות סדר מפתחות ולשבור את ההשוואה בשקט.

דוגמאות קוד מאומתות ל-Node.js, PHP, ו-Python נמצאות בגרסה האנגלית של העמוד: Webhooks → Signature verification — הקוד עצמו זהה בשתי השפות.

בדיקה מול חתימה אמיתית

POST /api/v1/webhooks/{id}/test שולח שליחה אמיתית וחתומה נכון ל-endpoint שלכם — השתמשו בזה לאימות קוד הבדיקה שלכם מול חתימה אמיתית, ולא בבניית fixture ידני.

On this page