מערכת Webhook לאתר: קבלת, שליחת וניטור אירועים
חשוב להבין: כאשר שער תשלום שולח התראה על עסקה, זמן הניתוק (timeout) בדרך כלל לא עולה על 10 שניות. אם השרת לא מחזיר HTTP 200 OK, הספק מנסה שוב לשלוח את הבקשה, ונתונים עלולים להשתכפל או ללכת לאיבוד. במשך חמש שנים, יישמנו למעלה מ-20 אינטגרציות Webhook עם שירותים שונים: Stripe, GitHub, מערכות CRM. כל פרט — מאימות HMAC ועד תור הודעות מתות (dead letter queue) — נבדק בעשרות פרויקטים. אנחנו יודעים איך להימנע מעיבוד סינכרוני, מהתעלמות מכפילויות ומאימות חלש.
יישום נאיבי מטפל באירועים בצורה סינכרונית, מתעלם ממזהים כפולים ומדלג על אימות חתימה. התוצאה: חיובים כפולים, הזמנות שאבדו, וכשלי אינטגרציה שקטים. הגישה שלנו מבטלת את הסיכונים האלה כבר בשלב התכנון. קבלו ייעוץ — נעריך את מורכבות האינטגרציות שלכם ונציע ארכיטקטורה שלא תכשל. צרו קשר כדי לדון בפרטים.
למה Webhooks עדיפים על פני Polling?
| קריטריון | Webhook | Polling |
|---|---|---|
| זמן השהיה (Latency) | מיידי | עד מרווח ה-Polling (1–60 שניות) |
| עומס על השרת | מינימלי (רק באירועים) | קבוע (בכל בקשה) |
| סיכון לאירועים שהוחמצו | נמוך (ניסיון חוזר, תור) | אפשרי עם מרווח גדול |
| מורכבות היישום | בינונית (אימות, אידמפוטנטיות) | פשוטה יותר אך יקרה יותר לתפעול |
Webhooks הם הבחירה הברורה להתראות בזמן אמת. הם דורשים עיבוד נכון: אימות, הסרת כפילויות וניסיון חוזר. החיסכון בזמן ובמשאבים שמגיע עם שימוש ב-Webhooks מצדיק את עלות היישום.
איך אנחנו מיישמים קבלת Webhook מאובטחת
אנחנו בונים את הארכיטקטורה על Laravel עם תורי Redis. הנקודה המרכזית היא אימות חתימה לפני כל לוגיקה עסקית. כל ספק משתמש באלגוריתם משלו:
Stripe / HMAC-SHA256:
$secret = config('services.stripe.webhook_secret');
$sigHeader = $request->header('Stripe-Signature');
$payload = $request->getContent();
list($t, $v1) = parseStripeSignature($sigHeader);
$signed = hash_hmac('sha256', "{$t}.{$payload}", $secret);
if (!hash_equals($signed, $v1)) {
throw new InvalidSignatureException();
}תמיד השתמשו ב-$secret = config('services.stripe.webhook_secret'); $sigHeader = $request->header('Stripe-Signature'); $payload = $request->getContent(); list($t, $v1) = parseStripeSignature($sigHeader); $signed = hash_hmac('sha256', "{$t}.{$payload}", $secret); if (!hash_equals($signed, $v1)) { throw new InvalidSignatureException(); } — הגנה מפני התקפות timing. לאחר האימות, ה-job נשלח לתור כדי למנוע חסימת התגובה (זמן הניתוק של הספק הוא 3–10 שניות).
הסרת כפילויות: אנחנו מגדירים ייחודיות ל-job למשך שעה באמצעות hash_equals. במסד הנתונים, אנחנו בודקים uniqueFor ומדלגים על כפילויות. זה מבטל חיובים כפולים או הזמנות כפולות.
מה הופך את המערכת לחסינת תקלות?
שליחת אירועים יוצאים מנוהלת על ידי מנויים: כל בקשה נחתמת עם HMAC, ומופעל backoff אקספוננציאלי בשגיאות. לאחר 10 כשלונות, המנוי מושבת אוטומטית — תקבלו התראה בטלגרם. תור ההודעות המתות אוסף jobs שלא עובדו, והמהנדסים מקבלים התראה.
| ניסיון | השהיה |
|---|---|
| 1 | 10 שניות |
| 2 | 30 שניות |
| 3 | 2 דקות |
| 4 | 10 דקות |
| 5+ | 30 דקות (מקסימום 10) |
Backoff אקספוננציאלי עם jitter מפחית את העומס על השירות החיצוני ומגביר את סיכויי ההצלחה במשלוח.
מה כלול בפיתוח מערכת Webhook במפתחות מלאים
- קבלת webhooks נכנסים: רישום נתיבים, אימות חתימה, לוגים, שליחה לתור.
- שליחת אירועים יוצאים: ניהול מנויים, חתימה, לוגיקת ניסיון חוזר, השבתה.
- לוח ניטור: צפייה בבקשות נכנסות/יוצאות, סטטוסים, payload, שגיאות. אינטגרציה אופציונלית עם Laravel Telescope.
- תור הודעות מתות: jobs שלא עובדו נשלחים לתור נפרד עם התראות.
- תיעוד והדרכה: תיאור API, הוראות לצוות שלכם.
- אחריות: תמיכה לחודש אחד לאחר ההשקה.
דוגמה למדדים טיפוסיים (מבוסס על 20+ פרויקטים)
- 99.9% מהאירועים נמסרים בניסיון הראשון לאחר יישום התור. - זמן עיבוד ממוצע לאירוע — 200 אלפיות השנייה (לא כולל קריאות חיצוניות). - שיעור כפילויות לאחר הסרת כפילויות — מתחת ל-0.01%.תהליך ולוחות זמנים
- אנליזה — דיון בספקים, אירועים, דרישות אבטחה.
- עיצוב — בחירת תור, סכמת חתימה, מבנה טבלאות.
- יישום — כתיבת קוד, כיסוי תרחישים מרכזיים בבדיקות.
- בדיקות — הרצת בדיקות אינטגרציה, סימולציה של אירועים.
- השקה וניטור — פריסה על השרת שלכם, חיבור התראות.
מערכת בסיסית (ספק אחד, אימות, תור) — מיום עבודה אחד. פלטפורמה מלאה עם מנויים, לוח ניטור וניסיון חוזר — 3–5 ימים. העלות תלויה במספר האינטגרציות ובמורכבות — צרו קשר, ונכין הצעה.
טעויות נפוצות ביישום Webhook
- עיבוד סינכרוני — התגובה ללקוח לוקחת יותר מ-10 שניות, הספק מחשיב את האירוע כלא נמסר.
- התעלמות מכפילויות — בקשות חוזרות מובילות לפעולות כפולות.
- אימות חלש — כל אחד יכול לקרוא ל-endpoint שלכם ולזייף נתונים.
- חוסר ניטור — שגיאות לא מתגלות, מנויים "נתקעים."
Stripe משתמש ב-HMAC-SHA256 לחתימות — אותה גישה שאנחנו מיישמים. תורי Laravel מספקים תורים מובנים עם תמיכה בייחודיות. הטכנולוגיות האלה מוכחות על ידי אלפי פרויקטים.
אנחנו מתחשבים בסיכונים כבר בשלב התכנון — זה מבטיח פעילות אינטגרציה יציבה. הזמינו פיתוח מערכת Webhook: דונו בפרטי הפרויקט שלכם ואנחנו נכין הצעה.







